Merge remote-tracking branch 'remotes/upstrem/master' into skiddingAI
13
.travis.yml
@@ -11,12 +11,17 @@ compiler:
|
||||
# only:
|
||||
# - master
|
||||
before_install:
|
||||
# UPDATE REPOS
|
||||
# Update repos
|
||||
- sudo apt-get update -qq
|
||||
# INSTALL DEPENDENCIES
|
||||
- sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libgl1-mesa-dev libglu1-mesa-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev
|
||||
# Install dependencies
|
||||
- sudo apt-get install build-essential cmake libogg-dev libvorbis-dev libopenal-dev libxxf86vm-dev libcurl4-openssl-dev libfribidi-dev libbluetooth-dev
|
||||
# Install mesa from an other repo (a newer version is required)
|
||||
- sudo apt-add-repository "deb http://archive.ubuntu.com/ubuntu quantal main restricted"
|
||||
- sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 3B4FE6ACC0B21F32
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install libgl1-mesa-dev libglu1-mesa-dev
|
||||
script:
|
||||
# BUILD COMMANDS
|
||||
# Build commands
|
||||
- mkdir build
|
||||
- cd build
|
||||
- cmake .. -DCMAKE_BUILD_TYPE=Debug
|
||||
|
||||
@@ -117,7 +117,7 @@ endif()
|
||||
|
||||
if(UNIX)
|
||||
if(USE_CPP2011)
|
||||
add_definitions("-std=gnu++11")
|
||||
add_definitions("-std=c++0x")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -282,6 +282,7 @@ if(MSVC)
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
"${PROJECT_SOURCE_DIR}/dependencies/dll"
|
||||
$<TARGET_FILE_DIR:supertuxkart>)
|
||||
add_custom_target(stkshaders SOURCES ${STK_SHADERS})
|
||||
endif()
|
||||
|
||||
# Optional tools
|
||||
|
||||
BIN
data/CREDITS
@@ -1,6 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<achievements>
|
||||
<achievement id="1" check-type="all-at-least" reset-after-race="no"
|
||||
<achievement id="1" check-type="all-at-least" reset-type="never"
|
||||
title="Christoffel Columbus" description="Play every official track at least once." >
|
||||
<farm goal="1"/>
|
||||
<scotland goal="1"/>
|
||||
@@ -13,32 +13,35 @@
|
||||
<hacienda goal="1"/>
|
||||
<jungle goal="1"/>
|
||||
</achievement>
|
||||
<achievement id="2" check-type="all-at-least" reset-after-race="no"
|
||||
<achievement id="2" check-type="all-at-least" reset-type="never"
|
||||
title="Strike!" description="Hit 10 karts with a bowling-ball.">
|
||||
<ball goal="10"/>
|
||||
</achievement>
|
||||
<achievement id="3" check-type="one-at-least" reset-after-race="yes"
|
||||
<achievement id="3" check-type="one-at-least" reset-type="race"
|
||||
title="Arch Enemy" description="Hit the same kart at least 5 times in one race">
|
||||
<hit goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="4" check-type="all-at-least" reset-after-race="yes"
|
||||
<achievement id="4" check-type="all-at-least" reset-type="race"
|
||||
title="Marathoner" description="Make a race with 5 laps or more">
|
||||
<laps goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="5" check-type="all-at-least" reset-after-race="yes"
|
||||
title="Skid-row" description="Make 5 skidding in a single race">
|
||||
<achievement id="5" check-type="all-at-least" reset-type="lap"
|
||||
title="Skid-row" description="Make 5 skidding in a single lap">
|
||||
<skidding goal="5"/>
|
||||
</achievement>
|
||||
<achievement id="6" check-type="all-at-least" reset-after-race="no"
|
||||
<achievement id="6" check-type="all-at-least" reset-type="never"
|
||||
title="Gold driver" description="Win in all single player modes, against at least 3 opponents.">
|
||||
<standard goal="1"/>
|
||||
<std_timetrial goal="1"/>
|
||||
<follow_leader goal="1"/>
|
||||
<opponents goal="3"/>
|
||||
</achievement>
|
||||
<achievement id="7" check-type="all-at-least" reset-after-race="yes"
|
||||
<achievement id="7" check-type="all-at-least" reset-type="race"
|
||||
title="Powerup Love" description="Use 10 or more powerups in a race">
|
||||
<poweruplover goal="10"/>
|
||||
</achievement>
|
||||
</achievements>
|
||||
|
||||
<achievement id="8" check-type="all-at-least" reset-type="never"
|
||||
title="Unstoppable" description="Win 5 single races in a row">
|
||||
<wins goal="5"/>
|
||||
</achievement>
|
||||
</achievements>
|
||||
BIN
data/gui/down.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
54
data/gui/edit_track.stkgui
Normal file
@@ -0,0 +1,54 @@
|
||||
<stkgui>
|
||||
|
||||
<div x="2%" y="1%" width="96%" height="98%" layout="vertical-row" padding="10">
|
||||
|
||||
<header id="selected_track" width="80%" height="30"
|
||||
I18N="No neeed to translate this, it will be overwritten by the track name"
|
||||
text="" align="center" text_align="center" />
|
||||
|
||||
<spacer height="20" />
|
||||
|
||||
<!-- Track selection -->
|
||||
<box width="100%" height="60%" layout="vertical-row">
|
||||
<ribbon_grid id="tracks" proportion="1" width="100%" height="100%" square_items="true"
|
||||
label_location="each" align="center" child_width="240" child_height="160" />
|
||||
</box>
|
||||
|
||||
<!-- Populated dynamically at runtime -->
|
||||
<tabs width="100%" height="30" id="trackgroups"> </tabs>
|
||||
|
||||
<spacer height="50" />
|
||||
|
||||
<!-- Laps and reverse -->
|
||||
<div width="100%" height="100" layout="horizontal-row" align="center">
|
||||
|
||||
<spacer proportion="1" />
|
||||
|
||||
<label id="laps_label" text_align="left"
|
||||
I18N="In the edit track screen" text="Number of laps:" />
|
||||
<spacer width="20" />
|
||||
<spinner id="laps" proportion="1" width="100" min_value="1"
|
||||
max_value="99" wrap_around="false" />
|
||||
|
||||
<spacer proportion="1" />
|
||||
|
||||
<label id="reverse_label" text_align="left"
|
||||
I18N="In the edit track screen" text="Reverse:" />
|
||||
<spacer width="20" />
|
||||
<checkbox id="reverse" />
|
||||
|
||||
<spacer proportion="1" />
|
||||
</div>
|
||||
|
||||
<!-- Dialog buttons -->
|
||||
<div width="100%" height="60" layout="horizontal-row">
|
||||
<spacer proportion="2" />
|
||||
<button id="ok" text="OK" proportion="1" />
|
||||
<spacer proportion="1" />
|
||||
<button id="cancel" text="Cancel" proportion="1" />
|
||||
<spacer proportion="2" />
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</stkgui>
|
||||
21
data/gui/enter_gp_name_dialog.stkgui
Normal file
@@ -0,0 +1,21 @@
|
||||
<stkgui>
|
||||
|
||||
<div x="2%" y="10%" width="96%" height="80%" layout="vertical-row" >
|
||||
|
||||
<label id="title" width="100%" text_align="center" word_wrap="true"
|
||||
I18N="In the 'add new grand prix' dialog"
|
||||
text="Please enter the name of the grand prix" proportion="1" />
|
||||
|
||||
<spacer height="25" width="10" />
|
||||
|
||||
<textbox id="textfield" width="75%" I18N="In the 'add new grand prix' dialog" align="center"/>
|
||||
|
||||
<spacer height="20" width="20" />
|
||||
|
||||
<button id="cancel" I18N="When configuring input" text="Press ESC to cancel" align="center"/>
|
||||
|
||||
<spacer height="15" width="20" />
|
||||
|
||||
</div>
|
||||
|
||||
</stkgui>
|
||||
BIN
data/gui/gp_add_track.png
Normal file
|
After Width: | Height: | Size: 6.1 KiB |
BIN
data/gui/gp_copy.png
Normal file
|
After Width: | Height: | Size: 19 KiB |
BIN
data/gui/gp_edit.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/gui/gp_edit_track.png
Normal file
|
After Width: | Height: | Size: 9.3 KiB |
BIN
data/gui/gp_new.png
Normal file
|
After Width: | Height: | Size: 14 KiB |
BIN
data/gui/gp_remove.png
Normal file
|
After Width: | Height: | Size: 17 KiB |
BIN
data/gui/gp_remove_track.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
data/gui/gp_rename.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
BIN
data/gui/gp_save.png
Normal file
|
After Width: | Height: | Size: 5.5 KiB |
35
data/gui/gpedit.stkgui
Normal file
@@ -0,0 +1,35 @@
|
||||
<stkgui>
|
||||
|
||||
<icon-button id="back" x="0" y="0" height="8%" icon="gui/back.png" />
|
||||
|
||||
<div x="2%" y="1%" width="96%" height="98%" layout="vertical-row">
|
||||
|
||||
<header id="title" width="80%" I18N="Title in edit grand prix screen"
|
||||
text="Edit Grand Prix" align="center" text_align="center" />
|
||||
|
||||
<spacer width="100%" height="2%" />
|
||||
|
||||
<box proportion="5" width="98%" align="center" layout="vertical-row" padding="6">
|
||||
<list id="tracks" x="0" y="0" width="100%" height="100%" keep_selection="true" />
|
||||
</box>
|
||||
|
||||
<spacer width="100%" height="2%" />
|
||||
|
||||
<buttonbar proportion="1" id="menu" height="135" width="100%" align="center">
|
||||
<icon-button id="up" width="128" height="128" icon="gui/up.png"
|
||||
I18N="Menu item" text="Move up" />
|
||||
<icon-button id="down" width="128" height="128" icon="gui/down.png"
|
||||
I18N="Menu item" text="Move down" />
|
||||
<icon-button id="add" width="128" height="128" icon="gui/gp_add_track.png"
|
||||
I18N="Menu item" text="Add" />
|
||||
<icon-button id="edit" width="128" height="128" icon="gui/gp_edit_track.png"
|
||||
I18N="Menu item" text="Edit" />
|
||||
<icon-button id="remove" width="128" height="128" icon="gui/gp_remove_track.png"
|
||||
I18N="Menu item" text="Remove" />
|
||||
<icon-button id="save" width="128" height="128" icon="gui/gp_save.png"
|
||||
I18N="Menu item" text="Save" />
|
||||
</buttonbar>
|
||||
|
||||
</div>
|
||||
|
||||
</stkgui>
|
||||
BIN
data/gui/gpeditor.png
Normal file
|
After Width: | Height: | Size: 16 KiB |
45
data/gui/gpeditor.stkgui
Normal file
@@ -0,0 +1,45 @@
|
||||
<stkgui>
|
||||
|
||||
<icon-button id="back" x="0" y="0" height="8%" icon="gui/back.png"/>
|
||||
|
||||
<div x="2%" y="1%" width="96%" height="98%" layout="vertical-row" >
|
||||
|
||||
<header width="80%" I18N="Title in grand prix editor screen" text="Grand Prix editor"
|
||||
align="center" text_align="center" />
|
||||
|
||||
<spacer height="20" />
|
||||
|
||||
<box proportion="4" width="100%" layout="vertical-row">
|
||||
<ribbon_grid id="gplist" proportion="1" width="100%" square_items="true"
|
||||
label_location="each" align="left" max_rows="2" child_width="160"
|
||||
child_height="120" keep_selection="true" />
|
||||
</box>
|
||||
|
||||
<spacer height="10" />
|
||||
|
||||
<box proportion="2" width="100%" layout="vertical-row">
|
||||
<label id="gpname" text_align="center" width="100%"
|
||||
I18N="In the grand prix editor screen" text="" />
|
||||
<ribbon_grid id="tracks" proportion="1" width="100%" square_items="true"
|
||||
label_location="each" align="left" max_rows="1"
|
||||
child_width="160" child_height="120" />
|
||||
</box>
|
||||
|
||||
<spacer height="20" />
|
||||
|
||||
<buttonbar proportion="1" id="menu" height="135" width="100%" align="center">
|
||||
<icon-button id="new" width="128" height="128" icon="gui/gp_new.png"
|
||||
I18N="Menu item" text="New" />
|
||||
<icon-button id="copy" width="128" height="128" icon="gui/gp_copy.png"
|
||||
I18N="Menu item" text="Copy" />
|
||||
<icon-button id="edit" width="128" height="128" icon="gui/gp_edit.png"
|
||||
I18N="Menu item" text="Edit" />
|
||||
<icon-button id="remove" width="128" height="128" icon="gui/gp_remove.png"
|
||||
I18N="Menu item" text="Remove" />
|
||||
<icon-button id="rename" width="128" height="128" icon="gui/gp_rename.png"
|
||||
I18N="Menu item" text="Rename" />
|
||||
</buttonbar>
|
||||
|
||||
</div>
|
||||
|
||||
</stkgui>
|
||||
@@ -1,9 +1,9 @@
|
||||
<stkgui>
|
||||
|
||||
|
||||
<div x="0" y="0" width="100%" height="100%" layout="vertical-row" >
|
||||
|
||||
<icon id="logo" align="center" proportion="5" width="100%" icon="gui/logo.png"/>
|
||||
|
||||
|
||||
<buttonbar id="menu_toprow" proportion="3" width="90%" align="center">
|
||||
<icon-button id="story" width="128" height="128"
|
||||
icon="gui/menu_story.png" focus_icon="gui/menu_story_focus.png"
|
||||
@@ -21,35 +21,37 @@
|
||||
icon="gui/menu_addons.png" focus_icon="gui/menu_addons_focus.png"
|
||||
I18N="Main menu button" text="Addons"/>
|
||||
</buttonbar>
|
||||
|
||||
|
||||
<spacer width="10" height="7%"/>
|
||||
|
||||
|
||||
<bottombar width="100%" height="10%" layout="horizontal-row">
|
||||
|
||||
<spacer width="10" height="10" />
|
||||
|
||||
|
||||
<label proportion="3" height="100%" id="info_addons"
|
||||
I18N="In the main screen"
|
||||
text=""
|
||||
align="center" text_align="left" />
|
||||
|
||||
|
||||
<spacer width="10" height="10" />
|
||||
|
||||
<buttonbar id="menu_bottomrow" x="0" y="0" width="30%" height="100%" align="center">
|
||||
|
||||
<buttonbar id="menu_bottomrow" x="0" y="0" width="38%" height="100%" align="center">
|
||||
<icon-button id="options" width="64" height="64" icon="gui/main_options.png" extend_label="50"
|
||||
I18N="Main menu button" text="Options" label_location="hover"/>
|
||||
<icon-button id="help" width="64" height="64" icon="gui/main_help.png" extend_label="50"
|
||||
I18N="Main menu button" text="Help" label_location="hover"/>
|
||||
<icon-button id="startTutorial" width="64" height="64" icon="gui/tutorial.png" extend_label="150"
|
||||
I18N="Main menu button" text="Tutorial" label_location="hover"/>
|
||||
<icon-button id="gpEditor" width="64" height="64" icon="gui/gpeditor.png" extend_label="150"
|
||||
I18N="Main menu button" text="Grand Prix Editor" label_location="hover"/>
|
||||
<icon-button id="about" width="64" height="64" icon="gui/main_about.png" extend_label="50"
|
||||
I18N="Main menu button" text="About" label_location="hover"/>
|
||||
<icon-button id="quit" width="64" height="64" icon="gui/main_quit.png" extend_label="50"
|
||||
I18N="Main menu button" text="Quit" label_location="hover"/>
|
||||
</buttonbar>
|
||||
|
||||
|
||||
</bottombar>
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
</stkgui>
|
||||
|
||||
BIN
data/gui/scroll_down.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
data/gui/scroll_up.png
Normal file
|
After Width: | Height: | Size: 1.8 KiB |
BIN
data/gui/up.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
@@ -11,5 +11,6 @@ varying vec2 uv;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
FragColor = texture(tex, uv);
|
||||
vec4 color = texture(tex, uv);
|
||||
FragColor = vec4(color.rgb * color.a, color.a);
|
||||
}
|
||||
|
||||
@@ -9,12 +9,12 @@ varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getCIEYxy(vec3 rgbColor);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 weights = vec3(0.2126, 0.7152, 0.0722); // ITU-R BT. 709
|
||||
vec3 col = texture(tex, uv).xyz;
|
||||
float luma = dot(weights, col);
|
||||
float luma = getCIEYxy(col).x;
|
||||
|
||||
col *= smoothstep(1., 2., luma);
|
||||
|
||||
|
||||
@@ -29,6 +29,7 @@ varying vec2 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = texture(tex, uv);
|
||||
FragColor.a *= transparency;
|
||||
vec4 Color = texture(tex, uv);
|
||||
Color.a *= transparency;
|
||||
FragColor = vec4(Color.rgb * Color.a, Color.a);
|
||||
}
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
uniform sampler2D Albedo;
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
uniform sampler2D caustictex;
|
||||
uniform vec2 dir;
|
||||
uniform vec2 dir2;
|
||||
@@ -16,17 +11,14 @@ varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main()
|
||||
{
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
vec4 color = texture(Albedo, uv);
|
||||
float ao = texture(SSAO, tc).x;
|
||||
|
||||
float caustic = texture(caustictex, uv + dir).x;
|
||||
float caustic2 = texture(caustictex, (uv.yx + dir2 * vec2(-0.6, 0.3)) * vec2(0.6)).x;
|
||||
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent + caustic * caustic2 * 10;
|
||||
vec3 LightFactor = getLightFactor(1.) + caustic * caustic2 * 10;
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
//#define DOF_ENABLED
|
||||
|
||||
#ifdef DOF_ENABLED
|
||||
|
||||
uniform sampler2D tex;
|
||||
uniform sampler2D dtex;
|
||||
uniform vec3 inlevel;
|
||||
@@ -12,23 +16,244 @@ varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
#define PI 3.14159265
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------- */
|
||||
// TEST
|
||||
/* ---------------------------------------------------------------------------------------------- */
|
||||
|
||||
float width = 1920; //texture width
|
||||
float height = 1080; //texture height
|
||||
|
||||
vec2 texel = vec2(1.0/width,1.0/height);
|
||||
|
||||
//------------------------------------------
|
||||
//user variables
|
||||
|
||||
int samples = 3; //samples on the first ring
|
||||
int rings = 5; //ring count
|
||||
|
||||
bool autofocus = false; //use autofocus in shader? disable if you use external focalDepth value
|
||||
float focalDepth = 0.1;
|
||||
vec2 focus = vec2(0.5,0.5); // autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)
|
||||
float range = 150.0; //focal range
|
||||
float maxblur = 1.25; //clamp value of max blur
|
||||
|
||||
float threshold = 0.9; //highlight threshold;
|
||||
float gain = 10.0; //highlight gain;
|
||||
|
||||
float bias = 0.4; //bokeh edge bias
|
||||
float fringe = 0.5; //bokeh chromatic aberration/fringing
|
||||
|
||||
bool noise = true; //use noise instead of pattern for sample dithering
|
||||
float namount = 0.0001; //dither amount
|
||||
|
||||
bool depthblur = false; //blur the depth buffer?
|
||||
float dbsize = 2.0; //depthblursize
|
||||
|
||||
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------- */
|
||||
// Function
|
||||
/* ---------------------------------------------------------------------------------------------- */
|
||||
|
||||
vec3 color(vec2 coords,float blur) //processing the sample
|
||||
{
|
||||
vec3 col = vec3(0.0);
|
||||
|
||||
col.r = texture2D(tex,coords + vec2(0.0,1.0)*texel*fringe*blur).r;
|
||||
col.g = texture2D(tex,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;
|
||||
col.b = texture2D(tex,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;
|
||||
|
||||
vec3 lumcoeff = vec3(0.299,0.587,0.114);
|
||||
float lum = dot(col.rgb, lumcoeff);
|
||||
float thresh = max((lum-threshold)*gain, 0.0);
|
||||
return col+mix(vec3(0.0),col,thresh*blur);
|
||||
}
|
||||
|
||||
vec2 rand(in vec2 coord) //generating noise/pattern texture for dithering
|
||||
{
|
||||
float noiseX = ((fract(1.0-coord.s*(width/2.0))*0.25)+(fract(coord.t*(height/2.0))*0.75))*2.0-1.0;
|
||||
float noiseY = ((fract(1.0-coord.s*(width/2.0))*0.75)+(fract(coord.t*(height/2.0))*0.25))*2.0-1.0;
|
||||
|
||||
if (noise)
|
||||
{
|
||||
noiseX = clamp(fract(sin(dot(coord ,vec2(12.9898,78.233))) * 43758.5453),0.0,1.0)*2.0-1.0;
|
||||
noiseY = clamp(fract(sin(dot(coord ,vec2(12.9898,78.233)*2.0)) * 43758.5453),0.0,1.0)*2.0-1.0;
|
||||
}
|
||||
return vec2(noiseX,noiseY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
|
||||
//float depth = texture2D(dtex,uv).x;
|
||||
|
||||
float curdepth = texture(dtex, uv).x;
|
||||
vec4 FragPos = invprojm * (2.0f * vec4(uv, curdepth, 1.0f) - 1.0f);
|
||||
FragPos /= FragPos.w;
|
||||
|
||||
float depth = clamp((FragPos.z/180), 0., 1.);
|
||||
|
||||
|
||||
float blur = 0.0;
|
||||
|
||||
|
||||
blur = clamp((abs(depth - focalDepth)/range)*100.0,-maxblur,maxblur);
|
||||
|
||||
vec2 noise = rand(uv)*namount*blur;
|
||||
|
||||
float w = (1.0/width)*blur+noise.x;
|
||||
float h = (1.0/height)*blur+noise.y;
|
||||
|
||||
vec3 col = texture2D(tex, uv).rgb;
|
||||
vec3 colDof = col;
|
||||
float s = 1.0;
|
||||
|
||||
int ringsamples;
|
||||
|
||||
for (int i = 1; i <= rings; i += 1)
|
||||
{
|
||||
ringsamples = i * samples;
|
||||
|
||||
for (int j = 0 ; j < ringsamples ; j += 1)
|
||||
{
|
||||
float step = PI*2.0 / float(ringsamples);
|
||||
float pw = (cos(float(j)*step)*float(i));
|
||||
float ph = (sin(float(j)*step)*float(i));
|
||||
float p = 1.0;
|
||||
|
||||
colDof += color(uv + vec2(pw*w,ph*h),blur)*mix(1.0,(float(i))/(float(rings)),bias)*p;
|
||||
s += 1.0*mix(1.0,(float(i))/(float(rings)),bias)*p;
|
||||
}
|
||||
}
|
||||
colDof /= s;
|
||||
|
||||
// get color correction values
|
||||
float inBlack = inlevel.x;
|
||||
float inWhite = inlevel.z;
|
||||
float inGamma = inlevel.y;
|
||||
|
||||
float outBlack = outlevel.x;
|
||||
float outWhite = outlevel.y;
|
||||
|
||||
vec3 colOut = (pow(((col.rgb * 255.0) - inBlack) / (inWhite - inBlack),
|
||||
vec3(1.0 / inGamma)) * (outWhite - outBlack) + outBlack) / 255.0;
|
||||
|
||||
depth = (1 - depth);
|
||||
vec3 final = colOut * depth + colDof.rgb * (1 - depth);
|
||||
|
||||
vec2 inTex = uv - 0.5;
|
||||
float vignette = 1 - dot(inTex, inTex);
|
||||
|
||||
vignette = clamp(pow(vignette, 0.8), 0., 1.) ;
|
||||
vignette = vignette + vignette - 0.5;
|
||||
final.rgb *= clamp(vignette, 0., 1.15);
|
||||
|
||||
FragColor.rgb = final;
|
||||
FragColor.a = 1.0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
void main()
|
||||
{
|
||||
vec2 texc = uv;
|
||||
//texc.y = 1.0 - texc.y;
|
||||
|
||||
|
||||
vec4 col = texture(tex, texc);
|
||||
float curdepth = texture(dtex, uv).x;
|
||||
|
||||
vec2 inTex = uv - 0.5;
|
||||
float vignette = 1 - dot(inTex, inTex);
|
||||
|
||||
vec4 FragPos = invprojm * (2.0f * vec4(uv, curdepth, 1.0f) - 1.0f);
|
||||
FragPos /= FragPos.w;
|
||||
|
||||
//col = col / (1 - col);
|
||||
|
||||
float inBlack = inlevel.x;
|
||||
float inWhite = inlevel.z;
|
||||
float inGamma = inlevel.y;
|
||||
|
||||
float outBlack = outlevel.x;
|
||||
float outWhite = outlevel.y;
|
||||
|
||||
float depth1 = clamp((FragPos.z/180), 0., 1.);
|
||||
|
||||
vec3 colOut = (pow(((col.rgb * 255.0) - inBlack) / (inWhite - inBlack),
|
||||
vec3(1.0 / inGamma)) * (outWhite - outBlack) + outBlack) / 255.0;
|
||||
|
||||
depth1 = (1 - depth1);
|
||||
vec3 final = colOut * depth1 + col.rgb * (1 - depth1);
|
||||
|
||||
vignette = clamp(pow(vignette, 0.8), 0., 1.) ;
|
||||
vignette = vignette + vignette - 0.5;
|
||||
final.rgb *= clamp(vignette, 0., 1.15);
|
||||
FragColor = vec4(final, 1.0);
|
||||
|
||||
|
||||
}*/
|
||||
|
||||
#else
|
||||
|
||||
|
||||
//#define AUTO_EXPOSURE
|
||||
|
||||
uniform sampler2D tex;
|
||||
uniform sampler2D dtex;
|
||||
uniform vec3 inlevel;
|
||||
uniform vec2 outlevel;
|
||||
uniform mat4 invprojm;
|
||||
uniform sampler2D logluminancetex;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
#else
|
||||
varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getCIEYxy(vec3 rgbColor);
|
||||
vec3 getRGBFromCIEXxy(vec3 YxyColor);
|
||||
|
||||
float exposure = .1;
|
||||
float whitePoint = 2.5;
|
||||
float delta = 0.0001;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 col = texture(tex, uv);
|
||||
#ifdef AUTO_EXPOSURE
|
||||
float avgLuminance = textureLod(logluminancetex, uv, 10.).x;
|
||||
avgLuminance = exp(avgLuminance) - delta;
|
||||
|
||||
vec3 Yxy = getCIEYxy(col.xyz);
|
||||
float a = max(0, 1.5 - 1.5 / (avgLuminance * .1 + 1)) + .1;
|
||||
float Lp = Yxy.r * a / avgLuminance;
|
||||
Yxy.r = (Lp * (1. * Lp / (whitePoint * whitePoint))) / (1. + Lp);
|
||||
col.xyz = getRGBFromCIEXxy(Yxy);
|
||||
#endif
|
||||
|
||||
float curdepth = texture(dtex, uv).x;
|
||||
vec4 FragPos = invprojm * (2.0 * vec4(uv, curdepth, 1.0f) - 1.0f);
|
||||
FragPos /= FragPos.w;
|
||||
float depth = clamp(FragPos.z / 180, 0, 1);
|
||||
float depth = clamp(FragPos.z / 180, 0., 1.);
|
||||
depth = (1 - depth);
|
||||
|
||||
// Compute the vignette
|
||||
vec2 inside = uv - 0.5;
|
||||
float vignette = 1 - dot(inside, inside);
|
||||
vignette = clamp(pow(vignette, 0.8), 0, 1);
|
||||
vignette = clamp(vignette + vignette - 0.5, 0, 1.15);
|
||||
vignette = clamp(pow(vignette, 0.8), 0., 1.);
|
||||
vignette = clamp(vignette + vignette - 0.5, 0., 1.15);
|
||||
|
||||
float inBlack = inlevel.x;
|
||||
float inWhite = inlevel.z;
|
||||
@@ -45,3 +270,4 @@ void main()
|
||||
FragColor = vec4(colFinal * vignette, 1.0);
|
||||
//FragColor = vec4(vec3(depth), 1.0);
|
||||
}
|
||||
#endif
|
||||
@@ -1,10 +1,5 @@
|
||||
uniform sampler2D Albedo;
|
||||
uniform sampler2D Detail;
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
@@ -16,17 +11,13 @@ varying vec2 uv_bis;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec4 color = texture(Albedo, uv);
|
||||
vec4 detail = texture(Detail, uv_bis);
|
||||
color *= detail;
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
float ao = texture(SSAO, tc).x;
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent * (1. - color.a);
|
||||
FragColor = vec4(color.xyz * LightFactor * ao, 1.);
|
||||
vec4 detail = texture(Detail, uv_bis);
|
||||
color *= detail;
|
||||
vec3 LightFactor = getLightFactor(1. - color.a);
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
|
||||
@@ -14,12 +14,7 @@ varying vec2 uv;
|
||||
#define Spec gl_FragData[1]
|
||||
#endif
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
vec3 DecodeNormal(vec2 n);
|
||||
|
||||
mat4 getMatrix(float L[9])
|
||||
{
|
||||
@@ -47,6 +42,6 @@ void main(void)
|
||||
float g = dot(extendednormal, gmat * extendednormal);
|
||||
float b = dot(extendednormal, bmat * extendednormal);
|
||||
|
||||
Diff = 0.25 * vec4(r, g, b, .1);
|
||||
Diff = max(0.25 * vec4(r, g, b, .1), vec4(0.));
|
||||
Spec = vec4(0.);
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ in float anglespeed;
|
||||
|
||||
out float lf;
|
||||
out vec2 tc;
|
||||
out vec3 pc;
|
||||
|
||||
void main(void)
|
||||
{
|
||||
@@ -57,4 +58,5 @@ void main(void)
|
||||
|
||||
vec4 viewpos = ViewMatrix * vec4(newposition + newquadcorner, 1.0);
|
||||
gl_Position = ProjectionMatrix * viewpos;
|
||||
pc = vec3(1.);
|
||||
}
|
||||
|
||||
34
data/shaders/grass_pass2.frag
Normal file
@@ -0,0 +1,34 @@
|
||||
uniform sampler2D Albedo;
|
||||
uniform vec3 SunDir;
|
||||
uniform mat4 invproj;
|
||||
uniform sampler2D dtex;
|
||||
uniform vec2 screen;
|
||||
|
||||
in vec3 nor;
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec2 texc = gl_FragCoord.xy / screen;
|
||||
float z = texture(dtex, texc).x;
|
||||
|
||||
vec4 xpos = 2.0 * vec4(texc, z, 1.0) - 1.0f;
|
||||
xpos = invproj * xpos;
|
||||
xpos /= xpos.w;
|
||||
vec3 eyedir = normalize(xpos.xyz);
|
||||
|
||||
// Inspired from http://http.developer.nvidia.com/GPUGems3/gpugems3_ch16.html
|
||||
float fEdotL = max(0., dot(SunDir, eyedir));
|
||||
float fPowEdotL = pow(fEdotL, 4.);
|
||||
|
||||
float fLdotNBack = max(0., - dot(nor, SunDir) * 0.6 + 0.4);
|
||||
float scattering = mix(fPowEdotL, fLdotNBack, .5);
|
||||
|
||||
vec4 color = texture(Albedo, uv);
|
||||
if (color.a < 0.5) discard;
|
||||
vec3 LightFactor = scattering + getLightFactor(1.);
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
@@ -1,20 +0,0 @@
|
||||
uniform vec3 windDir;
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
in vec4 Color;
|
||||
out vec2 uv;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec2 Texcoord;
|
||||
attribute vec4 Color;
|
||||
varying vec2 uv;
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
uv = Texcoord;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position + windDir * Color.r, 1.);
|
||||
}
|
||||
35
data/shaders/instanced_grass.vert
Normal file
@@ -0,0 +1,35 @@
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
uniform vec3 windDir;
|
||||
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
in vec4 Color;
|
||||
|
||||
out vec3 nor;
|
||||
out vec2 uv;
|
||||
|
||||
mat4 getWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
mat4 getInverseWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
|
||||
void main()
|
||||
{
|
||||
mat4 ModelMatrix = getWorldMatrix(Origin + windDir * Color.r, Orientation, Scale);
|
||||
mat4 TransposeInverseModelView = transpose(getInverseWorldMatrix(Origin + windDir * Color.r, Orientation, Scale) * InverseViewMatrix);
|
||||
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
uv = Texcoord;
|
||||
}
|
||||
31
data/shaders/instanced_object_pass.vert
Normal file
@@ -0,0 +1,31 @@
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
|
||||
out vec3 nor;
|
||||
out vec2 uv;
|
||||
|
||||
mat4 getWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
mat4 getInverseWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
mat4 ModelMatrix = getWorldMatrix(Origin, Orientation, Scale);
|
||||
mat4 TransposeInverseModelView = transpose(getInverseWorldMatrix(Origin, Orientation, Scale) * InverseViewMatrix);
|
||||
gl_Position = ProjectionMatrix * ViewMatrix * ModelMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
uv = Texcoord;
|
||||
}
|
||||
18
data/shaders/instanciedshadow.vert
Normal file
@@ -0,0 +1,18 @@
|
||||
in vec3 Origin;
|
||||
in vec3 Orientation;
|
||||
in vec3 Scale;
|
||||
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
|
||||
out vec2 tc;
|
||||
|
||||
mat4 getWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
mat4 getInverseWorldMatrix(vec3 translation, vec3 rotation, vec3 scale);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
mat4 ModelMatrix = getWorldMatrix(Origin, Orientation, Scale);
|
||||
gl_Position = ModelMatrix * vec4(Position, 1.);
|
||||
tc = Texcoord;
|
||||
}
|
||||
14
data/shaders/logluminance.frag
Normal file
@@ -0,0 +1,14 @@
|
||||
uniform sampler2D tex;
|
||||
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
|
||||
float delta = 0.0001;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec3 weight = vec3(0.2125f, 0.7154f, 0.0721f);
|
||||
vec3 col = texture(tex, uv).xyz;
|
||||
float luma = dot(col, weight);
|
||||
FragColor = vec4(log(luma + delta));
|
||||
}
|
||||
@@ -1,14 +1,13 @@
|
||||
#version 330 compatibility
|
||||
#define MAX_SEARCH_STEPS 8.0
|
||||
#define MAX_DISTANCE 33.0
|
||||
|
||||
#extension GL_ARB_shader_texture_lod: enable
|
||||
|
||||
uniform sampler2D edgesMap;
|
||||
uniform sampler2D areaMap;
|
||||
|
||||
uniform vec2 PIXEL_SIZE;
|
||||
|
||||
#define MAX_SEARCH_STEPS 8.0
|
||||
#define MAX_DISTANCE 33.0
|
||||
|
||||
in vec2 uv;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
/**
|
||||
@@ -17,7 +16,7 @@ out vec4 FragColor;
|
||||
* bit.
|
||||
*/
|
||||
vec4 tex2Doffset(sampler2D map, vec2 texcoord, vec2 offset) {
|
||||
return texture2DLod(map, texcoord + PIXEL_SIZE * offset, 0.0);
|
||||
return textureLod(map, texcoord + PIXEL_SIZE * offset, 0.0);
|
||||
}
|
||||
|
||||
float SearchXLeft(vec2 texcoord) {
|
||||
@@ -73,24 +72,24 @@ vec2 Area(vec2 distance, float e1, float e2) {
|
||||
float areaSize = MAX_DISTANCE * 5.0;
|
||||
vec2 pixcoord = MAX_DISTANCE * round(4.0 * vec2(e1, e2)) + distance;
|
||||
vec2 texcoord = pixcoord / (areaSize - 1.0);
|
||||
return texture2DLod(areaMap, texcoord, 0.0).ra;
|
||||
return textureLod(areaMap, texcoord, 0.0).ra;
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 areas = vec4(0.0);
|
||||
|
||||
vec2 e = texture(edgesMap, gl_TexCoord[0].xy).rg;
|
||||
vec2 e = texture(edgesMap, uv).rg;
|
||||
|
||||
if (e.g != 0.0) { // Edge at north
|
||||
|
||||
// Search distances to the left and to the right:
|
||||
vec2 d = vec2(SearchXLeft(gl_TexCoord[0].xy), SearchXRight(gl_TexCoord[0].xy));
|
||||
vec2 d = vec2(SearchXLeft(uv), SearchXRight(uv));
|
||||
|
||||
// Now fetch the crossing edges. Instead of sampling between edgels, we
|
||||
// sample at 0.25, to be able to discern what value has each edgel:
|
||||
vec4 coords = vec4(d.x, 0.25, d.y + 1.0, 0.25) * PIXEL_SIZE.xyxy + gl_TexCoord[0].xyxy;
|
||||
float e1 = texture2DLod(edgesMap, coords.xy, 0.0).r;
|
||||
float e2 = texture2DLod(edgesMap, coords.zw, 0.0).r;
|
||||
vec4 coords = vec4(d.x, 0.25, d.y + 1.0, 0.25) * PIXEL_SIZE.xyxy + uv.xyxy;
|
||||
float e1 = textureLod(edgesMap, coords.xy, 0.0).r;
|
||||
float e2 = textureLod(edgesMap, coords.zw, 0.0).r;
|
||||
|
||||
// Ok, we know how this pattern looks like, now it is time for getting
|
||||
// the actual area:
|
||||
@@ -100,12 +99,12 @@ void main() {
|
||||
if (e.r != 0.0) { // Edge at west
|
||||
|
||||
// Search distances to the top and to the bottom:
|
||||
vec2 d = vec2(SearchYUp(gl_TexCoord[0].xy), SearchYDown(gl_TexCoord[0].xy));
|
||||
vec2 d = vec2(SearchYUp(uv), SearchYDown(uv));
|
||||
|
||||
// Now fetch the crossing edges (yet again):
|
||||
vec4 coords = vec4(-0.25, d.x, -0.25, d.y - 1.0) * PIXEL_SIZE.xyxy + gl_TexCoord[0].xyxy;
|
||||
float e1 = texture2DLod(edgesMap, coords.xy, 0.0).g;
|
||||
float e2 = texture2DLod(edgesMap, coords.zw, 0.0).g;
|
||||
vec4 coords = vec4(-0.25, d.x, -0.25, d.y - 1.0) * PIXEL_SIZE.xyxy + uv.xyxy;
|
||||
float e1 = textureLod(edgesMap, coords.xy, 0.0).g;
|
||||
float e2 = textureLod(edgesMap, coords.zw, 0.0).g;
|
||||
|
||||
// Get the area for this direction:
|
||||
areas.ba = Area(abs(d), e1, e2);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
#version 330 compatibility
|
||||
uniform sampler2D colorMapG;
|
||||
|
||||
in vec4 offset[2];
|
||||
in vec2 uv;
|
||||
|
||||
uniform sampler2D colorMapG;
|
||||
const float threshold = 0.1;
|
||||
|
||||
out vec4 FragColor;
|
||||
@@ -13,11 +13,11 @@ void main() {
|
||||
/**
|
||||
* Luma calculation requires gamma-corrected colors:
|
||||
*/
|
||||
float L = dot(texture(colorMapG, uv).rgb, weights);
|
||||
float Lleft = dot(texture(colorMapG, offset[0].xy).rgb, weights);
|
||||
float Ltop = dot(texture(colorMapG, offset[0].zw).rgb, weights);
|
||||
float Lright = dot(texture(colorMapG, offset[1].xy).rgb, weights);
|
||||
float Lbottom = dot(texture(colorMapG, offset[1].zw).rgb, weights);
|
||||
float L = dot(pow(texture(colorMapG, uv).rgb, vec3(1./2.2)), weights);
|
||||
float Lleft = dot(pow(texture(colorMapG, offset[0].xy).rgb, vec3(1./2.2)), weights);
|
||||
float Ltop = dot(pow(texture(colorMapG, offset[0].zw).rgb, vec3(1./2.2)), weights);
|
||||
float Lright = dot(pow(texture(colorMapG, offset[1].xy).rgb, vec3(1./2.2)), weights);
|
||||
float Lbottom = dot(pow(texture(colorMapG, offset[1].zw).rgb, vec3(1./2.2)), weights);
|
||||
|
||||
vec4 delta = abs(vec4(L) - vec4(Lleft, Ltop, Lright, Lbottom));
|
||||
vec4 edges = step(vec4(threshold), delta);
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
#version 330 compatibility
|
||||
in vec4 offset[2];
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
|
||||
uniform sampler2D blendMap;
|
||||
uniform sampler2D colorMap;
|
||||
|
||||
in vec4 offset[2];
|
||||
in vec2 uv;
|
||||
|
||||
out vec4 FragColor;
|
||||
|
||||
void main() {
|
||||
// Fetch the blending weights for current pixel:
|
||||
vec4 topLeft = texture(blendMap, uv);
|
||||
@@ -26,16 +26,16 @@ void main() {
|
||||
vec4 color = vec4(0.0);
|
||||
|
||||
// Add the contributions of the possible 4 lines that can cross this pixel:
|
||||
vec4 C = texture(colorMap, uv);
|
||||
vec4 Cleft = texture(colorMap, offset[0].xy);
|
||||
vec4 Ctop = texture(colorMap, offset[0].zw);
|
||||
vec4 Cright = texture(colorMap, offset[1].xy);
|
||||
vec4 Cbottom = texture(colorMap, offset[1].zw);
|
||||
vec4 C = pow(texture(colorMap, uv), vec4(1./2.2));
|
||||
vec4 Cleft = pow(texture(colorMap, offset[0].xy), vec4(1./2.2));
|
||||
vec4 Ctop = pow(texture(colorMap, offset[0].zw), vec4(1./2.2));
|
||||
vec4 Cright = pow(texture(colorMap, offset[1].xy), vec4(1./2.2));
|
||||
vec4 Cbottom = pow(texture(colorMap, offset[1].zw), vec4(1./2.2));
|
||||
color = mix(C, Ctop, a.r) * w.r + color;
|
||||
color = mix(C, Cbottom, a.g) * w.g + color;
|
||||
color = mix(C, Cleft, a.b) * w.b + color;
|
||||
color = mix(C, Cright, a.a) * w.a + color;
|
||||
|
||||
// Normalize the resulting color and we are finished!
|
||||
FragColor = color / sum;
|
||||
FragColor = vec4(pow(color / sum, vec4(2.2)));
|
||||
}
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
#version 330 compatibility
|
||||
uniform vec2 PIXEL_SIZE;
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
|
||||
in vec2 Position;
|
||||
in vec2 Texcoord;
|
||||
|
||||
out vec4 offset[2];
|
||||
out vec2 uv;
|
||||
|
||||
void main() {
|
||||
gl_Position = ModelViewProjectionMatrix * gl_Vertex;
|
||||
vec4 invy = gl_MultiTexCoord0;
|
||||
gl_Position = vec4(Position, 0., 1.);
|
||||
vec4 invy = vec4(Texcoord, Texcoord);
|
||||
// invy.y = 1.0 - invy.y;
|
||||
uv = invy.st;
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ uniform sampler2D normalMap;
|
||||
in vec3 tangent;
|
||||
in vec3 bitangent;
|
||||
in vec2 uv;
|
||||
out vec2 EncodedNormal;
|
||||
out vec3 EncodedNormal;
|
||||
#else
|
||||
varying vec3 tangent;
|
||||
varying vec3 bitangent;
|
||||
@@ -13,21 +13,19 @@ varying vec2 uv;
|
||||
#endif
|
||||
|
||||
|
||||
// from Crytek "a bit more deferred CryEngine"
|
||||
vec2 EncodeNormal(vec3 n)
|
||||
{
|
||||
return normalize(n.xy) * sqrt(n.z * 0.5 + 0.5);
|
||||
}
|
||||
|
||||
vec2 EncodeNormal(vec3 n);
|
||||
|
||||
void main()
|
||||
{
|
||||
// normal in Tangent Space
|
||||
vec3 TS_normal = 2.0 * texture (normalMap, uv).rgb - 1.0;
|
||||
vec3 TS_normal = 2.0 * pow(texture(normalMap, uv).rgb, vec3(1./2.2)) - 1.0;
|
||||
// Because of interpolation, we need to renormalize
|
||||
vec3 Frag_tangent = normalize(tangent);
|
||||
vec3 Frag_normal = normalize(cross(Frag_tangent, bitangent));
|
||||
vec3 Frag_bitangent = cross(Frag_normal, Frag_tangent);
|
||||
|
||||
vec3 FragmentNormal = TS_normal.x * Frag_tangent + TS_normal.y * Frag_bitangent - TS_normal.z * Frag_normal;
|
||||
EncodedNormal = 0.5 * EncodeNormal(normalize(FragmentNormal)) + 0.5;
|
||||
vec3 FragmentNormal = TS_normal.x * Frag_tangent + TS_normal.y * Frag_bitangent - TS_normal.z * Frag_normal;
|
||||
EncodedNormal.xy = 0.5 * EncodeNormal(normalize(FragmentNormal)) + 0.5;
|
||||
EncodedNormal.z = 1.;
|
||||
}
|
||||
|
||||
@@ -1,6 +1,14 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
uniform mat4 ModelMatrix;
|
||||
uniform mat4 InverseModelMatrix;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
@@ -23,6 +31,8 @@ varying vec2 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
mat4 ModelViewProjectionMatrix = ProjectionMatrix * ViewMatrix * ModelMatrix;
|
||||
mat4 TransposeInverseModelView = transpose(InverseModelMatrix * InverseViewMatrix);
|
||||
uv = Texcoord;
|
||||
tangent = (TransposeInverseModelView * vec4(Tangent, 1.)).xyz;
|
||||
bitangent = (TransposeInverseModelView * vec4(Bitangent, 1.)).xyz;
|
||||
|
||||
49
data/shaders/object_pass.vert
Normal file
@@ -0,0 +1,49 @@
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
uniform mat4 ModelMatrix;
|
||||
uniform mat4 InverseModelMatrix;
|
||||
|
||||
uniform mat4 TextureMatrix =
|
||||
mat4(1., 0., 0., 0.,
|
||||
0., 1., 0., 0.,
|
||||
0., 0., 1., 0.,
|
||||
0., 0., 0., 1.);
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
in vec2 SecondTexcoord;
|
||||
in vec3 Normal;
|
||||
in vec4 Color;
|
||||
out vec3 nor;
|
||||
out vec2 uv;
|
||||
out vec2 uv_bis;
|
||||
out vec4 color;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec3 Normal;
|
||||
attribute vec2 Texcoord;
|
||||
attribute vec2 SecondTexcoord;
|
||||
varying vec3 nor;
|
||||
varying vec2 uv;
|
||||
varying vec2 uv_bis;
|
||||
#endif
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
color = Color.zyxw;
|
||||
mat4 ModelViewProjectionMatrix = ProjectionMatrix * ViewMatrix * ModelMatrix;
|
||||
mat4 TransposeInverseModelView = transpose(InverseModelMatrix * InverseViewMatrix);
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
uv = (TextureMatrix * vec4(Texcoord, 1., 1.)).xy;
|
||||
uv_bis = SecondTexcoord;
|
||||
}
|
||||
@@ -1,20 +1,19 @@
|
||||
uniform sampler2D tex;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 nor;
|
||||
out vec2 EncodedNormal;
|
||||
in vec2 uv;
|
||||
out vec3 EncodedNormal;
|
||||
#else
|
||||
varying vec3 nor;
|
||||
#define EncodedNormal gl_FragColor.xy
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
// from Crytek "a bit more deferred CryEngine"
|
||||
vec2 EncodeNormal(vec3 n)
|
||||
{
|
||||
return normalize(n.xy) * sqrt(n.z * 0.5 + 0.5);
|
||||
}
|
||||
vec2 EncodeNormal(vec3 n);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
EncodedNormal = 0.5 * EncodeNormal(normalize(nor)) + 0.5;
|
||||
vec4 col = texture(tex, uv);
|
||||
EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5;
|
||||
EncodedNormal.z = exp2(10. * (1. - col.a) + 1.);
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
out vec3 nor;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec3 Normal;
|
||||
varying vec3 nor;
|
||||
#endif
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
}
|
||||
@@ -1,9 +1,4 @@
|
||||
uniform sampler2D Albedo;
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
@@ -13,15 +8,11 @@ varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec4 color = texture(Albedo, uv);
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
float ao = texture(SSAO, tc).x;
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent * (1. - color.a);
|
||||
FragColor = vec4(color.xyz * LightFactor * (0.4 + ao*0.6), 1.);
|
||||
//FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
vec3 LightFactor = getLightFactor(1.);
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TextureMatrix =
|
||||
mat4(1., 0., 0., 0.,
|
||||
0., 1., 0., 0.,
|
||||
0., 0., 1., 0.,
|
||||
0., 0., 0., 1.);
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
in vec2 SecondTexcoord;
|
||||
out vec2 uv;
|
||||
out vec2 uv_bis;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec2 Texcoord;
|
||||
attribute vec2 SecondTexcoord;
|
||||
varying vec2 uv;
|
||||
varying vec2 uv_bis;
|
||||
#endif
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
uv = (TextureMatrix * vec4(Texcoord, 1., 1.)).xy;
|
||||
uv_bis = SecondTexcoord;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
}
|
||||
@@ -6,17 +6,17 @@ uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 normal;
|
||||
in vec3 nor;
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
#else
|
||||
varying vec3 normal;
|
||||
varying vec3 nor;
|
||||
varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
float rim = 1.0 - dot(normal, vec3(0., 0., -1));
|
||||
float rim = 1.0 - dot(nor, vec3(0., 0., -1));
|
||||
rim = smoothstep(0.5, 1.5, rim) * 0.35;
|
||||
|
||||
vec4 color = texture(Albedo, uv);
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
uniform mat4 TextureMatrix;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
in vec4 Color;
|
||||
out vec2 uv;
|
||||
out vec3 normal;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec3 Normal;
|
||||
attribute vec2 Texcoord;
|
||||
attribute vec4 Color;
|
||||
varying vec2 uv;
|
||||
varying vec3 normal;
|
||||
#endif
|
||||
|
||||
void main() {
|
||||
normal = (TransposeInverseModelView * vec4(Normal, 0)).xyz;
|
||||
uv = (TextureMatrix * vec4(Texcoord, 1., 1.)).xy;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
}
|
||||
@@ -1,7 +1,14 @@
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
uniform samplerCube tex;
|
||||
uniform mat4 invproj;
|
||||
uniform vec2 screen;
|
||||
uniform mat4 TransposeViewMatrix;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 nor;
|
||||
@@ -15,12 +22,12 @@ varying vec3 nor;
|
||||
void main() {
|
||||
vec3 fpos = gl_FragCoord.xyz / vec3(screen, 1.);
|
||||
vec4 xpos = 2.0 * vec4(fpos, 1.0) - 1.0;
|
||||
xpos = invproj * xpos;
|
||||
xpos = InverseProjectionMatrix * xpos;
|
||||
|
||||
xpos.xyz /= xpos.w;
|
||||
vec3 viewSampleDir = reflect(xpos.xyz, nor);
|
||||
// Convert sampleDir in world space (where tex was generated)
|
||||
vec4 sampleDir = TransposeViewMatrix * vec4(viewSampleDir, 0.);
|
||||
vec4 sampleDir = transpose(InverseViewMatrix) * vec4(viewSampleDir, 0.);
|
||||
vec4 detail0 = texture(tex, sampleDir.xyz);
|
||||
|
||||
FragColor = vec4(detail0.xyz, 1.);
|
||||
|
||||
@@ -3,24 +3,20 @@ uniform sampler2D tex;
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 nor;
|
||||
in vec2 uv;
|
||||
out vec2 EncodedNormal;
|
||||
out vec3 EncodedNormal;
|
||||
#else
|
||||
varying vec3 nor;
|
||||
varying vec2 uv;
|
||||
#define EncodedNormal gl_FragColor.xy
|
||||
#endif
|
||||
|
||||
|
||||
// from Crytek "a bit more deferred CryEngine"
|
||||
vec2 EncodeNormal(vec3 n)
|
||||
{
|
||||
return normalize(n.xy) * sqrt(n.z * 0.5 + 0.5);
|
||||
}
|
||||
vec2 EncodeNormal(vec3 n);
|
||||
|
||||
void main() {
|
||||
vec4 col = texture(tex, uv);
|
||||
if (col.a < 0.5)
|
||||
discard;
|
||||
EncodedNormal = 0.5 * EncodeNormal(normalize(nor)) + 0.5;
|
||||
EncodedNormal.xy = 0.5 * EncodeNormal(normalize(nor)) + 0.5;
|
||||
EncodedNormal.z = 1.;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,30 +0,0 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
uniform mat4 TextureMatrix =
|
||||
mat4(1., 0., 0., 0.,
|
||||
0., 1., 0., 0.,
|
||||
0., 0., 1., 0.,
|
||||
0., 0., 0., 1.);
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec3 Normal;
|
||||
in vec2 Texcoord;
|
||||
out vec3 nor;
|
||||
out vec2 uv;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec3 Normal;
|
||||
attribute vec2 Texcoord;
|
||||
varying vec3 nor;
|
||||
varying vec2 uv;
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
uv = (TextureMatrix * vec4(Texcoord, 1., 1.)).xy;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
nor = (TransposeInverseModelView * vec4(Normal, 0.)).xyz;
|
||||
}
|
||||
@@ -1,9 +1,4 @@
|
||||
uniform sampler2D Albedo;
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
@@ -13,15 +8,12 @@ varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec4 color = texture(Albedo, uv);
|
||||
if (color.a < 0.5) discard;
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
float ao = texture(SSAO, tc).x;
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent;
|
||||
vec3 LightFactor = getLightFactor(1.);
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
|
||||
@@ -6,7 +6,7 @@ uniform vec2 screen;
|
||||
in float lf;
|
||||
in vec2 tc;
|
||||
in vec3 pc;
|
||||
out vec4 color;
|
||||
out vec4 FragColor;
|
||||
|
||||
|
||||
void main(void)
|
||||
@@ -19,6 +19,7 @@ void main(void)
|
||||
vec4 EnvPos = invproj * (2. * vec4(xy, EnvZ, 1.0) - 1.);
|
||||
EnvPos /= EnvPos.w;
|
||||
float alpha = clamp((EnvPos.z - FragmentPos.z) * 0.3, 0., 1.);
|
||||
color = texture(tex, tc) * vec4(pc, 1.0);
|
||||
vec4 color = texture(tex, tc) * vec4(pc, 1.0);
|
||||
color.a *= alpha * smoothstep(1., 0.8, lf);
|
||||
FragColor = vec4(color.rgb * color.a, color.a);
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#version 330
|
||||
#version 140
|
||||
uniform sampler2D tex;
|
||||
|
||||
in vec2 uv;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// Passthrough shader for drawQuad()
|
||||
#version 330
|
||||
#version 140
|
||||
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
|
||||
@@ -12,43 +12,34 @@ flat in vec3 col;
|
||||
out vec4 Diffuse;
|
||||
out vec4 Specular;
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
vec3 DecodeNormal(vec2 n);
|
||||
vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness);
|
||||
|
||||
void main()
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec2 texc = gl_FragCoord.xy / screen;
|
||||
float z = texture(dtex, texc).x;
|
||||
vec3 norm = normalize(DecodeNormal(2. * texture(ntex, texc).xy - 1.));
|
||||
|
||||
vec4 xpos = 2.0 * vec4(texc, z, 1.0) - 1.0f;
|
||||
xpos = invproj * xpos;
|
||||
xpos /= xpos.w;
|
||||
vec3 eyedir = normalize(xpos.xyz);
|
||||
|
||||
vec3 diffuse = vec3(0.), specular = vec3(0.);
|
||||
|
||||
vec4 pseudocenter = ViewMatrix * vec4(center.xyz, 1.0);
|
||||
pseudocenter /= pseudocenter.w;
|
||||
vec3 light_pos = pseudocenter.xyz;
|
||||
vec3 light_col = col.xyz;
|
||||
float d = distance(light_pos, xpos.xyz);
|
||||
float att = energy * 200. / (4. * 3.14 * d * d);
|
||||
float spec_att = (energy + 10.) * 200. / (4. * 3.14 * d * d);
|
||||
|
||||
// Light Direction
|
||||
vec3 L = normalize(xpos.xyz - light_pos);
|
||||
|
||||
float NdotL = max(0.0, dot(norm, -L));
|
||||
diffuse += NdotL * light_col * att;
|
||||
// Reflected light dir
|
||||
vec3 R = reflect(-L, norm);
|
||||
float RdotE = max(0.0, dot(R, eyedir));
|
||||
specular += pow(RdotE, spec) * light_col * spec_att;
|
||||
|
||||
Diffuse = vec4(diffuse, 1.);
|
||||
Specular = vec4(specular , 1.);
|
||||
vec2 texc = gl_FragCoord.xy / screen;
|
||||
float z = texture(dtex, texc).x;
|
||||
vec3 norm = normalize(DecodeNormal(2. * texture(ntex, texc).xy - 1.));
|
||||
float roughness = texture(ntex, texc).z;
|
||||
|
||||
vec4 xpos = 2.0 * vec4(texc, z, 1.0) - 1.0f;
|
||||
xpos = invproj * xpos;
|
||||
xpos /= xpos.w;
|
||||
vec3 eyedir = -normalize(xpos.xyz);
|
||||
|
||||
vec4 pseudocenter = ViewMatrix * vec4(center.xyz, 1.0);
|
||||
pseudocenter /= pseudocenter.w;
|
||||
vec3 light_pos = pseudocenter.xyz;
|
||||
vec3 light_col = col.xyz;
|
||||
float d = distance(light_pos, xpos.xyz);
|
||||
float att = energy * 200. / (4. * 3.14 * d * d);
|
||||
float spec_att = (energy + 10.) * 200. / (4. * 3.14 * d * d);
|
||||
|
||||
// Light Direction
|
||||
vec3 L = -normalize(xpos.xyz - light_pos);
|
||||
|
||||
float NdotL = max(0., dot(norm, L));
|
||||
|
||||
Diffuse = vec4(NdotL * light_col * att, 1.);
|
||||
Specular = vec4(getSpecular(norm, eyedir, L, light_col, roughness) * NdotL * spec_att, 1.);
|
||||
}
|
||||
|
||||
@@ -16,23 +16,24 @@ const float zNear = 1.;
|
||||
void main(void)
|
||||
{
|
||||
// Beyond that value, light is too attenuated
|
||||
float r = 40 * Energy;
|
||||
float r = 500 * Energy;
|
||||
center = Position;
|
||||
energy = Energy;
|
||||
vec4 Center = ViewMatrix * vec4(Position, 1.);
|
||||
vec4 ProjectedCornerPosition = ProjectionMatrix * (Center + r * vec4(Corner, 0., 0.));
|
||||
float adjustedDepth = ProjectedCornerPosition.z;
|
||||
if (Center.z > zNear) // Light is in front of the cam
|
||||
{
|
||||
vec3 UnitCenter = normalize(-Center.xyz);
|
||||
float clampedR = min(r, Center.z - 1.);
|
||||
float cosTheta = dot(UnitCenter, vec3(0., 0., -1));
|
||||
float d = clampedR / cosTheta;
|
||||
Center.xyz += d * UnitCenter;
|
||||
adjustedDepth = max(Center.z - r, zNear);
|
||||
}
|
||||
else if (Center.z + r > zNear) // Light is behind the cam but in range
|
||||
{
|
||||
Center.z = zNear;
|
||||
// TODO: Change r so that we make the screen aligned quad fits light range.
|
||||
adjustedDepth = zNear;
|
||||
}
|
||||
|
||||
ProjectedCornerPosition /= ProjectedCornerPosition.w;
|
||||
ProjectedCornerPosition.zw = (ProjectionMatrix * vec4(0., 0., adjustedDepth, 1.)).zw;
|
||||
ProjectedCornerPosition.xy *= ProjectedCornerPosition.w;
|
||||
col = Color;
|
||||
gl_Position = ProjectionMatrix * (Center + r * vec4(Corner, 0., 0.));
|
||||
gl_Position = ProjectedCornerPosition;
|
||||
}
|
||||
|
||||
@@ -1,23 +1,43 @@
|
||||
uniform mat4 ModelViewProjectionMatrix[4];
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
#if __VERSION__ >= 400
|
||||
layout(triangles, invocations=4) in;
|
||||
#else
|
||||
layout(triangles) in;
|
||||
#endif
|
||||
layout(triangle_strip, max_vertices=12) out;
|
||||
|
||||
in vec2 tc[3];
|
||||
|
||||
out vec2 uv;
|
||||
|
||||
void emitToLayer(int layerId)
|
||||
{
|
||||
gl_Layer = layerId;
|
||||
for(int i=0; i<3; i++)
|
||||
{
|
||||
uv = tc[i];
|
||||
gl_Position = ShadowViewProjMatrixes[layerId] * gl_in[i].gl_Position;
|
||||
EmitVertex();
|
||||
}
|
||||
EndPrimitive();
|
||||
}
|
||||
|
||||
void main(void)
|
||||
{
|
||||
#if __VERSION__ >= 400
|
||||
emitToLayer(gl_InvocationID);
|
||||
#else
|
||||
for (int j = 0; j<4; j++)
|
||||
{
|
||||
gl_Layer = j;
|
||||
for(int i=0; i<3; i++)
|
||||
{
|
||||
uv = tc[i];
|
||||
gl_Position = ModelViewProjectionMatrix[j] * gl_in[i].gl_Position;
|
||||
EmitVertex();
|
||||
}
|
||||
EndPrimitive();
|
||||
emitToLayer(j);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
uniform mat4 ModelMatrix;
|
||||
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
|
||||
|
||||
out vec2 tc;
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
tc = Texcoord;
|
||||
gl_Position = vec4(Position, 1.);
|
||||
gl_Position = ModelMatrix * vec4(Position, 1.);
|
||||
}
|
||||
|
||||
@@ -1,5 +1,13 @@
|
||||
layout (std140) uniform MatrixesData
|
||||
{
|
||||
mat4 ViewMatrix;
|
||||
mat4 ProjectionMatrix;
|
||||
mat4 InverseViewMatrix;
|
||||
mat4 InverseProjectionMatrix;
|
||||
mat4 ShadowViewProjMatrixes[4];
|
||||
};
|
||||
|
||||
uniform samplerCube tex;
|
||||
uniform mat4 InvProjView;
|
||||
uniform vec2 screen;
|
||||
|
||||
|
||||
@@ -14,7 +22,7 @@ void main(void)
|
||||
{
|
||||
vec3 eyedir = gl_FragCoord.xyz / vec3(screen, 1.);
|
||||
eyedir = 2.0 * eyedir - 1.0;
|
||||
vec4 tmp = (InvProjView * vec4(eyedir, 1.));
|
||||
vec4 tmp = (InverseViewMatrix * InverseProjectionMatrix * vec4(eyedir, 1.));
|
||||
eyedir = tmp.xyz / tmp.w;
|
||||
vec4 color = texture(tex, eyedir);
|
||||
FragColor = vec4(color.xyz, 1.);
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
// SuperTuxKart - a fun racing game with go-kart
|
||||
// Copyright (C) 2013 the SuperTuxKart team
|
||||
//
|
||||
// This program is free software; you can redistribute it and/or
|
||||
// modify it under the terms of the GNU General Public License
|
||||
// as published by the Free Software Foundation; either version 3
|
||||
// of the License, or (at your option) any later version.
|
||||
//
|
||||
// This program is distributed in the hope that it will be useful,
|
||||
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
// GNU General Public License for more details.
|
||||
//
|
||||
// You should have received a copy of the GNU General Public License
|
||||
// along with this program; if not, write to the Free Software
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
uniform mat4 TransposeInverseModelView;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec2 Texcoord;
|
||||
in vec2 SecondTexcoord;
|
||||
out vec2 uv;
|
||||
out vec2 uv_bis;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec2 Texcoord;
|
||||
attribute vec2 SecondTexcoord;
|
||||
varying vec2 uv;
|
||||
varying vec2 uv_bis;
|
||||
#endif
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
uv = Texcoord;
|
||||
uv_bis = SecondTexcoord;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
}
|
||||
@@ -25,12 +25,7 @@ vec3 rand(vec2 co)
|
||||
return texture(noise_texture, co*20.16).xyz;
|
||||
}
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
vec3 DecodeNormal(vec2 n);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
|
||||
@@ -19,12 +19,8 @@ varying vec2 uv;
|
||||
#endif
|
||||
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
vec3 DecodeNormal(vec2 n);
|
||||
vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness);
|
||||
|
||||
void main() {
|
||||
float z = texture(dtex, uv).x;
|
||||
@@ -41,14 +37,15 @@ void main() {
|
||||
}
|
||||
|
||||
vec3 norm = normalize(DecodeNormal(2. * texture(ntex, uv).xy - 1.));
|
||||
float roughness = texture(ntex, uv).z;
|
||||
vec3 eyedir = -normalize(xpos.xyz);
|
||||
|
||||
// Normalized on the cpu
|
||||
vec3 L = direction;
|
||||
vec3 L = direction;
|
||||
|
||||
float NdotL = max(0.0, dot(norm, L));
|
||||
vec3 R = reflect(L, norm);
|
||||
float RdotE = max(0.0, dot(R, normalize(xpos.xyz)));
|
||||
float Specular = pow(RdotE, 200);
|
||||
float NdotL = max(0., dot(norm, L));
|
||||
|
||||
vec3 Specular = getSpecular(norm, eyedir, L, col, roughness) * NdotL;
|
||||
|
||||
vec3 outcol = NdotL * col;
|
||||
|
||||
@@ -62,5 +59,5 @@ void main() {
|
||||
}*/
|
||||
|
||||
Diff = vec4(NdotL * col, 1.);
|
||||
Spec = vec4(Specular * col, 1.);
|
||||
Spec = vec4(Specular, 1.);
|
||||
}
|
||||
|
||||
@@ -23,18 +23,14 @@ varying vec2 uv;
|
||||
#endif
|
||||
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
vec3 DecodeNormal(vec2 n);
|
||||
vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness);
|
||||
|
||||
float getShadowFactor(vec3 pos, float bias, int index)
|
||||
{
|
||||
//float a[5] = float[](3.4, 4.2, 5.0, 5.2, 1.1);
|
||||
|
||||
const vec2 shadowoffset[4] = vec2[](
|
||||
vec2 shadowoffset[4] = vec2[](
|
||||
vec2(-1., -1.),
|
||||
vec2(-1., 1.),
|
||||
vec2(1., -1.),
|
||||
@@ -69,14 +65,16 @@ void main() {
|
||||
xpos.xyz /= xpos.w;
|
||||
|
||||
vec3 norm = normalize(DecodeNormal(2. * texture(ntex, uv).xy - 1.));
|
||||
float roughness =texture(ntex, uv).z;
|
||||
vec3 eyedir = -normalize(xpos.xyz);
|
||||
|
||||
// Normalized on the cpu
|
||||
vec3 L = direction;
|
||||
vec3 L = direction;
|
||||
|
||||
float NdotL = max(0., dot(norm, L));
|
||||
|
||||
vec3 Specular = getSpecular(norm, eyedir, L, col, roughness) * NdotL;
|
||||
|
||||
float NdotL = max(0.0, dot(norm, L));
|
||||
vec3 R = reflect(L, norm);
|
||||
float RdotE = max(0.0, dot(R, normalize(xpos.xyz)));
|
||||
float Specular = pow(RdotE, 200);
|
||||
|
||||
vec3 outcol = NdotL * col;
|
||||
|
||||
@@ -117,7 +115,7 @@ void main() {
|
||||
else
|
||||
factor = getShadowFactor(xpos.xyz, bias, 3);
|
||||
Diff = vec4(factor * NdotL * col, 1.);
|
||||
Spec = vec4(factor * Specular * col, 1.);
|
||||
Spec = vec4(factor * Specular, 1.);
|
||||
return;
|
||||
|
||||
// float moved = (abs(dx) + abs(dy)) * 0.5;
|
||||
|
||||
@@ -12,5 +12,7 @@ varying vec2 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
FragColor = texture(tex, uv) * color;
|
||||
vec4 Color = texture(tex, uv) * color;
|
||||
// Premultiply alpha
|
||||
FragColor = vec4(Color.rgb * Color.a, Color.a);
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ uniform vec2 screen;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
in vec4 color;
|
||||
out vec4 FragColor;
|
||||
#else
|
||||
varying vec2 uv;
|
||||
@@ -20,7 +21,7 @@ varying vec2 uv;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(tex, uv);
|
||||
vec4 diffusecolor = texture(tex, uv) * color;
|
||||
vec3 tmp = vec3(gl_FragCoord.xy / screen, gl_FragCoord.z);
|
||||
tmp = 2. * tmp - 1.;
|
||||
|
||||
@@ -33,5 +34,6 @@ void main()
|
||||
|
||||
fog = min(fog, fogmax);
|
||||
|
||||
FragColor = vec4(vec4(col, 0.) * fog + color *(1. - fog));
|
||||
vec4 color = vec4(vec4(col, 0.) * fog + diffusecolor *(1. - fog));
|
||||
FragColor = vec4(color.rgb * color.a, color.a);
|
||||
}
|
||||
|
||||
16
data/shaders/uniformcolortexturedquad.frag
Normal file
@@ -0,0 +1,16 @@
|
||||
uniform sampler2D tex;
|
||||
uniform ivec4 color;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec2 uv;
|
||||
out vec4 FragColor;
|
||||
#else
|
||||
varying vec2 uv;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 res = texture(tex, uv);
|
||||
FragColor = vec4(res.xyz * color.xyz / 255., res.a);
|
||||
}
|
||||
@@ -1,8 +1,3 @@
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec4 color;
|
||||
@@ -12,14 +7,10 @@ varying vec4 color;
|
||||
#define FragColor gl_FragColor
|
||||
#endif
|
||||
|
||||
vec3 getLightFactor(float specMapValue);
|
||||
|
||||
void main(void)
|
||||
{
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
float ao = texture(SSAO, tc).x;
|
||||
vec3 LightFactor = ao * ambient + DiffuseComponent + SpecularComponent * (1. - color.a);
|
||||
|
||||
FragColor = vec4(color.xyz * LightFactor * ao, 1.);
|
||||
vec3 LightFactor = getLightFactor(1.);
|
||||
FragColor = vec4(color.xyz * LightFactor, 1.);
|
||||
}
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
uniform mat4 ModelViewProjectionMatrix;
|
||||
|
||||
#if __VERSION__ >= 130
|
||||
in vec3 Position;
|
||||
in vec4 Color;
|
||||
out vec4 color;
|
||||
#else
|
||||
attribute vec3 Position;
|
||||
attribute vec4 Color;
|
||||
varying vec4 color;
|
||||
#endif
|
||||
|
||||
|
||||
void main(void)
|
||||
{
|
||||
color = Color.zyxw;
|
||||
gl_Position = ModelViewProjectionMatrix * vec4(Position, 1.);
|
||||
}
|
||||
7
data/shaders/utils/decodeNormal.frag
Normal file
@@ -0,0 +1,7 @@
|
||||
|
||||
vec3 DecodeNormal(vec2 n)
|
||||
{
|
||||
float z = dot(n, n) * 2. - 1.;
|
||||
vec2 xy = normalize(n) * sqrt(1. - z * z);
|
||||
return vec3(xy,z);
|
||||
}
|
||||
5
data/shaders/utils/encode_normal.frag
Normal file
@@ -0,0 +1,5 @@
|
||||
// from Crytek "a bit more deferred CryEngine"
|
||||
vec2 EncodeNormal(vec3 n)
|
||||
{
|
||||
return normalize(n.xy) * sqrt(n.z * 0.5 + 0.5);
|
||||
}
|
||||
17
data/shaders/utils/getCIEXYZ.frag
Normal file
@@ -0,0 +1,17 @@
|
||||
// Using numerical value from here
|
||||
// http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering
|
||||
|
||||
vec3 getCIEYxy(vec3 rgbColor)
|
||||
{
|
||||
// convert rgb to srgb
|
||||
vec3 sRGBColor = rgbColor;//vec3(pow(rgbColor.x, 1. / 2.2), pow(rgbColor.y, 1. / 2.2), pow(rgbColor.z, 1. / 2.2));
|
||||
|
||||
mat3 sRGB2XYZ = transpose(mat3(
|
||||
vec3(.4125, .2126, .0193),
|
||||
vec3(.3576, .7152, .1192),
|
||||
vec3(.1805, .0722, .9505)));
|
||||
|
||||
vec3 XYZ = sRGB2XYZ * sRGBColor;
|
||||
float sum = dot(vec3(1.), XYZ);
|
||||
return vec3(XYZ.y, XYZ.xy / sum);
|
||||
}
|
||||
15
data/shaders/utils/getLightFactor.frag
Normal file
@@ -0,0 +1,15 @@
|
||||
uniform sampler2D DiffuseMap;
|
||||
uniform sampler2D SpecularMap;
|
||||
uniform sampler2D SSAO;
|
||||
uniform vec2 screen;
|
||||
uniform vec3 ambient;
|
||||
|
||||
vec3 getLightFactor(float specMapValue)
|
||||
{
|
||||
vec2 tc = gl_FragCoord.xy / screen;
|
||||
vec3 DiffuseComponent = texture(DiffuseMap, tc).xyz;
|
||||
vec3 SpecularComponent = texture(SpecularMap, tc).xyz;
|
||||
float ao = texture(SSAO, tc).x;
|
||||
vec3 tmp = ao * ambient + DiffuseComponent + SpecularComponent * specMapValue;
|
||||
return tmp * ao;
|
||||
}
|
||||
17
data/shaders/utils/getRGBfromCIEXxy.frag
Normal file
@@ -0,0 +1,17 @@
|
||||
// Using numerical value from here
|
||||
// http://content.gpwiki.org/index.php/D3DBook:High-Dynamic_Range_Rendering
|
||||
|
||||
vec3 getRGBFromCIEXxy(vec3 YxyColor)
|
||||
{
|
||||
float Yovery = YxyColor.x / YxyColor.z;
|
||||
vec3 XYZ = vec3(YxyColor.y * Yovery, YxyColor.x, (1. - YxyColor.y - YxyColor.z) * Yovery);
|
||||
|
||||
mat3 XYZ2sRGB = transpose(mat3(
|
||||
vec3(3.2405, -.9693, .0556),
|
||||
vec3(-1.5371, 1.8760, -.2040),
|
||||
vec3(-.4985, .0416, 1.0572)));
|
||||
|
||||
vec3 sRGBColor = XYZ2sRGB * XYZ;
|
||||
return sRGBColor;//vec3(pow(sRGBColor.x, 2.2), pow(sRGBColor.y, 2.2), pow(sRGBColor.z, 2.2));
|
||||
}
|
||||
|
||||
11
data/shaders/utils/getSpecular.frag
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
|
||||
vec3 getSpecular(vec3 normal, vec3 eyedir, vec3 lightdir, vec3 color, float roughness)
|
||||
{
|
||||
// Half Light View direction
|
||||
vec3 H = normalize(eyedir + lightdir);
|
||||
float NdotH = max(0., dot(normal, H));
|
||||
float normalisationFactor = (roughness + 2.) / 8.;
|
||||
vec3 FresnelSchlick = color + (1.0f - color) * pow(1.0f - max(0., (dot(eyedir, H))), 5);
|
||||
return max(pow(NdotH, roughness) * FresnelSchlick * normalisationFactor, vec3(0.));
|
||||
}
|
||||
50
data/shaders/utils/getworldmatrix.vert
Normal file
@@ -0,0 +1,50 @@
|
||||
const float DEG2GRAD = 3.14 / 180.;
|
||||
|
||||
|
||||
mat4 getMatrixFromRotation(vec3 rotation)
|
||||
{
|
||||
|
||||
// from irrlicht
|
||||
float cr = cos(DEG2GRAD * rotation.x );
|
||||
float sr = sin(DEG2GRAD * rotation.x );
|
||||
float cp = cos(DEG2GRAD * rotation.y );
|
||||
float sp = sin(DEG2GRAD * rotation.y );
|
||||
float cy = cos(DEG2GRAD * rotation.z );
|
||||
float sy = sin(DEG2GRAD * rotation.z );
|
||||
|
||||
float srsp = sr*sp;
|
||||
float crsp = cr*sp;
|
||||
|
||||
return transpose(mat4(
|
||||
vec4(cp * cy, srsp * cy - cr * sy, crsp * cy + sr * sy, 0.),
|
||||
vec4(cp * sy, srsp * sy + cr * cy, crsp * sy - sr * cy, 0.),
|
||||
vec4(-sp, sr * cp, cr * cp, 0.),
|
||||
vec4(0., 0., 0., 1.)));
|
||||
}
|
||||
|
||||
mat4 getScaleMatrix(vec3 scale)
|
||||
{
|
||||
mat4 result = mat4(
|
||||
vec4(scale.x, 0., 0., 0.),
|
||||
vec4(0., scale.y, 0., 0.),
|
||||
vec4(0., 0., scale.z, 0.),
|
||||
vec4(0., 0., 0., 1.)
|
||||
);
|
||||
return result;
|
||||
}
|
||||
|
||||
mat4 getWorldMatrix(vec3 translation, vec3 rotation, vec3 scale)
|
||||
{
|
||||
mat4 result = getMatrixFromRotation(rotation);
|
||||
// translation
|
||||
result[3].xyz += translation;
|
||||
return result * getScaleMatrix(scale);
|
||||
}
|
||||
|
||||
mat4 getInverseWorldMatrix(vec3 translation, vec3 rotation, vec3 scale)
|
||||
{
|
||||
mat4 result = transpose(getMatrixFromRotation(rotation));
|
||||
// FIXME: it's wrong but the fourth column is not used
|
||||
result[3].xyz -= translation;
|
||||
return getScaleMatrix(1. / scale) * result;
|
||||
}
|
||||
@@ -368,6 +368,65 @@ void IrrPrintXGrabError(int grabResult, const c8 * grabCommand )
|
||||
}
|
||||
#endif
|
||||
|
||||
static GLXContext getMeAGLContext(Display *display, GLXFBConfig glxFBConfig)
|
||||
{
|
||||
GLXContext Context;
|
||||
int compat33ctx[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
|
||||
None
|
||||
};
|
||||
int core33ctx[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
|
||||
None
|
||||
};
|
||||
int core31ctx[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_CORE_PROFILE_BIT_ARB,
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
|
||||
None
|
||||
};
|
||||
int legacyctx[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 2,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
None
|
||||
};
|
||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = 0;
|
||||
glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)
|
||||
glXGetProcAddressARB( (const GLubyte *) "glXCreateContextAttribsARB" );
|
||||
|
||||
// create compat 3.3 context (for proprietary drivers)
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, compat33ctx);
|
||||
if (!XErrorSignaled)
|
||||
return Context;
|
||||
|
||||
XErrorSignaled = false;
|
||||
// create core 3.3 context (for mesa)
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, core33ctx);
|
||||
if (!XErrorSignaled)
|
||||
return Context;
|
||||
|
||||
XErrorSignaled = false;
|
||||
// create core 3.1 context (for older mesa)
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, core31ctx);
|
||||
if (!XErrorSignaled)
|
||||
return Context;
|
||||
|
||||
XErrorSignaled = false;
|
||||
// fall back to legacy context
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, legacyctx);
|
||||
return Context;
|
||||
}
|
||||
|
||||
bool CIrrDeviceLinux::createWindow()
|
||||
{
|
||||
@@ -741,30 +800,7 @@ bool CIrrDeviceLinux::createWindow()
|
||||
glxWin=glXCreateWindow(display,glxFBConfig,window,NULL);
|
||||
if (glxWin)
|
||||
{
|
||||
int context_attribs[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 3,
|
||||
GLX_CONTEXT_PROFILE_MASK_ARB, GLX_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, //GLX_CONTEXT_CORE_PROFILE_BIT_ARB
|
||||
GLX_CONTEXT_FLAGS_ARB, GLX_CONTEXT_DEBUG_BIT_ARB,
|
||||
None
|
||||
};
|
||||
PFNGLXCREATECONTEXTATTRIBSARBPROC glXCreateContextAttribsARB = 0;
|
||||
glXCreateContextAttribsARB = (PFNGLXCREATECONTEXTATTRIBSARBPROC)
|
||||
glXGetProcAddressARB( (const GLubyte *) "glXCreateContextAttribsARB" );
|
||||
// create glx context
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, context_attribs);
|
||||
if (XErrorSignaled)
|
||||
{
|
||||
int context_attribs[] =
|
||||
{
|
||||
GLX_CONTEXT_MAJOR_VERSION_ARB, 2,
|
||||
GLX_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
None
|
||||
};
|
||||
Context = glXCreateContextAttribsARB(display, glxFBConfig, 0, True, context_attribs);
|
||||
XErrorSignaled = false;
|
||||
}
|
||||
Context = getMeAGLContext(display, glxFBConfig);
|
||||
if (Context)
|
||||
{
|
||||
if (!glXMakeContextCurrent(display, glxWin, glxWin, Context))
|
||||
|
||||
@@ -84,6 +84,52 @@ bool COpenGLDriver::changeRenderContext(const SExposedVideoData& videoData, CIrr
|
||||
return true;
|
||||
}
|
||||
|
||||
static PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs_ARB;
|
||||
|
||||
static HGLRC getMeAGLContext(HDC HDc)
|
||||
{
|
||||
HGLRC hrc = 0;
|
||||
int ctx40[] =
|
||||
{
|
||||
WGL_CONTEXT_MAJOR_VERSION_ARB, 4,
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 0,
|
||||
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_DEBUG_BIT_ARB,
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
||||
0
|
||||
};
|
||||
|
||||
hrc = wglCreateContextAttribs_ARB(HDc, 0, ctx40);
|
||||
if (hrc)
|
||||
return hrc;
|
||||
|
||||
int ctx33[] =
|
||||
{
|
||||
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
|
||||
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_DEBUG_BIT_ARB,
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
||||
0
|
||||
};
|
||||
|
||||
hrc = wglCreateContextAttribs_ARB(HDc, 0, ctx33);
|
||||
if (hrc)
|
||||
return hrc;
|
||||
|
||||
int ctx31[] =
|
||||
{
|
||||
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 1,
|
||||
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_DEBUG_BIT_ARB,
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB,
|
||||
0
|
||||
};
|
||||
hrc = wglCreateContextAttribs_ARB(HDc, 0, ctx31);
|
||||
if (hrc)
|
||||
return hrc;
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//! inits the open gl driver
|
||||
bool COpenGLDriver::initDriver(CIrrDeviceWin32* device)
|
||||
{
|
||||
@@ -339,7 +385,7 @@ bool COpenGLDriver::initDriver(CIrrDeviceWin32* device)
|
||||
#endif
|
||||
AntiAlias=0;
|
||||
#ifdef WGL_ARB_create_context
|
||||
PFNWGLCREATECONTEXTATTRIBSARBPROC wglCreateContextAttribs_ARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");
|
||||
wglCreateContextAttribs_ARB = (PFNWGLCREATECONTEXTATTRIBSARBPROC)wglGetProcAddress("wglCreateContextAttribsARB");
|
||||
#endif
|
||||
wglMakeCurrent(HDc, NULL);
|
||||
wglDeleteContext(hrc);
|
||||
@@ -409,22 +455,7 @@ bool COpenGLDriver::initDriver(CIrrDeviceWin32* device)
|
||||
#ifdef WGL_ARB_create_context
|
||||
if (wglCreateContextAttribs_ARB)
|
||||
{
|
||||
int iAttribs[] =
|
||||
{
|
||||
WGL_CONTEXT_MAJOR_VERSION_ARB, 3,
|
||||
WGL_CONTEXT_MINOR_VERSION_ARB, 3,
|
||||
WGL_CONTEXT_FLAGS_ARB, WGL_CONTEXT_DEBUG_BIT_ARB,
|
||||
WGL_CONTEXT_PROFILE_MASK_ARB, WGL_CONTEXT_COMPATIBILITY_PROFILE_BIT_ARB, //WGL_CONTEXT_CORE_PROFILE_BIT_ARB
|
||||
0
|
||||
};
|
||||
// hd3000 only provides 3.1, so try all minor versions backwards, to find one that works.
|
||||
for (int minor = 3; minor >= 0; minor--)
|
||||
{
|
||||
iAttribs[3] = minor;
|
||||
hrc = wglCreateContextAttribs_ARB(HDc, 0, iAttribs);
|
||||
if (hrc)
|
||||
break;
|
||||
}
|
||||
hrc = getMeAGLContext(HDc);
|
||||
}
|
||||
else
|
||||
#endif
|
||||
|
||||
@@ -868,16 +868,9 @@ bool COpenGLFBODepthTexture::attach(ITexture* renderTex)
|
||||
#ifdef GL_EXT_framebuffer_object
|
||||
if (UseStencil)
|
||||
{
|
||||
// attach stencil texture to stencil buffer
|
||||
// attach depth stencil texture to depth buffer
|
||||
Driver->extGlFramebufferTexture2D(GL_FRAMEBUFFER_EXT,
|
||||
GL_STENCIL_ATTACHMENT_EXT,
|
||||
GL_TEXTURE_2D,
|
||||
StencilRenderBuffer,
|
||||
0);
|
||||
|
||||
// attach depth texture to depth buffer
|
||||
Driver->extGlFramebufferTexture2D(GL_FRAMEBUFFER_EXT,
|
||||
GL_DEPTH_ATTACHMENT_EXT,
|
||||
GL_DEPTH_STENCIL_ATTACHMENT,
|
||||
GL_TEXTURE_2D,
|
||||
DepthRenderBuffer,
|
||||
0);
|
||||
|
||||
@@ -642,6 +642,7 @@ bool CIrrDeviceMacOSX::createWindow()
|
||||
NSOpenGLPFASamples, (NSOpenGLPixelFormatAttribute)CreationParams.AntiAlias,
|
||||
NSOpenGLPFAStencilSize, (NSOpenGLPixelFormatAttribute)(CreationParams.Stencilbuffer?1:0),
|
||||
NSOpenGLPFADoubleBuffer,
|
||||
NSOpenGLPFAOpenGLProfile, (NSOpenGLPixelFormatAttribute)NSOpenGLProfileVersion3_2Core,
|
||||
(NSOpenGLPixelFormatAttribute)nil
|
||||
};
|
||||
|
||||
|
||||
675
sources.cmake
@@ -1,672 +1,3 @@
|
||||
# Generated by ./update_file_list.sh. Do not edit this file manually.
|
||||
set(STK_SOURCES
|
||||
src/achievements/achievement.cpp
|
||||
src/achievements/achievement_info.cpp
|
||||
src/achievements/achievements_manager.cpp
|
||||
src/achievements/achievements_status.cpp
|
||||
src/addons/addon.cpp
|
||||
src/addons/addons_manager.cpp
|
||||
src/addons/news_manager.cpp
|
||||
src/addons/zip.cpp
|
||||
src/animations/animation_base.cpp
|
||||
src/animations/ipo.cpp
|
||||
src/animations/three_d_animation.cpp
|
||||
src/audio/music_information.cpp
|
||||
src/audio/music_manager.cpp
|
||||
src/audio/music_ogg.cpp
|
||||
src/audio/sfx_buffer.cpp
|
||||
src/audio/sfx_manager.cpp
|
||||
src/audio/sfx_openal.cpp
|
||||
src/challenges/challenge_data.cpp
|
||||
src/challenges/challenge_status.cpp
|
||||
src/challenges/story_mode_status.cpp
|
||||
src/challenges/unlock_manager.cpp
|
||||
src/config/device_config.cpp
|
||||
src/config/player_manager.cpp
|
||||
src/config/player_profile.cpp
|
||||
src/config/saved_grand_prix.cpp
|
||||
src/config/stk_config.cpp
|
||||
src/config/user_config.cpp
|
||||
src/graphics/callbacks.cpp
|
||||
src/graphics/camera.cpp
|
||||
src/graphics/CBatchingMesh.cpp
|
||||
src/graphics/explosion.cpp
|
||||
src/graphics/glow.cpp
|
||||
src/graphics/glwrap.cpp
|
||||
src/graphics/gpuparticles.cpp
|
||||
src/graphics/hardware_skinning.cpp
|
||||
src/graphics/hit_sfx.cpp
|
||||
src/graphics/irr_driver.cpp
|
||||
src/graphics/lens_flare.cpp
|
||||
src/graphics/light.cpp
|
||||
src/graphics/lod_node.cpp
|
||||
src/graphics/material.cpp
|
||||
src/graphics/material_manager.cpp
|
||||
src/graphics/mesh_tools.cpp
|
||||
src/graphics/moving_texture.cpp
|
||||
src/graphics/particle_emitter.cpp
|
||||
src/graphics/particle_kind.cpp
|
||||
src/graphics/particle_kind_manager.cpp
|
||||
src/graphics/per_camera_node.cpp
|
||||
src/graphics/post_processing.cpp
|
||||
src/graphics/rain.cpp
|
||||
src/graphics/referee.cpp
|
||||
src/graphics/render.cpp
|
||||
src/graphics/rtts.cpp
|
||||
src/graphics/screenquad.cpp
|
||||
src/graphics/shaders.cpp
|
||||
src/graphics/shadow.cpp
|
||||
src/graphics/shadow_importance.cpp
|
||||
src/graphics/show_curve.cpp
|
||||
src/graphics/skid_marks.cpp
|
||||
src/graphics/slip_stream.cpp
|
||||
src/graphics/stars.cpp
|
||||
src/graphics/stkanimatedmesh.cpp
|
||||
src/graphics/stkbillboard.cpp
|
||||
src/graphics/stkmesh.cpp
|
||||
src/graphics/stkmeshscenenode.cpp
|
||||
src/graphics/sun.cpp
|
||||
src/graphics/water.cpp
|
||||
src/graphics/wind.cpp
|
||||
src/guiengine/abstract_state_manager.cpp
|
||||
src/guiengine/abstract_top_level_container.cpp
|
||||
src/guiengine/CGUISpriteBank.cpp
|
||||
src/guiengine/dialog_queue.cpp
|
||||
src/guiengine/engine.cpp
|
||||
src/guiengine/event_handler.cpp
|
||||
src/guiengine/layout_manager.cpp
|
||||
src/guiengine/modaldialog.cpp
|
||||
src/guiengine/scalable_font.cpp
|
||||
src/guiengine/screen.cpp
|
||||
src/guiengine/screen_loader.cpp
|
||||
src/guiengine/skin.cpp
|
||||
src/guiengine/widget.cpp
|
||||
src/guiengine/widgets/bubble_widget.cpp
|
||||
src/guiengine/widgets/button_widget.cpp
|
||||
src/guiengine/widgets/CGUIEditBox.cpp
|
||||
src/guiengine/widgets/CGUISTKListBox.cpp
|
||||
src/guiengine/widgets/check_box_widget.cpp
|
||||
src/guiengine/widgets/dynamic_ribbon_widget.cpp
|
||||
src/guiengine/widgets/icon_button_widget.cpp
|
||||
src/guiengine/widgets/label_widget.cpp
|
||||
src/guiengine/widgets/list_widget.cpp
|
||||
src/guiengine/widgets/model_view_widget.cpp
|
||||
src/guiengine/widgets/progress_bar_widget.cpp
|
||||
src/guiengine/widgets/rating_bar_widget.cpp
|
||||
src/guiengine/widgets/ribbon_widget.cpp
|
||||
src/guiengine/widgets/spinner_widget.cpp
|
||||
src/guiengine/widgets/text_box_widget.cpp
|
||||
src/input/binding.cpp
|
||||
src/input/device_manager.cpp
|
||||
src/input/input_device.cpp
|
||||
src/input/input_manager.cpp
|
||||
src/input/wiimote.cpp
|
||||
src/input/wiimote_manager.cpp
|
||||
src/io/file_manager.cpp
|
||||
src/io/utf_writer.cpp
|
||||
src/io/xml_node.cpp
|
||||
src/items/attachment.cpp
|
||||
src/items/attachment_manager.cpp
|
||||
src/items/bowling.cpp
|
||||
src/items/cake.cpp
|
||||
src/items/flyable.cpp
|
||||
src/items/item.cpp
|
||||
src/items/item_manager.cpp
|
||||
src/items/plunger.cpp
|
||||
src/items/powerup.cpp
|
||||
src/items/powerup_manager.cpp
|
||||
src/items/projectile_manager.cpp
|
||||
src/items/rubber_ball.cpp
|
||||
src/items/rubber_band.cpp
|
||||
src/items/swatter.cpp
|
||||
src/karts/abstract_kart.cpp
|
||||
src/karts/abstract_kart_animation.cpp
|
||||
src/karts/cannon_animation.cpp
|
||||
src/karts/controller/ai_base_controller.cpp
|
||||
src/karts/controller/ai_properties.cpp
|
||||
src/karts/controller/controller.cpp
|
||||
src/karts/controller/end_controller.cpp
|
||||
src/karts/controller/network_player_controller.cpp
|
||||
src/karts/controller/player_controller.cpp
|
||||
src/karts/controller/skidding_ai.cpp
|
||||
src/karts/explosion_animation.cpp
|
||||
src/karts/ghost_kart.cpp
|
||||
src/karts/kart.cpp
|
||||
src/karts/kart_gfx.cpp
|
||||
src/karts/kart_model.cpp
|
||||
src/karts/kart_properties.cpp
|
||||
src/karts/kart_properties_manager.cpp
|
||||
src/karts/kart_with_stats.cpp
|
||||
src/karts/max_speed.cpp
|
||||
src/karts/moveable.cpp
|
||||
src/karts/rescue_animation.cpp
|
||||
src/karts/skidding.cpp
|
||||
src/karts/skidding_properties.cpp
|
||||
src/main.cpp
|
||||
src/main_loop.cpp
|
||||
src/modes/cutscene_world.cpp
|
||||
src/modes/demo_world.cpp
|
||||
src/modes/easter_egg_hunt.cpp
|
||||
src/modes/follow_the_leader.cpp
|
||||
src/modes/linear_world.cpp
|
||||
src/modes/overworld.cpp
|
||||
src/modes/profile_world.cpp
|
||||
src/modes/soccer_world.cpp
|
||||
src/modes/standard_race.cpp
|
||||
src/modes/three_strikes_battle.cpp
|
||||
src/modes/tutorial_world.cpp
|
||||
src/modes/world.cpp
|
||||
src/modes/world_status.cpp
|
||||
src/modes/world_with_rank.cpp
|
||||
src/network/client_network_manager.cpp
|
||||
src/network/event.cpp
|
||||
src/network/game_setup.cpp
|
||||
src/network/network_interface.cpp
|
||||
src/network/network_manager.cpp
|
||||
src/network/network_string.cpp
|
||||
src/network/network_world.cpp
|
||||
src/network/protocol.cpp
|
||||
src/network/protocol_manager.cpp
|
||||
src/network/protocols/client_lobby_room_protocol.cpp
|
||||
src/network/protocols/connect_to_peer.cpp
|
||||
src/network/protocols/connect_to_server.cpp
|
||||
src/network/protocols/controller_events_protocol.cpp
|
||||
src/network/protocols/game_events_protocol.cpp
|
||||
src/network/protocols/get_peer_address.cpp
|
||||
src/network/protocols/get_public_address.cpp
|
||||
src/network/protocols/hide_public_address.cpp
|
||||
src/network/protocols/kart_update_protocol.cpp
|
||||
src/network/protocols/lobby_room_protocol.cpp
|
||||
src/network/protocols/ping_protocol.cpp
|
||||
src/network/protocols/quick_join_protocol.cpp
|
||||
src/network/protocols/request_connection.cpp
|
||||
src/network/protocols/server_lobby_room_protocol.cpp
|
||||
src/network/protocols/show_public_address.cpp
|
||||
src/network/protocols/start_game_protocol.cpp
|
||||
src/network/protocols/start_server.cpp
|
||||
src/network/protocols/stop_server.cpp
|
||||
src/network/protocols/synchronization_protocol.cpp
|
||||
src/network/race_config.cpp
|
||||
src/network/server_network_manager.cpp
|
||||
src/network/stk_host.cpp
|
||||
src/network/stk_peer.cpp
|
||||
src/network/types.cpp
|
||||
src/online/current_user.cpp
|
||||
src/online/http_request.cpp
|
||||
src/online/messages.cpp
|
||||
src/online/online_profile.cpp
|
||||
src/online/profile_manager.cpp
|
||||
src/online/request.cpp
|
||||
src/online/request_manager.cpp
|
||||
src/online/server.cpp
|
||||
src/online/servers_manager.cpp
|
||||
src/online/xml_request.cpp
|
||||
src/physics/btKart.cpp
|
||||
src/physics/btKartRaycast.cpp
|
||||
src/physics/btUprightConstraint.cpp
|
||||
src/physics/irr_debug_drawer.cpp
|
||||
src/physics/physical_object.cpp
|
||||
src/physics/physics.cpp
|
||||
src/physics/triangle_mesh.cpp
|
||||
src/race/grand_prix_data.cpp
|
||||
src/race/grand_prix_manager.cpp
|
||||
src/race/highscore_manager.cpp
|
||||
src/race/highscores.cpp
|
||||
src/race/history.cpp
|
||||
src/race/race_manager.cpp
|
||||
src/replay/replay_base.cpp
|
||||
src/replay/replay_play.cpp
|
||||
src/replay/replay_recorder.cpp
|
||||
src/states_screens/addons_screen.cpp
|
||||
src/states_screens/arenas_screen.cpp
|
||||
src/states_screens/create_server_screen.cpp
|
||||
src/states_screens/credits.cpp
|
||||
src/states_screens/cutscene_gui.cpp
|
||||
src/states_screens/dialogs/add_device_dialog.cpp
|
||||
src/states_screens/dialogs/addons_loading.cpp
|
||||
src/states_screens/dialogs/change_password_dialog.cpp
|
||||
src/states_screens/dialogs/confirm_resolution_dialog.cpp
|
||||
src/states_screens/dialogs/custom_video_settings.cpp
|
||||
src/states_screens/dialogs/enter_player_name_dialog.cpp
|
||||
src/states_screens/dialogs/gp_info_dialog.cpp
|
||||
src/states_screens/dialogs/message_dialog.cpp
|
||||
src/states_screens/dialogs/notification_dialog.cpp
|
||||
src/states_screens/dialogs/player_info_dialog.cpp
|
||||
src/states_screens/dialogs/press_a_key_dialog.cpp
|
||||
src/states_screens/dialogs/race_paused_dialog.cpp
|
||||
src/states_screens/dialogs/recovery_dialog.cpp
|
||||
src/states_screens/dialogs/registration_dialog.cpp
|
||||
src/states_screens/dialogs/select_challenge.cpp
|
||||
src/states_screens/dialogs/server_info_dialog.cpp
|
||||
src/states_screens/dialogs/track_info_dialog.cpp
|
||||
src/states_screens/dialogs/tutorial_message_dialog.cpp
|
||||
src/states_screens/dialogs/user_info_dialog.cpp
|
||||
src/states_screens/dialogs/vote_dialog.cpp
|
||||
src/states_screens/easter_egg_screen.cpp
|
||||
src/states_screens/feature_unlocked.cpp
|
||||
src/states_screens/grand_prix_lose.cpp
|
||||
src/states_screens/grand_prix_win.cpp
|
||||
src/states_screens/guest_login_screen.cpp
|
||||
src/states_screens/help_screen_1.cpp
|
||||
src/states_screens/help_screen_2.cpp
|
||||
src/states_screens/help_screen_3.cpp
|
||||
src/states_screens/help_screen_4.cpp
|
||||
src/states_screens/kart_selection.cpp
|
||||
src/states_screens/login_screen.cpp
|
||||
src/states_screens/main_menu_screen.cpp
|
||||
src/states_screens/network_kart_selection.cpp
|
||||
src/states_screens/networking_lobby.cpp
|
||||
src/states_screens/offline_kart_selection.cpp
|
||||
src/states_screens/online_profile_achievements.cpp
|
||||
src/states_screens/online_profile_base.cpp
|
||||
src/states_screens/online_profile_friends.cpp
|
||||
src/states_screens/online_profile_overview.cpp
|
||||
src/states_screens/online_profile_settings.cpp
|
||||
src/states_screens/online_screen.cpp
|
||||
src/states_screens/online_user_search.cpp
|
||||
src/states_screens/options_screen_audio.cpp
|
||||
src/states_screens/options_screen_input.cpp
|
||||
src/states_screens/options_screen_input2.cpp
|
||||
src/states_screens/options_screen_players.cpp
|
||||
src/states_screens/options_screen_ui.cpp
|
||||
src/states_screens/options_screen_video.cpp
|
||||
src/states_screens/race_gui.cpp
|
||||
src/states_screens/race_gui_base.cpp
|
||||
src/states_screens/race_gui_overworld.cpp
|
||||
src/states_screens/race_result_gui.cpp
|
||||
src/states_screens/race_setup_screen.cpp
|
||||
src/states_screens/register_screen.cpp
|
||||
src/states_screens/server_selection.cpp
|
||||
src/states_screens/soccer_setup_screen.cpp
|
||||
src/states_screens/state_manager.cpp
|
||||
src/states_screens/story_mode_lobby.cpp
|
||||
src/states_screens/tracks_screen.cpp
|
||||
src/tinygettext/dictionary.cpp
|
||||
src/tinygettext/dictionary_manager.cpp
|
||||
src/tinygettext/iconv.cpp
|
||||
src/tinygettext/language.cpp
|
||||
src/tinygettext/plural_forms.cpp
|
||||
src/tinygettext/po_parser.cpp
|
||||
src/tinygettext/stk_file_system.cpp
|
||||
src/tinygettext/tgt_log.cpp
|
||||
src/tinygettext/tinygettext.cpp
|
||||
src/tracks/ambient_light_sphere.cpp
|
||||
src/tracks/bezier_curve.cpp
|
||||
src/tracks/check_cannon.cpp
|
||||
src/tracks/check_goal.cpp
|
||||
src/tracks/check_lap.cpp
|
||||
src/tracks/check_line.cpp
|
||||
src/tracks/check_manager.cpp
|
||||
src/tracks/check_sphere.cpp
|
||||
src/tracks/check_structure.cpp
|
||||
src/tracks/graph_node.cpp
|
||||
src/tracks/lod_node_loader.cpp
|
||||
src/tracks/quad.cpp
|
||||
src/tracks/quad_graph.cpp
|
||||
src/tracks/quad_set.cpp
|
||||
src/tracks/terrain_info.cpp
|
||||
src/tracks/track.cpp
|
||||
src/tracks/track_manager.cpp
|
||||
src/tracks/track_object.cpp
|
||||
src/tracks/track_object_manager.cpp
|
||||
src/tracks/track_object_presentation.cpp
|
||||
src/tracks/track_sector.cpp
|
||||
src/utils/command_line.cpp
|
||||
src/utils/constants.cpp
|
||||
src/utils/crash_reporting.cpp
|
||||
src/utils/debug.cpp
|
||||
src/utils/helpers.cpp
|
||||
src/utils/leak_check.cpp
|
||||
src/utils/log.cpp
|
||||
src/utils/profiler.cpp
|
||||
src/utils/random_generator.cpp
|
||||
src/utils/string_utils.cpp
|
||||
src/utils/time.cpp
|
||||
src/utils/translation.cpp
|
||||
src/utils/vec3.cpp
|
||||
)
|
||||
set(STK_HEADERS
|
||||
src/achievements/achievement.hpp
|
||||
src/achievements/achievement_info.hpp
|
||||
src/achievements/achievements_manager.hpp
|
||||
src/achievements/achievements_status.hpp
|
||||
src/addons/addon.hpp
|
||||
src/addons/addons_manager.hpp
|
||||
src/addons/news_manager.hpp
|
||||
src/addons/zip.hpp
|
||||
src/animations/animation_base.hpp
|
||||
src/animations/ipo.hpp
|
||||
src/animations/three_d_animation.hpp
|
||||
src/audio/dummy_sfx.hpp
|
||||
src/audio/music.hpp
|
||||
src/audio/music_dummy.hpp
|
||||
src/audio/music_information.hpp
|
||||
src/audio/music_manager.hpp
|
||||
src/audio/music_ogg.hpp
|
||||
src/audio/sfx_base.hpp
|
||||
src/audio/sfx_buffer.hpp
|
||||
src/audio/sfx_manager.hpp
|
||||
src/audio/sfx_openal.hpp
|
||||
src/challenges/challenge_data.hpp
|
||||
src/challenges/challenge_status.hpp
|
||||
src/challenges/story_mode_status.hpp
|
||||
src/challenges/unlock_manager.hpp
|
||||
src/config/device_config.hpp
|
||||
src/config/player_manager.hpp
|
||||
src/config/player_profile.hpp
|
||||
src/config/saved_grand_prix.hpp
|
||||
src/config/stk_config.hpp
|
||||
src/config/user_config.hpp
|
||||
src/graphics/callbacks.hpp
|
||||
src/graphics/camera.hpp
|
||||
src/graphics/CBatchingMesh.hpp
|
||||
src/graphics/explosion.hpp
|
||||
src/graphics/glow.hpp
|
||||
src/graphics/glwrap.hpp
|
||||
src/graphics/gpuparticles.hpp
|
||||
src/graphics/hardware_skinning.hpp
|
||||
src/graphics/hit_effect.hpp
|
||||
src/graphics/hit_sfx.hpp
|
||||
src/graphics/irr_driver.hpp
|
||||
src/graphics/large_mesh_buffer.hpp
|
||||
src/graphics/lens_flare.hpp
|
||||
src/graphics/light.hpp
|
||||
src/graphics/lod_node.hpp
|
||||
src/graphics/material.hpp
|
||||
src/graphics/material_manager.hpp
|
||||
src/graphics/mesh_tools.hpp
|
||||
src/graphics/mlaa_areamap.hpp
|
||||
src/graphics/moving_texture.hpp
|
||||
src/graphics/particle_emitter.hpp
|
||||
src/graphics/particle_kind.hpp
|
||||
src/graphics/particle_kind_manager.hpp
|
||||
src/graphics/per_camera_node.hpp
|
||||
src/graphics/post_processing.hpp
|
||||
src/graphics/rain.hpp
|
||||
src/graphics/referee.hpp
|
||||
src/graphics/rtts.hpp
|
||||
src/graphics/screenquad.hpp
|
||||
src/graphics/shaders.hpp
|
||||
src/graphics/shadow.hpp
|
||||
src/graphics/shadow_importance.hpp
|
||||
src/graphics/show_curve.hpp
|
||||
src/graphics/skid_marks.hpp
|
||||
src/graphics/slip_stream.hpp
|
||||
src/graphics/stars.hpp
|
||||
src/graphics/stkanimatedmesh.hpp
|
||||
src/graphics/stkbillboard.hpp
|
||||
src/graphics/stkmesh.hpp
|
||||
src/graphics/stkmeshscenenode.hpp
|
||||
src/graphics/sun.hpp
|
||||
src/graphics/water.hpp
|
||||
src/graphics/wind.hpp
|
||||
src/guiengine/abstract_state_manager.hpp
|
||||
src/guiengine/abstract_top_level_container.hpp
|
||||
src/guiengine/dialog_queue.hpp
|
||||
src/guiengine/engine.hpp
|
||||
src/guiengine/event_handler.hpp
|
||||
src/guiengine/layout_manager.hpp
|
||||
src/guiengine/modaldialog.hpp
|
||||
src/guiengine/scalable_font.hpp
|
||||
src/guiengine/screen.hpp
|
||||
src/guiengine/skin.hpp
|
||||
src/guiengine/widget.hpp
|
||||
src/guiengine/widgets.hpp
|
||||
src/guiengine/widgets/bubble_widget.hpp
|
||||
src/guiengine/widgets/button_widget.hpp
|
||||
src/guiengine/widgets/check_box_widget.hpp
|
||||
src/guiengine/widgets/dynamic_ribbon_widget.hpp
|
||||
src/guiengine/widgets/icon_button_widget.hpp
|
||||
src/guiengine/widgets/label_widget.hpp
|
||||
src/guiengine/widgets/list_widget.hpp
|
||||
src/guiengine/widgets/model_view_widget.hpp
|
||||
src/guiengine/widgets/progress_bar_widget.hpp
|
||||
src/guiengine/widgets/rating_bar_widget.hpp
|
||||
src/guiengine/widgets/ribbon_widget.hpp
|
||||
src/guiengine/widgets/spinner_widget.hpp
|
||||
src/guiengine/widgets/text_box_widget.hpp
|
||||
src/input/binding.hpp
|
||||
src/input/device_manager.hpp
|
||||
src/input/input.hpp
|
||||
src/input/input_device.hpp
|
||||
src/input/input_manager.hpp
|
||||
src/input/wiimote.hpp
|
||||
src/input/wiimote_manager.hpp
|
||||
src/io/file_manager.hpp
|
||||
src/io/utf_writer.hpp
|
||||
src/io/xml_node.hpp
|
||||
src/items/attachment.hpp
|
||||
src/items/attachment_manager.hpp
|
||||
src/items/attachment_plugin.hpp
|
||||
src/items/bowling.hpp
|
||||
src/items/cake.hpp
|
||||
src/items/flyable.hpp
|
||||
src/items/item.hpp
|
||||
src/items/item_manager.hpp
|
||||
src/items/plunger.hpp
|
||||
src/items/powerup.hpp
|
||||
src/items/powerup_manager.hpp
|
||||
src/items/projectile_manager.hpp
|
||||
src/items/rubber_ball.hpp
|
||||
src/items/rubber_band.hpp
|
||||
src/items/swatter.hpp
|
||||
src/karts/abstract_kart.hpp
|
||||
src/karts/abstract_kart_animation.hpp
|
||||
src/karts/cannon_animation.hpp
|
||||
src/karts/controller/ai_base_controller.hpp
|
||||
src/karts/controller/ai_properties.hpp
|
||||
src/karts/controller/controller.hpp
|
||||
src/karts/controller/end_controller.hpp
|
||||
src/karts/controller/kart_control.hpp
|
||||
src/karts/controller/network_player_controller.hpp
|
||||
src/karts/controller/player_controller.hpp
|
||||
src/karts/controller/skidding_ai.hpp
|
||||
src/karts/explosion_animation.hpp
|
||||
src/karts/ghost_kart.hpp
|
||||
src/karts/kart.hpp
|
||||
src/karts/kart_gfx.hpp
|
||||
src/karts/kart_model.hpp
|
||||
src/karts/kart_properties.hpp
|
||||
src/karts/kart_properties_manager.hpp
|
||||
src/karts/kart_with_stats.hpp
|
||||
src/karts/max_speed.hpp
|
||||
src/karts/moveable.hpp
|
||||
src/karts/rescue_animation.hpp
|
||||
src/karts/skidding.hpp
|
||||
src/karts/skidding_properties.hpp
|
||||
src/main_loop.hpp
|
||||
src/modes/cutscene_world.hpp
|
||||
src/modes/demo_world.hpp
|
||||
src/modes/easter_egg_hunt.hpp
|
||||
src/modes/follow_the_leader.hpp
|
||||
src/modes/linear_world.hpp
|
||||
src/modes/overworld.hpp
|
||||
src/modes/profile_world.hpp
|
||||
src/modes/soccer_world.hpp
|
||||
src/modes/standard_race.hpp
|
||||
src/modes/three_strikes_battle.hpp
|
||||
src/modes/tutorial_world.hpp
|
||||
src/modes/world.hpp
|
||||
src/modes/world_status.hpp
|
||||
src/modes/world_with_rank.hpp
|
||||
src/network/client_network_manager.hpp
|
||||
src/network/event.hpp
|
||||
src/network/game_setup.hpp
|
||||
src/network/network_interface.hpp
|
||||
src/network/network_manager.hpp
|
||||
src/network/network_string.hpp
|
||||
src/network/network_world.hpp
|
||||
src/network/protocol.hpp
|
||||
src/network/protocol_manager.hpp
|
||||
src/network/protocols/client_lobby_room_protocol.hpp
|
||||
src/network/protocols/connect_to_peer.hpp
|
||||
src/network/protocols/connect_to_server.hpp
|
||||
src/network/protocols/controller_events_protocol.hpp
|
||||
src/network/protocols/game_events_protocol.hpp
|
||||
src/network/protocols/get_peer_address.hpp
|
||||
src/network/protocols/get_public_address.hpp
|
||||
src/network/protocols/hide_public_address.hpp
|
||||
src/network/protocols/kart_update_protocol.hpp
|
||||
src/network/protocols/lobby_room_protocol.hpp
|
||||
src/network/protocols/ping_protocol.hpp
|
||||
src/network/protocols/quick_join_protocol.hpp
|
||||
src/network/protocols/request_connection.hpp
|
||||
src/network/protocols/server_lobby_room_protocol.hpp
|
||||
src/network/protocols/show_public_address.hpp
|
||||
src/network/protocols/start_game_protocol.hpp
|
||||
src/network/protocols/start_server.hpp
|
||||
src/network/protocols/stop_server.hpp
|
||||
src/network/protocols/synchronization_protocol.hpp
|
||||
src/network/race_config.hpp
|
||||
src/network/remote_kart_info.hpp
|
||||
src/network/server_network_manager.hpp
|
||||
src/network/singleton.hpp
|
||||
src/network/stk_host.hpp
|
||||
src/network/stk_peer.hpp
|
||||
src/network/types.hpp
|
||||
src/online/current_user.hpp
|
||||
src/online/http_request.hpp
|
||||
src/online/messages.hpp
|
||||
src/online/online_profile.hpp
|
||||
src/online/profile_manager.hpp
|
||||
src/online/request.hpp
|
||||
src/online/request_manager.hpp
|
||||
src/online/server.hpp
|
||||
src/online/servers_manager.hpp
|
||||
src/online/xml_request.hpp
|
||||
src/physics/btKart.hpp
|
||||
src/physics/btKartRaycast.hpp
|
||||
src/physics/btUprightConstraint.hpp
|
||||
src/physics/irr_debug_drawer.hpp
|
||||
src/physics/kart_motion_state.hpp
|
||||
src/physics/physical_object.hpp
|
||||
src/physics/physics.hpp
|
||||
src/physics/stk_dynamics_world.hpp
|
||||
src/physics/triangle_mesh.hpp
|
||||
src/physics/user_pointer.hpp
|
||||
src/race/grand_prix_data.hpp
|
||||
src/race/grand_prix_manager.hpp
|
||||
src/race/highscore_manager.hpp
|
||||
src/race/highscores.hpp
|
||||
src/race/history.hpp
|
||||
src/race/race_manager.hpp
|
||||
src/replay/replay_base.hpp
|
||||
src/replay/replay_play.hpp
|
||||
src/replay/replay_recorder.hpp
|
||||
src/states_screens/addons_screen.hpp
|
||||
src/states_screens/arenas_screen.hpp
|
||||
src/states_screens/create_server_screen.hpp
|
||||
src/states_screens/credits.hpp
|
||||
src/states_screens/cutscene_gui.hpp
|
||||
src/states_screens/dialogs/add_device_dialog.hpp
|
||||
src/states_screens/dialogs/addons_loading.hpp
|
||||
src/states_screens/dialogs/change_password_dialog.hpp
|
||||
src/states_screens/dialogs/confirm_resolution_dialog.hpp
|
||||
src/states_screens/dialogs/custom_video_settings.hpp
|
||||
src/states_screens/dialogs/enter_player_name_dialog.hpp
|
||||
src/states_screens/dialogs/gp_info_dialog.hpp
|
||||
src/states_screens/dialogs/message_dialog.hpp
|
||||
src/states_screens/dialogs/notification_dialog.hpp
|
||||
src/states_screens/dialogs/player_info_dialog.hpp
|
||||
src/states_screens/dialogs/press_a_key_dialog.hpp
|
||||
src/states_screens/dialogs/race_paused_dialog.hpp
|
||||
src/states_screens/dialogs/recovery_dialog.hpp
|
||||
src/states_screens/dialogs/registration_dialog.hpp
|
||||
src/states_screens/dialogs/select_challenge.hpp
|
||||
src/states_screens/dialogs/server_info_dialog.hpp
|
||||
src/states_screens/dialogs/track_info_dialog.hpp
|
||||
src/states_screens/dialogs/tutorial_message_dialog.hpp
|
||||
src/states_screens/dialogs/user_info_dialog.hpp
|
||||
src/states_screens/dialogs/vote_dialog.hpp
|
||||
src/states_screens/easter_egg_screen.hpp
|
||||
src/states_screens/feature_unlocked.hpp
|
||||
src/states_screens/grand_prix_lose.hpp
|
||||
src/states_screens/grand_prix_win.hpp
|
||||
src/states_screens/guest_login_screen.hpp
|
||||
src/states_screens/help_screen_1.hpp
|
||||
src/states_screens/help_screen_2.hpp
|
||||
src/states_screens/help_screen_3.hpp
|
||||
src/states_screens/help_screen_4.hpp
|
||||
src/states_screens/kart_selection.hpp
|
||||
src/states_screens/login_screen.hpp
|
||||
src/states_screens/main_menu_screen.hpp
|
||||
src/states_screens/network_kart_selection.hpp
|
||||
src/states_screens/networking_lobby.hpp
|
||||
src/states_screens/offline_kart_selection.hpp
|
||||
src/states_screens/online_profile_achievements.hpp
|
||||
src/states_screens/online_profile_base.hpp
|
||||
src/states_screens/online_profile_friends.hpp
|
||||
src/states_screens/online_profile_overview.hpp
|
||||
src/states_screens/online_profile_settings.hpp
|
||||
src/states_screens/online_screen.hpp
|
||||
src/states_screens/online_user_search.hpp
|
||||
src/states_screens/options_screen_audio.hpp
|
||||
src/states_screens/options_screen_input.hpp
|
||||
src/states_screens/options_screen_input2.hpp
|
||||
src/states_screens/options_screen_players.hpp
|
||||
src/states_screens/options_screen_ui.hpp
|
||||
src/states_screens/options_screen_video.hpp
|
||||
src/states_screens/race_gui.hpp
|
||||
src/states_screens/race_gui_base.hpp
|
||||
src/states_screens/race_gui_overworld.hpp
|
||||
src/states_screens/race_result_gui.hpp
|
||||
src/states_screens/race_setup_screen.hpp
|
||||
src/states_screens/register_screen.hpp
|
||||
src/states_screens/server_selection.hpp
|
||||
src/states_screens/soccer_setup_screen.hpp
|
||||
src/states_screens/state_manager.hpp
|
||||
src/states_screens/story_mode_lobby.hpp
|
||||
src/states_screens/tracks_screen.hpp
|
||||
src/tinygettext/dictionary.hpp
|
||||
src/tinygettext/dictionary_manager.hpp
|
||||
src/tinygettext/file_system.hpp
|
||||
src/tinygettext/iconv.hpp
|
||||
src/tinygettext/language.hpp
|
||||
src/tinygettext/log_stream.hpp
|
||||
src/tinygettext/plural_forms.hpp
|
||||
src/tinygettext/po_parser.hpp
|
||||
src/tinygettext/stk_file_system.hpp
|
||||
src/tinygettext/tgt_log.hpp
|
||||
src/tinygettext/tinygettext.hpp
|
||||
src/tracks/ambient_light_sphere.hpp
|
||||
src/tracks/bezier_curve.hpp
|
||||
src/tracks/check_cannon.hpp
|
||||
src/tracks/check_goal.hpp
|
||||
src/tracks/check_lap.hpp
|
||||
src/tracks/check_line.hpp
|
||||
src/tracks/check_manager.hpp
|
||||
src/tracks/check_sphere.hpp
|
||||
src/tracks/check_structure.hpp
|
||||
src/tracks/graph_node.hpp
|
||||
src/tracks/lod_node_loader.hpp
|
||||
src/tracks/quad.hpp
|
||||
src/tracks/quad_graph.hpp
|
||||
src/tracks/quad_set.hpp
|
||||
src/tracks/terrain_info.hpp
|
||||
src/tracks/track.hpp
|
||||
src/tracks/track_manager.hpp
|
||||
src/tracks/track_object.hpp
|
||||
src/tracks/track_object_manager.hpp
|
||||
src/tracks/track_object_presentation.hpp
|
||||
src/tracks/track_sector.hpp
|
||||
src/utils/aligned_array.hpp
|
||||
src/utils/command_line.hpp
|
||||
src/utils/constants.hpp
|
||||
src/utils/crash_reporting.hpp
|
||||
src/utils/debug.hpp
|
||||
src/utils/helpers.hpp
|
||||
src/utils/interpolation_array.hpp
|
||||
src/utils/leak_check.hpp
|
||||
src/utils/log.hpp
|
||||
src/utils/no_copy.hpp
|
||||
src/utils/profiler.hpp
|
||||
src/utils/ptr_vector.hpp
|
||||
src/utils/random_generator.hpp
|
||||
src/utils/string_utils.hpp
|
||||
src/utils/synchronised.hpp
|
||||
src/utils/time.hpp
|
||||
src/utils/translation.hpp
|
||||
src/utils/types.hpp
|
||||
src/utils/vec3.hpp
|
||||
src/utils/vs.hpp
|
||||
)
|
||||
file(GLOB_RECURSE STK_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.cpp")
|
||||
file(GLOB_RECURSE STK_HEADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.hpp")
|
||||
file(GLOB_RECURSE STK_SHADERS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "data/shaders/*")
|
||||
@@ -23,6 +23,7 @@
|
||||
#include "achievements/achievement_info.hpp"
|
||||
#include "guiengine/dialog_queue.hpp"
|
||||
#include "io/utf_writer.hpp"
|
||||
#include "config/player_manager.hpp"
|
||||
#include "states_screens/dialogs/notification_dialog.hpp"
|
||||
#include "utils/log.hpp"
|
||||
#include "utils/translation.hpp"
|
||||
@@ -179,6 +180,15 @@ void Achievement::onRaceEnd()
|
||||
reset();
|
||||
} // onRaceEnd
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/** Called at the end of a lap to potentially reset values.
|
||||
*/
|
||||
void Achievement::onLapEnd()
|
||||
{
|
||||
if (m_achievement_info->needsResetAfterLap())
|
||||
reset();
|
||||
} // onLapEnd
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/** Checks if this achievement has been achieved.
|
||||
*/
|
||||
@@ -195,8 +205,16 @@ void Achievement::check()
|
||||
GUIEngine::DialogQueue::get()->pushDialog(
|
||||
new NotificationDialog(NotificationDialog::T_Achievements, s));
|
||||
|
||||
//send to server
|
||||
Online::CurrentUser::get()->onAchieving(m_id);
|
||||
// Sends a confirmation to the server that an achievement has been
|
||||
// completed, if a user is signed in.
|
||||
if (PlayerManager::isCurrentLoggedIn())
|
||||
{
|
||||
Online::HTTPRequest * request = new Online::HTTPRequest(true);
|
||||
PlayerManager::setUserDetails(request, "achieving");
|
||||
request->addParameter("achievementid", m_id);
|
||||
request->queue();
|
||||
}
|
||||
|
||||
m_achieved = true;
|
||||
}
|
||||
} // check
|
||||
|
||||
@@ -35,7 +35,7 @@ class XMLNode;
|
||||
* storage for state information by a generic key-value mapping. The values
|
||||
* are stored as strings, but can be used to store numerical values. E.g.
|
||||
* you can call increase("key", 10) for an achievement, which will convert
|
||||
* the string to int, add 10, then convert the result back to string for
|
||||
* the string to int, add 10, then convert the result back to string for
|
||||
* storage.
|
||||
* \ingroup achievements
|
||||
*/
|
||||
@@ -70,6 +70,7 @@ public:
|
||||
virtual void reset();
|
||||
virtual irr::core::stringw getProgressAsString() const;
|
||||
void onRaceEnd();
|
||||
void onLapEnd();
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the id of this achievement. */
|
||||
uint32_t getID() const { return m_id; }
|
||||
@@ -88,4 +89,4 @@ public:
|
||||
return m_progress_map;
|
||||
} // getProgress
|
||||
}; // class Achievement
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
*/
|
||||
AchievementInfo::AchievementInfo(const XMLNode * input)
|
||||
{
|
||||
m_reset_after_race = false;
|
||||
m_reset_type = NEVER;
|
||||
m_id = 0;
|
||||
m_title = "";
|
||||
m_description = "";
|
||||
@@ -41,16 +41,26 @@ AchievementInfo::AchievementInfo(const XMLNode * input)
|
||||
input->get("description", &m_description );
|
||||
if (!all)
|
||||
{
|
||||
Log::error("AchievementInfo",
|
||||
Log::error("AchievementInfo",
|
||||
"Not all necessary values for achievement defined.");
|
||||
Log::error("AchievementInfo",
|
||||
"ID %d title '%s' description '%s'", m_id, m_title.c_str(),
|
||||
m_description.c_str());
|
||||
}
|
||||
input->get("reset-after-race", &m_reset_after_race);
|
||||
|
||||
m_check_type = AC_ALL_AT_LEAST;
|
||||
// Load the reset-type
|
||||
std::string s;
|
||||
input->get("reset-type", &s);
|
||||
if (s == "race")
|
||||
m_reset_type = AFTER_RACE;
|
||||
else if (s == "lap")
|
||||
m_reset_type = AFTER_LAP;
|
||||
else if (s != "never")
|
||||
Log::warn("AchievementInfo", "Achievement check type '%s' unknown.",
|
||||
s.c_str());
|
||||
|
||||
// Load check-type
|
||||
m_check_type = AC_ALL_AT_LEAST;
|
||||
input->get("check-type", &s);
|
||||
if (s == "all-at-least")
|
||||
m_check_type = AC_ALL_AT_LEAST;
|
||||
@@ -70,7 +80,7 @@ AchievementInfo::AchievementInfo(const XMLNode * input)
|
||||
m_goal_values[key] = goal;
|
||||
}
|
||||
if (m_goal_values.size() != input->getNumNodes())
|
||||
Log::fatal("AchievementInfo",
|
||||
Log::fatal("AchievementInfo",
|
||||
"Duplicate keys for the entries of a MapAchievement found.");
|
||||
|
||||
if (m_check_type == AC_ONE_AT_LEAST)
|
||||
@@ -146,7 +156,7 @@ bool AchievementInfo::checkCompletion(Achievement * achievement) const
|
||||
}
|
||||
// ----------------------------------------------------------------------------
|
||||
int AchievementInfo::getGoalValue(const std::string &key) const
|
||||
{
|
||||
{
|
||||
std::map<std::string, int>::const_iterator it;
|
||||
it = m_goal_values.find(key);
|
||||
if (it != m_goal_values.end())
|
||||
|
||||
@@ -49,7 +49,8 @@ public:
|
||||
ACHIEVE_MARATHONER = 4,
|
||||
ACHIEVE_SKIDDING = 5,
|
||||
ACHIEVE_GOLD_DRIVER = 6,
|
||||
ACHIEVE_POWERUP_LOVER = 7
|
||||
ACHIEVE_POWERUP_LOVER = 7,
|
||||
ACHIEVE_UNSTOPPABLE = 8
|
||||
};
|
||||
/** Achievement check type:
|
||||
* ALL_AT_LEAST: All goal values must be reached (or exceeded).
|
||||
@@ -60,6 +61,17 @@ public:
|
||||
AC_ALL_AT_LEAST,
|
||||
AC_ONE_AT_LEAST
|
||||
};
|
||||
/** Achievement reset type:
|
||||
* AFTER_LAP: Achievement needs to be reset after each lap.
|
||||
* AFTER_RACE: Achievement needs to be reset after each race.
|
||||
* NEVER: Achievement does not need to be reset
|
||||
*/
|
||||
enum ResetType
|
||||
{
|
||||
AFTER_LAP = 1,
|
||||
AFTER_RACE = 2,
|
||||
NEVER = 3
|
||||
};
|
||||
|
||||
private:
|
||||
/** The id of this Achievement. */
|
||||
@@ -77,8 +89,8 @@ private:
|
||||
/** The target values needed to be reached. */
|
||||
std::map<std::string, int> m_goal_values;
|
||||
|
||||
/** True if the achievement needs to be reset after each race. */
|
||||
bool m_reset_after_race;
|
||||
/** Determines when the achievement needs to be reset */
|
||||
ResetType m_reset_type;
|
||||
|
||||
public:
|
||||
AchievementInfo(const XMLNode * input);
|
||||
@@ -98,7 +110,9 @@ public:
|
||||
/** Returns the title of this achievement. */
|
||||
irr::core::stringw getTitle() const { return m_title; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool needsResetAfterRace() const { return m_reset_after_race; }
|
||||
bool needsResetAfterRace() const { return m_reset_type == AFTER_RACE; }
|
||||
// ------------------------------------------------------------------------
|
||||
bool needsResetAfterLap() const { return m_reset_type == AFTER_LAP; }
|
||||
// ------------------------------------------------------------------------
|
||||
/** Returns the check type for this achievement. */
|
||||
AchievementCheckType getCheckType() const { return m_check_type; }
|
||||
|
||||
@@ -74,14 +74,14 @@ AchievementsManager::~AchievementsManager()
|
||||
* information for a single player.
|
||||
* \param node The XML of saved data, or NULL if no saved data exists.
|
||||
*/
|
||||
AchievementsStatus*
|
||||
AchievementsStatus*
|
||||
AchievementsManager::createAchievementsStatus(const XMLNode *node)
|
||||
{
|
||||
AchievementsStatus *status = new AchievementsStatus();
|
||||
|
||||
// First add all achievements, before restoring the saved data.
|
||||
std::map<uint32_t, AchievementInfo *>::const_iterator it;
|
||||
for (it = m_achievements_info.begin();
|
||||
for (it = m_achievements_info.begin();
|
||||
it != m_achievements_info.end(); ++it)
|
||||
{
|
||||
Achievement * achievement;
|
||||
@@ -95,18 +95,10 @@ AchievementsStatus*
|
||||
return status;
|
||||
} // createAchievementStatus
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
void AchievementsManager::onRaceEnd()
|
||||
{
|
||||
//reset all values that need to be reset
|
||||
PlayerManager::get()->getCurrentPlayer()
|
||||
->getAchievementsStatus()->onRaceEnd();
|
||||
} // onRaceEnd
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
AchievementInfo * AchievementsManager::getAchievementInfo(uint32_t id) const
|
||||
{
|
||||
std::map<uint32_t, AchievementInfo*>::const_iterator info =
|
||||
std::map<uint32_t, AchievementInfo*>::const_iterator info =
|
||||
m_achievements_info.find(id);
|
||||
if (info != m_achievements_info.end())
|
||||
return info->second;
|
||||
|
||||
@@ -71,13 +71,12 @@ public:
|
||||
} // destroy
|
||||
// ========================================================================
|
||||
|
||||
void onRaceEnd();
|
||||
AchievementInfo* getAchievementInfo(uint32_t id) const;
|
||||
AchievementsStatus* createAchievementsStatus(const XMLNode *node=NULL);
|
||||
// ------------------------------------------------------------------------
|
||||
const std::map<uint32_t, AchievementInfo *> & getAllInfo()
|
||||
{
|
||||
return m_achievements_info;
|
||||
return m_achievements_info;
|
||||
} // getAllInfo
|
||||
|
||||
}; // class AchievementsManager
|
||||
|
||||
@@ -132,3 +132,12 @@ void AchievementsStatus::onRaceEnd()
|
||||
iter->second->onRaceEnd();
|
||||
}
|
||||
} // onRaceEnd
|
||||
|
||||
void AchievementsStatus::onLapEnd()
|
||||
{
|
||||
//reset all values that need to be reset
|
||||
std::map<uint32_t, Achievement *>::iterator iter;
|
||||
for (iter = m_achievements.begin(); iter != m_achievements.end(); ++iter) {
|
||||
iter->second->onLapEnd();
|
||||
}
|
||||
} // onLapEnd
|
||||
|
||||
@@ -20,10 +20,10 @@
|
||||
#ifndef HEADER_ACHIEVEMENTS_SLOT_HPP
|
||||
#define HEADER_ACHIEVEMENTS_SLOT_HPP
|
||||
|
||||
#include "utils/types.hpp"
|
||||
#include "achievements/achievement.hpp"
|
||||
#include "online/request_manager.hpp"
|
||||
#include "online/xml_request.hpp"
|
||||
#include "utils/types.hpp"
|
||||
|
||||
#include <irrString.h>
|
||||
#include <string>
|
||||
@@ -60,8 +60,9 @@ public :
|
||||
void add(Achievement *achievement);
|
||||
void sync(const std::vector<uint32_t> & achieved_ids);
|
||||
void onRaceEnd();
|
||||
void onLapEnd();
|
||||
// ------------------------------------------------------------------------
|
||||
const std::map<uint32_t, Achievement *>& getAllAchievements()
|
||||
const std::map<uint32_t, Achievement *>& getAllAchievements()
|
||||
{
|
||||
return m_achievements;
|
||||
}
|
||||
|
||||
@@ -179,7 +179,7 @@ bool Addon::testIncluded(const std::string &min_ver, const std::string &max_ver)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
/**
|
||||
/**
|
||||
* \brief Filter the add-on with a list of words.
|
||||
* \param words A list of words separated by ' '.
|
||||
* \return true if the add-on contains one of the words, otherwise false.
|
||||
|
||||
@@ -106,7 +106,7 @@ void AddonsManager::init(const XMLNode *xml,
|
||||
include->get("mtime", &tmp);
|
||||
mtime = tmp;
|
||||
|
||||
bool download =
|
||||
bool download =
|
||||
( mtime > UserConfigParams::m_addons_last_updated +frequency ||
|
||||
force_refresh ||
|
||||
!file_manager->fileExists(filename) )
|
||||
@@ -116,7 +116,7 @@ void AddonsManager::init(const XMLNode *xml,
|
||||
{
|
||||
Log::info("NetworkHttp", "Downloading updated addons.xml");
|
||||
Online::HTTPRequest *download_request = new Online::HTTPRequest("addons.xml");
|
||||
download_request->setURL(addon_list_url);
|
||||
download_request->setURL(addon_list_url);
|
||||
download_request->executeNow();
|
||||
if(download_request->hadDownloadError())
|
||||
{
|
||||
@@ -375,7 +375,7 @@ void AddonsManager::downloadIcons()
|
||||
m_addon->setIconReady();
|
||||
} // callback
|
||||
public:
|
||||
IconRequest(const std::string &filename,
|
||||
IconRequest(const std::string &filename,
|
||||
const std::string &url,
|
||||
Addon *addon ) : HTTPRequest(filename, true, 1)
|
||||
{
|
||||
@@ -558,8 +558,8 @@ bool AddonsManager::uninstall(const Addon &addon)
|
||||
// some files were successfully removed. Since we can not
|
||||
// know if the addon is still functional, better remove it.
|
||||
// On the other hand, in case of a problem the user will have
|
||||
// the option in the GUI to try again. In this case
|
||||
// removeTrack/Kart would not find the addon and assert. So
|
||||
// the option in the GUI to try again. In this case
|
||||
// removeTrack/Kart would not find the addon and assert. So
|
||||
// check first if the track is still known.
|
||||
if(addon.getType()=="kart")
|
||||
{
|
||||
|
||||
@@ -52,7 +52,7 @@ NewsManager::~NewsManager()
|
||||
* separate thread to execute downloadNews() - which (if necessary) the
|
||||
* news.xml file and updating the list of news messages. It also initialises
|
||||
* the addons manager (which can trigger another download of news.xml).
|
||||
* \param force_refresh Re-download news.xml, even if
|
||||
* \param force_refresh Re-download news.xml, even if
|
||||
*/
|
||||
void NewsManager::init(bool force_refresh)
|
||||
{
|
||||
@@ -102,7 +102,7 @@ void* NewsManager::downloadNews(void *obj)
|
||||
bool download = ( UserConfigParams::m_news_last_updated==0 ||
|
||||
UserConfigParams::m_news_last_updated
|
||||
+UserConfigParams::m_news_frequency
|
||||
< StkTime::getTimeSinceEpoch() ||
|
||||
< StkTime::getTimeSinceEpoch() ||
|
||||
me->m_force_refresh ||
|
||||
!news_exists )
|
||||
&& UserConfigParams::m_internet_status==RequestManager::IPERM_ALLOWED;
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
|
||||
#include "io/xml_node.hpp"
|
||||
#include "utils/vs.hpp"
|
||||
#include "utils/log.hpp"
|
||||
|
||||
#include <string.h>
|
||||
#include <algorithm>
|
||||
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "audio/music_manager.hpp"
|
||||
#include "audio/sfx_manager.hpp"
|
||||
#include "utils/constants.hpp"
|
||||
#include "utils/log.hpp"
|
||||
|
||||
MusicOggStream::MusicOggStream()
|
||||
{
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
#include "config/user_config.hpp"
|
||||
#include "io/file_manager.hpp"
|
||||
#include "utils/constants.hpp"
|
||||
#include "utils/log.hpp"
|
||||
|
||||
#if HAVE_OGGVORBIS
|
||||
# include <vorbis/codec.h>
|
||||
|
||||
@@ -262,7 +262,7 @@ SFXBuffer* SFXManager::loadSingleSfx(const XMLNode* node,
|
||||
|
||||
// Only use the filename if no full path is specified. This is used
|
||||
// to load terrain specific sfx.
|
||||
const std::string full_path = (path == "")
|
||||
const std::string full_path = (path == "")
|
||||
? file_manager->getAsset(FileManager::SFX,filename)
|
||||
: path;
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ class XMLNode;
|
||||
* challenge is not possible yet (inactive), active (i.e. user can try to
|
||||
* solve it), or solved. This status is stored for each difficulty level.
|
||||
* This data is saved to and loaded from the players.xml file.
|
||||
* A StoryModeStatus instance will store an array of ChallengeStatuses,
|
||||
* A StoryModeStatus instance will store an array of ChallengeStatuses,
|
||||
* one for each Challenge in STK.
|
||||
*
|
||||
* \ingroup challenges
|
||||
|
||||