#include "submodules/anyascii/impl/c/anyascii.c"
#define RESET_MAX_TIME 45.0
+VG_STATIC v3f TEMP_BOARD_0, TEMP_BOARD_1;
enum menu_controller_type
{
skate_camera_thirdperson( player, s, av, cam );
else
skate_camera_firstperson( player, s, av, cam );
+
+ /* FIXME: Organize this. Its int wrong fucking place */
+ v3f vp0 = {0.0f,0.1f, 0.6f},
+ vp1 = {0.0f,0.1f,-0.6f};
+
+ m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp0, TEMP_BOARD_0 );
+ m4x3_mulv( av->sk.final_mtx[ av->id_board ], vp1, TEMP_BOARD_1 );
}
VG_STATIC void player_skate_transport( player_interface *player,
.static_src =
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexMain;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"uniform vec3 uCamera;\n"
"uniform vec4 uPlane;\n"
"\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 13 0 \n"
+"#line 15 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 14 0 \n"
+"#line 16 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_alphatest_uPvmPrev;
static GLuint _uniform_alphatest_uTexGarbage;
static GLuint _uniform_alphatest_uTexMain;
+static GLuint _uniform_alphatest_uBoard0;
+static GLuint _uniform_alphatest_uBoard1;
static GLuint _uniform_alphatest_uCamera;
static GLuint _uniform_alphatest_uPlane;
static GLuint _uniform_alphatest_g_world_depth;
static void shader_alphatest_uTexMain(int i){
glUniform1i(_uniform_alphatest_uTexMain,i);
}
+static void shader_alphatest_uBoard0(v3f v){
+ glUniform3fv(_uniform_alphatest_uBoard0,1,v);
+}
+static void shader_alphatest_uBoard1(v3f v){
+ glUniform3fv(_uniform_alphatest_uBoard1,1,v);
+}
static void shader_alphatest_uCamera(v3f v){
glUniform3fv(_uniform_alphatest_uCamera,1,v);
}
_uniform_alphatest_uPvmPrev = glGetUniformLocation( _shader_alphatest.id, "uPvmPrev" );
_uniform_alphatest_uTexGarbage = glGetUniformLocation( _shader_alphatest.id, "uTexGarbage" );
_uniform_alphatest_uTexMain = glGetUniformLocation( _shader_alphatest.id, "uTexMain" );
+ _uniform_alphatest_uBoard0 = glGetUniformLocation( _shader_alphatest.id, "uBoard0" );
+ _uniform_alphatest_uBoard1 = glGetUniformLocation( _shader_alphatest.id, "uBoard1" );
_uniform_alphatest_uCamera = glGetUniformLocation( _shader_alphatest.id, "uCamera" );
_uniform_alphatest_uPlane = glGetUniformLocation( _shader_alphatest.id, "uPlane" );
_uniform_alphatest_g_world_depth = glGetUniformLocation( _shader_alphatest.id, "g_world_depth" );
return mix( vfrag, g_ambient_colour.rgb, faccum );
}
+// FIXME
+float sdLine( vec3 p, vec3 a, vec3 b )
+{
+ vec3 pa = p - a;
+ vec3 ba = b - a;
+
+ float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );
+ return length( pa - ba*h );
+}
+
vec3 do_light_shadowing( vec3 vfrag )
{
if( g_shadow_samples == 0 )
famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);
famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);
famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);
+
+ // player shadow
+ float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );
+ float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );
+ player_shadow *= player_shadow*player_shadow*player_shadow;
+
+ famt = max( player_shadow*0.6, famt );
return mix( vfrag, g_ambient_colour.rgb, famt );
}
out vec4 FragColor;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
"out vec4 FragColor;\n"
"\n"
"uniform vec3 uCamera;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 12 0 \n"
+"#line 14 0 \n"
"\n"
"// Water blending\n"
"// ==============\n"
static GLuint _uniform_gpos_uPv;
static GLuint _uniform_gpos_uPvmPrev;
static GLuint _uniform_gpos_uCamera;
+static GLuint _uniform_gpos_uBoard0;
+static GLuint _uniform_gpos_uBoard1;
static GLuint _uniform_gpos_g_world_depth;
static void shader_gpos_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_gpos_uMdl,1,GL_FALSE,(float*)m);
static void shader_gpos_uCamera(v3f v){
glUniform3fv(_uniform_gpos_uCamera,1,v);
}
+static void shader_gpos_uBoard0(v3f v){
+ glUniform3fv(_uniform_gpos_uBoard0,1,v);
+}
+static void shader_gpos_uBoard1(v3f v){
+ glUniform3fv(_uniform_gpos_uBoard1,1,v);
+}
static void shader_gpos_g_world_depth(int i){
glUniform1i(_uniform_gpos_g_world_depth,i);
}
_uniform_gpos_uPv = glGetUniformLocation( _shader_gpos.id, "uPv" );
_uniform_gpos_uPvmPrev = glGetUniformLocation( _shader_gpos.id, "uPvmPrev" );
_uniform_gpos_uCamera = glGetUniformLocation( _shader_gpos.id, "uCamera" );
+ _uniform_gpos_uBoard0 = glGetUniformLocation( _shader_gpos.id, "uBoard0" );
+ _uniform_gpos_uBoard1 = glGetUniformLocation( _shader_gpos.id, "uBoard1" );
_uniform_gpos_g_world_depth = glGetUniformLocation( _shader_gpos.id, "g_world_depth" );
}
#endif /* SHADER_gpos_H */
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
uniform vec4 uColour;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
"uniform vec4 uColour;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 13 0 \n"
+"#line 15 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 14 0 \n"
+"#line 16 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_route_uTexGradients;
static GLuint _uniform_route_uCamera;
static GLuint _uniform_route_uColour;
+static GLuint _uniform_route_uBoard0;
+static GLuint _uniform_route_uBoard1;
static GLuint _uniform_route_g_world_depth;
static void shader_route_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_route_uMdl,1,GL_FALSE,(float*)m);
static void shader_route_uColour(v4f v){
glUniform4fv(_uniform_route_uColour,1,v);
}
+static void shader_route_uBoard0(v3f v){
+ glUniform3fv(_uniform_route_uBoard0,1,v);
+}
+static void shader_route_uBoard1(v3f v){
+ glUniform3fv(_uniform_route_uBoard1,1,v);
+}
static void shader_route_g_world_depth(int i){
glUniform1i(_uniform_route_g_world_depth,i);
}
_uniform_route_uTexGradients = glGetUniformLocation( _shader_route.id, "uTexGradients" );
_uniform_route_uCamera = glGetUniformLocation( _shader_route.id, "uCamera" );
_uniform_route_uColour = glGetUniformLocation( _shader_route.id, "uColour" );
+ _uniform_route_uBoard0 = glGetUniformLocation( _shader_route.id, "uBoard0" );
+ _uniform_route_uBoard1 = glGetUniformLocation( _shader_route.id, "uBoard1" );
_uniform_route_g_world_depth = glGetUniformLocation( _shader_route.id, "g_world_depth" );
}
#endif /* SHADER_route_H */
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 12 0 \n"
+"#line 14 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 13 0 \n"
+"#line 15 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_scoretext_uTexGarbage;
static GLuint _uniform_scoretext_uTexGradients;
static GLuint _uniform_scoretext_uCamera;
+static GLuint _uniform_scoretext_uBoard0;
+static GLuint _uniform_scoretext_uBoard1;
static GLuint _uniform_scoretext_g_world_depth;
static void shader_scoretext_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_scoretext_uMdl,1,GL_FALSE,(float*)m);
static void shader_scoretext_uCamera(v3f v){
glUniform3fv(_uniform_scoretext_uCamera,1,v);
}
+static void shader_scoretext_uBoard0(v3f v){
+ glUniform3fv(_uniform_scoretext_uBoard0,1,v);
+}
+static void shader_scoretext_uBoard1(v3f v){
+ glUniform3fv(_uniform_scoretext_uBoard1,1,v);
+}
static void shader_scoretext_g_world_depth(int i){
glUniform1i(_uniform_scoretext_g_world_depth,i);
}
_uniform_scoretext_uTexGarbage = glGetUniformLocation( _shader_scoretext.id, "uTexGarbage" );
_uniform_scoretext_uTexGradients = glGetUniformLocation( _shader_scoretext.id, "uTexGradients" );
_uniform_scoretext_uCamera = glGetUniformLocation( _shader_scoretext.id, "uCamera" );
+ _uniform_scoretext_uBoard0 = glGetUniformLocation( _shader_scoretext.id, "uBoard0" );
+ _uniform_scoretext_uBoard1 = glGetUniformLocation( _shader_scoretext.id, "uBoard1" );
_uniform_scoretext_g_world_depth = glGetUniformLocation( _shader_scoretext.id, "g_world_depth" );
}
#endif /* SHADER_scoretext_H */
uniform sampler2D uTexMain;
uniform vec3 uCamera;
uniform vec4 uPlane;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
"uniform sampler2D uTexMain;\n"
"uniform vec3 uCamera;\n"
"uniform vec4 uPlane;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 13 0 \n"
+"#line 15 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 14 0 \n"
+"#line 16 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_standard_uTexMain;
static GLuint _uniform_standard_uCamera;
static GLuint _uniform_standard_uPlane;
+static GLuint _uniform_standard_uBoard0;
+static GLuint _uniform_standard_uBoard1;
static GLuint _uniform_standard_g_world_depth;
static void shader_standard_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_standard_uMdl,1,GL_FALSE,(float*)m);
static void shader_standard_uPlane(v4f v){
glUniform4fv(_uniform_standard_uPlane,1,v);
}
+static void shader_standard_uBoard0(v3f v){
+ glUniform3fv(_uniform_standard_uBoard0,1,v);
+}
+static void shader_standard_uBoard1(v3f v){
+ glUniform3fv(_uniform_standard_uBoard1,1,v);
+}
static void shader_standard_g_world_depth(int i){
glUniform1i(_uniform_standard_g_world_depth,i);
}
_uniform_standard_uTexMain = glGetUniformLocation( _shader_standard.id, "uTexMain" );
_uniform_standard_uCamera = glGetUniformLocation( _shader_standard.id, "uCamera" );
_uniform_standard_uPlane = glGetUniformLocation( _shader_standard.id, "uPlane" );
+ _uniform_standard_uBoard0 = glGetUniformLocation( _shader_standard.id, "uBoard0" );
+ _uniform_standard_uBoard1 = glGetUniformLocation( _shader_standard.id, "uBoard1" );
_uniform_standard_g_world_depth = glGetUniformLocation( _shader_standard.id, "g_world_depth" );
}
#endif /* SHADER_standard_H */
uniform sampler2D uTexGarbage;
uniform sampler2D uTexMain;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uCamera;
uniform vec4 uPlane;
uniform vec3 uCamera;
uniform vec3 uSandColour;
uniform vec2 uBlendOffset;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
"uniform vec3 uCamera;\n"
"uniform vec3 uSandColour;\n"
"uniform vec2 uBlendOffset;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 14 0 \n"
+"#line 16 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 15 0 \n"
+"#line 17 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_terrain_uCamera;
static GLuint _uniform_terrain_uSandColour;
static GLuint _uniform_terrain_uBlendOffset;
+static GLuint _uniform_terrain_uBoard0;
+static GLuint _uniform_terrain_uBoard1;
static GLuint _uniform_terrain_g_world_depth;
static void shader_terrain_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_terrain_uMdl,1,GL_FALSE,(float*)m);
static void shader_terrain_uBlendOffset(v2f v){
glUniform2fv(_uniform_terrain_uBlendOffset,1,v);
}
+static void shader_terrain_uBoard0(v3f v){
+ glUniform3fv(_uniform_terrain_uBoard0,1,v);
+}
+static void shader_terrain_uBoard1(v3f v){
+ glUniform3fv(_uniform_terrain_uBoard1,1,v);
+}
static void shader_terrain_g_world_depth(int i){
glUniform1i(_uniform_terrain_g_world_depth,i);
}
_uniform_terrain_uCamera = glGetUniformLocation( _shader_terrain.id, "uCamera" );
_uniform_terrain_uSandColour = glGetUniformLocation( _shader_terrain.id, "uSandColour" );
_uniform_terrain_uBlendOffset = glGetUniformLocation( _shader_terrain.id, "uBlendOffset" );
+ _uniform_terrain_uBoard0 = glGetUniformLocation( _shader_terrain.id, "uBoard0" );
+ _uniform_terrain_uBoard1 = glGetUniformLocation( _shader_terrain.id, "uBoard1" );
_uniform_terrain_g_world_depth = glGetUniformLocation( _shader_terrain.id, "g_world_depth" );
}
#endif /* SHADER_terrain_H */
uniform sampler2D uTexGarbage;
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 12 0 \n"
+"#line 14 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 13 0 \n"
+"#line 15 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_vblend_uTexGarbage;
static GLuint _uniform_vblend_uTexGradients;
static GLuint _uniform_vblend_uCamera;
+static GLuint _uniform_vblend_uBoard0;
+static GLuint _uniform_vblend_uBoard1;
static GLuint _uniform_vblend_g_world_depth;
static void shader_vblend_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_vblend_uMdl,1,GL_FALSE,(float*)m);
static void shader_vblend_uCamera(v3f v){
glUniform3fv(_uniform_vblend_uCamera,1,v);
}
+static void shader_vblend_uBoard0(v3f v){
+ glUniform3fv(_uniform_vblend_uBoard0,1,v);
+}
+static void shader_vblend_uBoard1(v3f v){
+ glUniform3fv(_uniform_vblend_uBoard1,1,v);
+}
static void shader_vblend_g_world_depth(int i){
glUniform1i(_uniform_vblend_g_world_depth,i);
}
_uniform_vblend_uTexGarbage = glGetUniformLocation( _shader_vblend.id, "uTexGarbage" );
_uniform_vblend_uTexGradients = glGetUniformLocation( _shader_vblend.id, "uTexGradients" );
_uniform_vblend_uCamera = glGetUniformLocation( _shader_vblend.id, "uCamera" );
+ _uniform_vblend_uBoard0 = glGetUniformLocation( _shader_vblend.id, "uBoard0" );
+ _uniform_vblend_uBoard1 = glGetUniformLocation( _shader_vblend.id, "uBoard1" );
_uniform_vblend_g_world_depth = glGetUniformLocation( _shader_vblend.id, "g_world_depth" );
}
#endif /* SHADER_vblend_H */
uniform sampler2D uTexMain;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
.static_src =
"uniform sampler2D uTexMain;\n"
"uniform vec3 uCamera;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 11 0 \n"
+"#line 13 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 12 0 \n"
+"#line 14 0 \n"
"\n"
"void main()\n"
"{\n"
static GLuint _uniform_viewchar_uTransforms;
static GLuint _uniform_viewchar_uTexMain;
static GLuint _uniform_viewchar_uCamera;
+static GLuint _uniform_viewchar_uBoard0;
+static GLuint _uniform_viewchar_uBoard1;
static GLuint _uniform_viewchar_g_world_depth;
static void shader_viewchar_uPv(m4x4f m){
glUniformMatrix4fv(_uniform_viewchar_uPv,1,GL_FALSE,(float*)m);
static void shader_viewchar_uCamera(v3f v){
glUniform3fv(_uniform_viewchar_uCamera,1,v);
}
+static void shader_viewchar_uBoard0(v3f v){
+ glUniform3fv(_uniform_viewchar_uBoard0,1,v);
+}
+static void shader_viewchar_uBoard1(v3f v){
+ glUniform3fv(_uniform_viewchar_uBoard1,1,v);
+}
static void shader_viewchar_g_world_depth(int i){
glUniform1i(_uniform_viewchar_g_world_depth,i);
}
_uniform_viewchar_uTransforms = glGetUniformLocation( _shader_viewchar.id, "uTransforms" );
_uniform_viewchar_uTexMain = glGetUniformLocation( _shader_viewchar.id, "uTexMain" );
_uniform_viewchar_uCamera = glGetUniformLocation( _shader_viewchar.id, "uCamera" );
+ _uniform_viewchar_uBoard0 = glGetUniformLocation( _shader_viewchar.id, "uBoard0" );
+ _uniform_viewchar_uBoard1 = glGetUniformLocation( _shader_viewchar.id, "uBoard1" );
_uniform_viewchar_g_world_depth = glGetUniformLocation( _shader_viewchar.id, "g_world_depth" );
}
#endif /* SHADER_viewchar_H */
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
"uniform float uTime;\n"
"uniform vec3 uCamera;\n"
"uniform float uSurfaceY;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"uniform vec3 uShoreColour;\n"
"uniform vec3 uOceanColour;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 20 0 \n"
+"#line 22 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 21 0 \n"
+"#line 23 0 \n"
"\n"
"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, \n"
" vec4 beneath, vec4 above )\n"
static GLuint _uniform_water_uTime;
static GLuint _uniform_water_uCamera;
static GLuint _uniform_water_uSurfaceY;
+static GLuint _uniform_water_uBoard0;
+static GLuint _uniform_water_uBoard1;
static GLuint _uniform_water_uShoreColour;
static GLuint _uniform_water_uOceanColour;
static GLuint _uniform_water_g_world_depth;
static void shader_water_uSurfaceY(float f){
glUniform1f(_uniform_water_uSurfaceY,f);
}
+static void shader_water_uBoard0(v3f v){
+ glUniform3fv(_uniform_water_uBoard0,1,v);
+}
+static void shader_water_uBoard1(v3f v){
+ glUniform3fv(_uniform_water_uBoard1,1,v);
+}
static void shader_water_uShoreColour(v3f v){
glUniform3fv(_uniform_water_uShoreColour,1,v);
}
_uniform_water_uTime = glGetUniformLocation( _shader_water.id, "uTime" );
_uniform_water_uCamera = glGetUniformLocation( _shader_water.id, "uCamera" );
_uniform_water_uSurfaceY = glGetUniformLocation( _shader_water.id, "uSurfaceY" );
+ _uniform_water_uBoard0 = glGetUniformLocation( _shader_water.id, "uBoard0" );
+ _uniform_water_uBoard1 = glGetUniformLocation( _shader_water.id, "uBoard1" );
_uniform_water_uShoreColour = glGetUniformLocation( _shader_water.id, "uShoreColour" );
_uniform_water_uOceanColour = glGetUniformLocation( _shader_water.id, "uOceanColour" );
_uniform_water_g_world_depth = glGetUniformLocation( _shader_water.id, "g_world_depth" );
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
"uniform float uTime;\n"
"uniform vec3 uCamera;\n"
"uniform float uSurfaceY;\n"
+"uniform vec3 uBoard0;\n"
+"uniform vec3 uBoard1;\n"
"\n"
"uniform vec3 uShoreColour;\n"
"uniform vec3 uOceanColour;\n"
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\n"
"\n"
+"// FIXME\n"
+"float sdLine( vec3 p, vec3 a, vec3 b )\n"
+"{\n"
+" vec3 pa = p - a;\n"
+" vec3 ba = b - a;\n"
+"\n"
+" float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 );\n"
+" return length( pa - ba*h );\n"
+"}\n"
+"\n"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
" famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n"
" famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n"
" famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n"
+"\n"
+" // player shadow\n"
+" float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 );\n"
+" float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 );\n"
+" player_shadow *= player_shadow*player_shadow*player_shadow;\n"
+"\n"
+" famt = max( player_shadow*0.6, famt );\n"
" return mix( vfrag, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 17 0 \n"
+"#line 19 0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 18 0 \n"
+"#line 20 0 \n"
"\n"
"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue )\n"
"{\n"
static GLuint _uniform_water_fast_uTime;
static GLuint _uniform_water_fast_uCamera;
static GLuint _uniform_water_fast_uSurfaceY;
+static GLuint _uniform_water_fast_uBoard0;
+static GLuint _uniform_water_fast_uBoard1;
static GLuint _uniform_water_fast_uShoreColour;
static GLuint _uniform_water_fast_uOceanColour;
static GLuint _uniform_water_fast_g_world_depth;
static void shader_water_fast_uSurfaceY(float f){
glUniform1f(_uniform_water_fast_uSurfaceY,f);
}
+static void shader_water_fast_uBoard0(v3f v){
+ glUniform3fv(_uniform_water_fast_uBoard0,1,v);
+}
+static void shader_water_fast_uBoard1(v3f v){
+ glUniform3fv(_uniform_water_fast_uBoard1,1,v);
+}
static void shader_water_fast_uShoreColour(v3f v){
glUniform3fv(_uniform_water_fast_uShoreColour,1,v);
}
_uniform_water_fast_uTime = glGetUniformLocation( _shader_water_fast.id, "uTime" );
_uniform_water_fast_uCamera = glGetUniformLocation( _shader_water_fast.id, "uCamera" );
_uniform_water_fast_uSurfaceY = glGetUniformLocation( _shader_water_fast.id, "uSurfaceY" );
+ _uniform_water_fast_uBoard0 = glGetUniformLocation( _shader_water_fast.id, "uBoard0" );
+ _uniform_water_fast_uBoard1 = glGetUniformLocation( _shader_water_fast.id, "uBoard1" );
_uniform_water_fast_uShoreColour = glGetUniformLocation( _shader_water_fast.id, "uShoreColour" );
_uniform_water_fast_uOceanColour = glGetUniformLocation( _shader_water_fast.id, "uOceanColour" );
_uniform_water_fast_g_world_depth = glGetUniformLocation( _shader_water_fast.id, "g_world_depth" );
/* Draw world */
glEnable( GL_DEPTH_TEST );
-
render_world( &main_camera );
#include "camera.h"
#include "world.h"
-vg_tex2d tex_terrain_noise = { .path = "textures/garbage.qoi",
- .flags = VG_TEXTURE_NEAREST };
+/* FIXME */
+VG_STATIC vg_tex2d tex_terrain_noise = { .path = "textures/garbage.qoi",
+ .flags = VG_TEXTURE_NEAREST };
VG_STATIC void world_render_init(void)
{
shader_vblend_uPvmPrev( cam->mtx_prev.pv );
shader_vblend_uMdl( identity_matrix );
shader_vblend_uCamera( cam->transform[3] );
+ shader_vblend_uBoard0( TEMP_BOARD_0 );
+ shader_vblend_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( k_shader_standard_vertex_blend,
bindpoint_diffuse_texture1 );
shader_standard_uMdl( identity_matrix );
shader_standard_uCamera( cam->transform[3] );
+ shader_standard_uBoard0( TEMP_BOARD_0 );
+ shader_standard_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( k_shader_standard,
bindpoint_diffuse_texture1 );
shader_alphatest_uMdl( identity_matrix );
shader_alphatest_uCamera( cam->transform[3] );
+ shader_alphatest_uBoard0( TEMP_BOARD_0 );
+ shader_alphatest_uBoard1( TEMP_BOARD_1 );
glDisable(GL_CULL_FACE);
shader_terrain_uMdl( identity_matrix );
shader_terrain_uCamera( cam->transform[3] );
+ shader_terrain_uBoard0( TEMP_BOARD_0 );
+ shader_terrain_uBoard1( TEMP_BOARD_1 );
world_render_both_stages( k_shader_terrain_blend, bindpoint_terrain );
}
shader_route_uPvmPrev( cam->mtx_prev.pv );
shader_route_uMdl( identity_matrix );
shader_route_uCamera( cam->transform[3] );
+ shader_route_uBoard0( TEMP_BOARD_0 );
+ shader_route_uBoard1( TEMP_BOARD_1 );
mesh_bind( &world.mesh_route_lines );