projects
/
carveJwlIkooP6JGAAIwe30JlM.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
9edcce7
)
df shadows
author
hgn
<hgodden00@gmail.com>
Sat, 28 Jan 2023 07:50:33 +0000
(07:50 +0000)
committer
hgn
<hgodden00@gmail.com>
Sat, 28 Jan 2023 07:50:33 +0000
(07:50 +0000)
25 files changed:
common.h
patch
|
blob
|
history
player_device_skate.h
patch
|
blob
|
history
shaders/alphatest.h
patch
|
blob
|
history
shaders/common_world.glsl
patch
|
blob
|
history
shaders/gpos.fs
patch
|
blob
|
history
shaders/gpos.h
patch
|
blob
|
history
shaders/route.fs
patch
|
blob
|
history
shaders/route.h
patch
|
blob
|
history
shaders/scoretext.h
patch
|
blob
|
history
shaders/standard.fs
patch
|
blob
|
history
shaders/standard.h
patch
|
blob
|
history
shaders/std_alphatest.fs
patch
|
blob
|
history
shaders/terrain.fs
patch
|
blob
|
history
shaders/terrain.h
patch
|
blob
|
history
shaders/vblend.fs
patch
|
blob
|
history
shaders/vblend.h
patch
|
blob
|
history
shaders/viewchar.fs
patch
|
blob
|
history
shaders/viewchar.h
patch
|
blob
|
history
shaders/water.fs
patch
|
blob
|
history
shaders/water.h
patch
|
blob
|
history
shaders/water_fast.fs
patch
|
blob
|
history
shaders/water_fast.h
patch
|
blob
|
history
skaterift.c
patch
|
blob
|
history
world_render.h
patch
|
blob
|
history
world_routes.h
patch
|
blob
|
history
diff --git
a/common.h
b/common.h
index 556834df935b43a11fc4c1814595d029c6851fbb..ff522676c82083b4b1de77a19333bebbe95d57af 100644
(file)
--- a/
common.h
+++ b/
common.h
@@
-15,6
+15,7
@@
#include "submodules/anyascii/impl/c/anyascii.c"
#define RESET_MAX_TIME 45.0
#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
{
enum menu_controller_type
{
diff --git
a/player_device_skate.h
b/player_device_skate.h
index 168e8ee806c77320ba0d9f5331343a2b71f8b6e8..d4c1e6201803e795fac6382d35c4b3c00792dc79 100644
(file)
--- a/
player_device_skate.h
+++ b/
player_device_skate.h
@@
-1562,6
+1562,13
@@
VG_STATIC void player_skate_get_camera( player_interface *player,
skate_camera_thirdperson( player, s, av, cam );
else
skate_camera_firstperson( player, s, av, cam );
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,
}
VG_STATIC void player_skate_transport( player_interface *player,
diff --git
a/shaders/alphatest.h
b/shaders/alphatest.h
index 25e58795ec18da791c1124970eaca74933978860..5761c02ba4c06b5c4e055cb01e39747198dd6669 100644
(file)
--- a/
shaders/alphatest.h
+++ b/
shaders/alphatest.h
@@
-67,6
+67,8
@@
static struct vg_shader _shader_alphatest = {
.static_src =
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexMain;\n"
.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"
"uniform vec3 uCamera;\n"
"uniform vec4 uPlane;\n"
"\n"
@@
-153,6
+155,16
@@
static struct vg_shader _shader_alphatest = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-173,6
+185,13
@@
static struct vg_shader _shader_alphatest = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-182,7
+201,7
@@
static struct vg_shader _shader_alphatest = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
3
0 \n"
+"#line 1
5
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-202,7
+221,7
@@
static struct vg_shader _shader_alphatest = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
4
0 \n"
+"#line 1
6
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-242,6
+261,8
@@
static GLuint _uniform_alphatest_uPv;
static GLuint _uniform_alphatest_uPvmPrev;
static GLuint _uniform_alphatest_uTexGarbage;
static GLuint _uniform_alphatest_uTexMain;
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 GLuint _uniform_alphatest_uCamera;
static GLuint _uniform_alphatest_uPlane;
static GLuint _uniform_alphatest_g_world_depth;
@@
-260,6
+281,12
@@
static void shader_alphatest_uTexGarbage(int i){
static void shader_alphatest_uTexMain(int i){
glUniform1i(_uniform_alphatest_uTexMain,i);
}
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);
}
static void shader_alphatest_uCamera(v3f v){
glUniform3fv(_uniform_alphatest_uCamera,1,v);
}
@@
-279,6
+306,8
@@
static void shader_alphatest_link(void){
_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_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" );
_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" );
diff --git
a/shaders/common_world.glsl
b/shaders/common_world.glsl
index a394acb75b73724666528c640a0698b5ac66b882..da87204bbebe620f803961ae4755b45cf5d0870d 100644
(file)
--- a/
shaders/common_world.glsl
+++ b/
shaders/common_world.glsl
@@
-74,6
+74,16
@@
vec3 do_light_shadowing_old( vec3 vfrag )
return mix( vfrag, g_ambient_colour.rgb, faccum );
}
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 )
vec3 do_light_shadowing( vec3 vfrag )
{
if( g_shadow_samples == 0 )
@@
-94,6
+104,13
@@
vec3 do_light_shadowing( vec3 vfrag )
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);
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 );
}
return mix( vfrag, g_ambient_colour.rgb, famt );
}
diff --git
a/shaders/gpos.fs
b/shaders/gpos.fs
index 77dac50175d01bb334342b87a38f1c19c6430dcf..d76f6e4441a1cba10278856de68f822c4ca2bc9d 100644
(file)
--- a/
shaders/gpos.fs
+++ b/
shaders/gpos.fs
@@
-1,6
+1,8
@@
out vec4 FragColor;
uniform vec3 uCamera;
out vec4 FragColor;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/gpos.h
b/shaders/gpos.h
index 2f4440db78c899b68542ce010f21595c7c5394fc..e30d276cb199377ea611327191621d33a88a7b75 100644
(file)
--- a/
shaders/gpos.h
+++ b/
shaders/gpos.h
@@
-68,6
+68,8
@@
static struct vg_shader _shader_gpos = {
"out vec4 FragColor;\n"
"\n"
"uniform vec3 uCamera;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-152,6
+154,16
@@
static struct vg_shader _shader_gpos = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-172,6
+184,13
@@
static struct vg_shader _shader_gpos = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-181,7
+200,7
@@
static struct vg_shader _shader_gpos = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
2
0 \n"
+"#line 1
4
0 \n"
"\n"
"// Water blending\n"
"// ==============\n"
"\n"
"// Water blending\n"
"// ==============\n"
@@
-209,6
+228,8
@@
static GLuint _uniform_gpos_uMdl;
static GLuint _uniform_gpos_uPv;
static GLuint _uniform_gpos_uPvmPrev;
static GLuint _uniform_gpos_uCamera;
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 GLuint _uniform_gpos_g_world_depth;
static void shader_gpos_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_gpos_uMdl,1,GL_FALSE,(float*)m);
@@
-222,6
+243,12
@@
static void shader_gpos_uPvmPrev(m4x4f m){
static void shader_gpos_uCamera(v3f v){
glUniform3fv(_uniform_gpos_uCamera,1,v);
}
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);
}
static void shader_gpos_g_world_depth(int i){
glUniform1i(_uniform_gpos_g_world_depth,i);
}
@@
-234,6
+261,8
@@
static void shader_gpos_link(void){
_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_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_gpos_g_world_depth = glGetUniformLocation( _shader_gpos.id, "g_world_depth" );
}
#endif /* SHADER_gpos_H */
diff --git
a/shaders/route.fs
b/shaders/route.fs
index 3e82be7d679d84cd0cbfe72b8251f32751f7a92e..2e7db2e3826f98570d2d7aeabbba4df3ac0f07f9 100644
(file)
--- a/
shaders/route.fs
+++ b/
shaders/route.fs
@@
-2,6
+2,8
@@
uniform sampler2D uTexGarbage;
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
uniform vec4 uColour;
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
uniform vec4 uColour;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/route.h
b/shaders/route.h
index 60b5c5cd2676570f5ad3e0d07b9e0f72cdbeb291..0c03368217c837adf14642171e3c5a783beb5ec5 100644
(file)
--- a/
shaders/route.h
+++ b/
shaders/route.h
@@
-69,6
+69,8
@@
static struct vg_shader _shader_route = {
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
"uniform vec4 uColour;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-153,6
+155,16
@@
static struct vg_shader _shader_route = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-173,6
+185,13
@@
static struct vg_shader _shader_route = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-182,7
+201,7
@@
static struct vg_shader _shader_route = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
3
0 \n"
+"#line 1
5
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-202,7
+221,7
@@
static struct vg_shader _shader_route = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
4
0 \n"
+"#line 1
6
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-257,6
+276,8
@@
static GLuint _uniform_route_uTexGarbage;
static GLuint _uniform_route_uTexGradients;
static GLuint _uniform_route_uCamera;
static GLuint _uniform_route_uColour;
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 GLuint _uniform_route_g_world_depth;
static void shader_route_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_route_uMdl,1,GL_FALSE,(float*)m);
@@
-279,6
+300,12
@@
static void shader_route_uCamera(v3f v){
static void shader_route_uColour(v4f v){
glUniform4fv(_uniform_route_uColour,1,v);
}
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);
}
static void shader_route_g_world_depth(int i){
glUniform1i(_uniform_route_g_world_depth,i);
}
@@
-294,6
+321,8
@@
static void shader_route_link(void){
_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_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_route_g_world_depth = glGetUniformLocation( _shader_route.id, "g_world_depth" );
}
#endif /* SHADER_route_H */
diff --git
a/shaders/scoretext.h
b/shaders/scoretext.h
index fea61cc0a68631d47539ae05e13432949c47c263..519dfbeef40b763730bf9eaf1cae911916ddf2d5 100644
(file)
--- a/
shaders/scoretext.h
+++ b/
shaders/scoretext.h
@@
-90,6
+90,8
@@
static struct vg_shader _shader_scoretext = {
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-174,6
+176,16
@@
static struct vg_shader _shader_scoretext = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-194,6
+206,13
@@
static struct vg_shader _shader_scoretext = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-203,7
+222,7
@@
static struct vg_shader _shader_scoretext = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
2
0 \n"
+"#line 1
4
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-223,7
+242,7
@@
static struct vg_shader _shader_scoretext = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
3
0 \n"
+"#line 1
5
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-279,6
+298,8
@@
static GLuint _uniform_scoretext_uInfo;
static GLuint _uniform_scoretext_uTexGarbage;
static GLuint _uniform_scoretext_uTexGradients;
static GLuint _uniform_scoretext_uCamera;
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 GLuint _uniform_scoretext_g_world_depth;
static void shader_scoretext_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_scoretext_uMdl,1,GL_FALSE,(float*)m);
@@
-301,6
+322,12
@@
static void shader_scoretext_uTexGradients(int i){
static void shader_scoretext_uCamera(v3f v){
glUniform3fv(_uniform_scoretext_uCamera,1,v);
}
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);
}
static void shader_scoretext_g_world_depth(int i){
glUniform1i(_uniform_scoretext_g_world_depth,i);
}
@@
-316,6
+343,8
@@
static void shader_scoretext_link(void){
_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_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_scoretext_g_world_depth = glGetUniformLocation( _shader_scoretext.id, "g_world_depth" );
}
#endif /* SHADER_scoretext_H */
diff --git
a/shaders/standard.fs
b/shaders/standard.fs
index 58678f01195a3ff47fc4711ee45e7ed988080477..321d7ada7833b84785d423a392c08e37886934ed 100644
(file)
--- a/
shaders/standard.fs
+++ b/
shaders/standard.fs
@@
-2,6
+2,8
@@
uniform sampler2D uTexGarbage;
uniform sampler2D uTexMain;
uniform vec3 uCamera;
uniform vec4 uPlane;
uniform sampler2D uTexMain;
uniform vec3 uCamera;
uniform vec4 uPlane;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/standard.h
b/shaders/standard.h
index cf61d03be700cc16df6532698314bcba747c1c2d..b55a94abc2f8122c3fd5ec9b1288b835bf8317b6 100644
(file)
--- a/
shaders/standard.h
+++ b/
shaders/standard.h
@@
-69,6
+69,8
@@
static struct vg_shader _shader_standard = {
"uniform sampler2D uTexMain;\n"
"uniform vec3 uCamera;\n"
"uniform vec4 uPlane;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-153,6
+155,16
@@
static struct vg_shader _shader_standard = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-173,6
+185,13
@@
static struct vg_shader _shader_standard = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-182,7
+201,7
@@
static struct vg_shader _shader_standard = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
3
0 \n"
+"#line 1
5
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-202,7
+221,7
@@
static struct vg_shader _shader_standard = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
4
0 \n"
+"#line 1
6
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-241,6
+260,8
@@
static GLuint _uniform_standard_uTexGarbage;
static GLuint _uniform_standard_uTexMain;
static GLuint _uniform_standard_uCamera;
static GLuint _uniform_standard_uPlane;
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 GLuint _uniform_standard_g_world_depth;
static void shader_standard_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_standard_uMdl,1,GL_FALSE,(float*)m);
@@
-263,6
+284,12
@@
static void shader_standard_uCamera(v3f v){
static void shader_standard_uPlane(v4f v){
glUniform4fv(_uniform_standard_uPlane,1,v);
}
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);
}
static void shader_standard_g_world_depth(int i){
glUniform1i(_uniform_standard_g_world_depth,i);
}
@@
-278,6
+305,8
@@
static void shader_standard_link(void){
_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_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_standard_g_world_depth = glGetUniformLocation( _shader_standard.id, "g_world_depth" );
}
#endif /* SHADER_standard_H */
diff --git
a/shaders/std_alphatest.fs
b/shaders/std_alphatest.fs
index b0f18fd1db484d651a77685ac826543474ae6862..cd22275fee1897942d7aa9b2662fc1f5c8535be5 100644
(file)
--- a/
shaders/std_alphatest.fs
+++ b/
shaders/std_alphatest.fs
@@
-1,5
+1,7
@@
uniform sampler2D uTexGarbage;
uniform sampler2D uTexMain;
uniform sampler2D uTexGarbage;
uniform sampler2D uTexMain;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uCamera;
uniform vec4 uPlane;
uniform vec3 uCamera;
uniform vec4 uPlane;
diff --git
a/shaders/terrain.fs
b/shaders/terrain.fs
index 6e01684cf9b85bb3825436488f5c2fc2c770e2de..3f5cd3abdf28a3a43a80a9a5ead999fd35764e1b 100644
(file)
--- a/
shaders/terrain.fs
+++ b/
shaders/terrain.fs
@@
-3,6
+3,8
@@
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
uniform vec3 uSandColour;
uniform vec2 uBlendOffset;
uniform vec3 uCamera;
uniform vec3 uSandColour;
uniform vec2 uBlendOffset;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/terrain.h
b/shaders/terrain.h
index b2730fba9ebc4ab69ed67f166affcba6aefada36..09258e744221022a5961ee9b753ea18756b3f796 100644
(file)
--- a/
shaders/terrain.h
+++ b/
shaders/terrain.h
@@
-70,6
+70,8
@@
static struct vg_shader _shader_terrain = {
"uniform vec3 uCamera;\n"
"uniform vec3 uSandColour;\n"
"uniform vec2 uBlendOffset;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-154,6
+156,16
@@
static struct vg_shader _shader_terrain = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-174,6
+186,13
@@
static struct vg_shader _shader_terrain = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-183,7
+202,7
@@
static struct vg_shader _shader_terrain = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
4
0 \n"
+"#line 1
6
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-203,7
+222,7
@@
static struct vg_shader _shader_terrain = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
5
0 \n"
+"#line 1
7
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-263,6
+282,8
@@
static GLuint _uniform_terrain_uTexGradients;
static GLuint _uniform_terrain_uCamera;
static GLuint _uniform_terrain_uSandColour;
static GLuint _uniform_terrain_uBlendOffset;
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 GLuint _uniform_terrain_g_world_depth;
static void shader_terrain_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_terrain_uMdl,1,GL_FALSE,(float*)m);
@@
-288,6
+309,12
@@
static void shader_terrain_uSandColour(v3f v){
static void shader_terrain_uBlendOffset(v2f v){
glUniform2fv(_uniform_terrain_uBlendOffset,1,v);
}
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);
}
static void shader_terrain_g_world_depth(int i){
glUniform1i(_uniform_terrain_g_world_depth,i);
}
@@
-304,6
+331,8
@@
static void shader_terrain_link(void){
_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_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_terrain_g_world_depth = glGetUniformLocation( _shader_terrain.id, "g_world_depth" );
}
#endif /* SHADER_terrain_H */
diff --git
a/shaders/vblend.fs
b/shaders/vblend.fs
index 9eddd6b7f25ecff0c36a32226413cf905c153024..b2e9928777566ecb335d0b419c93c44257abcb76 100644
(file)
--- a/
shaders/vblend.fs
+++ b/
shaders/vblend.fs
@@
-1,6
+1,8
@@
uniform sampler2D uTexGarbage;
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
uniform sampler2D uTexGarbage;
uniform sampler2D uTexGradients;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/vblend.h
b/shaders/vblend.h
index fd558ef8acdd3798829f4ce5d9173a982ec98158..af2a4967d85fd4974742de68ea9376630972e1e9 100644
(file)
--- a/
shaders/vblend.h
+++ b/
shaders/vblend.h
@@
-68,6
+68,8
@@
static struct vg_shader _shader_vblend = {
"uniform sampler2D uTexGarbage;\n"
"uniform sampler2D uTexGradients;\n"
"uniform vec3 uCamera;\n"
"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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-152,6
+154,16
@@
static struct vg_shader _shader_vblend = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-172,6
+184,13
@@
static struct vg_shader _shader_vblend = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-181,7
+200,7
@@
static struct vg_shader _shader_vblend = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
2
0 \n"
+"#line 1
4
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-201,7
+220,7
@@
static struct vg_shader _shader_vblend = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
3
0 \n"
+"#line 1
5
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-256,6
+275,8
@@
static GLuint _uniform_vblend_uPvmPrev;
static GLuint _uniform_vblend_uTexGarbage;
static GLuint _uniform_vblend_uTexGradients;
static GLuint _uniform_vblend_uCamera;
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 GLuint _uniform_vblend_g_world_depth;
static void shader_vblend_uMdl(m4x3f m){
glUniformMatrix4x3fv(_uniform_vblend_uMdl,1,GL_FALSE,(float*)m);
@@
-275,6
+296,12
@@
static void shader_vblend_uTexGradients(int i){
static void shader_vblend_uCamera(v3f v){
glUniform3fv(_uniform_vblend_uCamera,1,v);
}
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);
}
static void shader_vblend_g_world_depth(int i){
glUniform1i(_uniform_vblend_g_world_depth,i);
}
@@
-289,6
+316,8
@@
static void shader_vblend_link(void){
_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_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_vblend_g_world_depth = glGetUniformLocation( _shader_vblend.id, "g_world_depth" );
}
#endif /* SHADER_vblend_H */
diff --git
a/shaders/viewchar.fs
b/shaders/viewchar.fs
index fb98283b0d6dd080679f1074783fe9bf49d62f64..3c2936018f185e1afbd65ef197bb01332c9cf088 100644
(file)
--- a/
shaders/viewchar.fs
+++ b/
shaders/viewchar.fs
@@
-1,5
+1,7
@@
uniform sampler2D uTexMain;
uniform vec3 uCamera;
uniform sampler2D uTexMain;
uniform vec3 uCamera;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
in vec4 aColour;
in vec2 aUv;
in vec4 aColour;
in vec2 aUv;
diff --git
a/shaders/viewchar.h
b/shaders/viewchar.h
index f65b5eaa3eb27c02dc54c72855b65cf1978c3a28..53f073a2c6a5fd53ee4b7113ce91279a90626017 100644
(file)
--- a/
shaders/viewchar.h
+++ b/
shaders/viewchar.h
@@
-78,6
+78,8
@@
static struct vg_shader _shader_viewchar = {
.static_src =
"uniform sampler2D uTexMain;\n"
"uniform vec3 uCamera;\n"
.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"
"\n"
"in vec4 aColour;\n"
"in vec2 aUv;\n"
@@
-162,6
+164,16
@@
static struct vg_shader _shader_viewchar = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-182,6
+194,13
@@
static struct vg_shader _shader_viewchar = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-191,7
+210,7
@@
static struct vg_shader _shader_viewchar = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
1
0 \n"
+"#line 1
3
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-211,7
+230,7
@@
static struct vg_shader _shader_viewchar = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 1
2
0 \n"
+"#line 1
4
0 \n"
"\n"
"void main()\n"
"{\n"
"\n"
"void main()\n"
"{\n"
@@
-242,6
+261,8
@@
static GLuint _uniform_viewchar_uPv;
static GLuint _uniform_viewchar_uTransforms;
static GLuint _uniform_viewchar_uTexMain;
static GLuint _uniform_viewchar_uCamera;
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 GLuint _uniform_viewchar_g_world_depth;
static void shader_viewchar_uPv(m4x4f m){
glUniformMatrix4fv(_uniform_viewchar_uPv,1,GL_FALSE,(float*)m);
@@
-252,6
+273,12
@@
static void shader_viewchar_uTexMain(int i){
static void shader_viewchar_uCamera(v3f v){
glUniform3fv(_uniform_viewchar_uCamera,1,v);
}
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);
}
static void shader_viewchar_g_world_depth(int i){
glUniform1i(_uniform_viewchar_g_world_depth,i);
}
@@
-264,6
+291,8
@@
static void shader_viewchar_link(void){
_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_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_viewchar_g_world_depth = glGetUniformLocation( _shader_viewchar.id, "g_world_depth" );
}
#endif /* SHADER_viewchar_H */
diff --git
a/shaders/water.fs
b/shaders/water.fs
index eced89aef82cb4e6eedc85f305bda45374a11202..68fc66da863796327914985805df75c1ea1eac89 100644
(file)
--- a/
shaders/water.fs
+++ b/
shaders/water.fs
@@
-6,6
+6,8
@@
uniform vec2 uInvRes;
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
diff --git
a/shaders/water.h
b/shaders/water.h
index 93dcba858e07048a0ecdba1a9247ffd05cceb3c3..ff5e6ced89ff24a97337487bcc5dd1cfee34e3b3 100644
(file)
--- a/
shaders/water.h
+++ b/
shaders/water.h
@@
-73,6
+73,8
@@
static struct vg_shader _shader_water = {
"uniform float uTime;\n"
"uniform vec3 uCamera;\n"
"uniform float uSurfaceY;\n"
"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"
"\n"
"uniform vec3 uShoreColour;\n"
"uniform vec3 uOceanColour;\n"
@@
-160,6
+162,16
@@
static struct vg_shader _shader_water = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-180,6
+192,13
@@
static struct vg_shader _shader_water = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-189,7
+208,7
@@
static struct vg_shader _shader_water = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 2
0
0 \n"
+"#line 2
2
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-209,7
+228,7
@@
static struct vg_shader _shader_water = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\n"
"\n"
-"#line 2
1
0 \n"
+"#line 2
3
0 \n"
"\n"
"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, \n"
" vec4 beneath, vec4 above )\n"
"\n"
"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue, \n"
" vec4 beneath, vec4 above )\n"
@@
-282,6
+301,8
@@
static GLuint _uniform_water_uInvRes;
static GLuint _uniform_water_uTime;
static GLuint _uniform_water_uCamera;
static GLuint _uniform_water_uSurfaceY;
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 GLuint _uniform_water_uShoreColour;
static GLuint _uniform_water_uOceanColour;
static GLuint _uniform_water_g_world_depth;
@@
-315,6
+336,12
@@
static void shader_water_uCamera(v3f v){
static void shader_water_uSurfaceY(float f){
glUniform1f(_uniform_water_uSurfaceY,f);
}
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);
}
static void shader_water_uShoreColour(v3f v){
glUniform3fv(_uniform_water_uShoreColour,1,v);
}
@@
-339,6
+366,8
@@
static void shader_water_link(void){
_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_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_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" );
diff --git
a/shaders/water_fast.fs
b/shaders/water_fast.fs
index 821e47f9269bbae32acf186f2b88238f210042b1..5f68c452dc363c26e8768277094c6e60e32d5e34 100644
(file)
--- a/
shaders/water_fast.fs
+++ b/
shaders/water_fast.fs
@@
-3,6
+3,8
@@
uniform sampler2D uTexDudv;
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
uniform float uTime;
uniform vec3 uCamera;
uniform float uSurfaceY;
+uniform vec3 uBoard0;
+uniform vec3 uBoard1;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
uniform vec3 uShoreColour;
uniform vec3 uOceanColour;
diff --git
a/shaders/water_fast.h
b/shaders/water_fast.h
index 196c71ee738a0adea3e3f5860dccde17da6fab71..90ea5c8023973d2559dca0cdcbe58a8f01cc1f32 100644
(file)
--- a/
shaders/water_fast.h
+++ b/
shaders/water_fast.h
@@
-70,6
+70,8
@@
static struct vg_shader _shader_water_fast = {
"uniform float uTime;\n"
"uniform vec3 uCamera;\n"
"uniform float uSurfaceY;\n"
"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"
"\n"
"uniform vec3 uShoreColour;\n"
"uniform vec3 uOceanColour;\n"
@@
-157,6
+159,16
@@
static struct vg_shader _shader_water_fast = {
" return mix( vfrag, g_ambient_colour.rgb, faccum );\n"
"}\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"
"vec3 do_light_shadowing( vec3 vfrag )\n"
"{\n"
" if( g_shadow_samples == 0 )\n"
@@
-177,6
+189,13
@@
static struct vg_shader _shader_water_fast = {
" 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"
" 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, g_ambient_colour.rgb, famt );\n"
"}\n"
"\n"
@@
-186,7
+205,7
@@
static struct vg_shader _shader_water_fast = {
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
" return mix( vfrag, vec3(0.55,0.76,1.0), min( 1.0, dist ) );\n"
"}\n"
"\n"
-"#line 1
7
0 \n"
+"#line 1
9
0 \n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
"#line 1 2 \n"
"const float k_motion_lerp_amount = 0.01;\n"
"\n"
@@
-206,7
+225,7
@@
static struct vg_shader _shader_water_fast = {
" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n"
"}\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"
"\n"
"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue )\n"
"{\n"
@@
-261,6
+280,8
@@
static GLuint _uniform_water_fast_uTexDudv;
static GLuint _uniform_water_fast_uTime;
static GLuint _uniform_water_fast_uCamera;
static GLuint _uniform_water_fast_uSurfaceY;
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 GLuint _uniform_water_fast_uShoreColour;
static GLuint _uniform_water_fast_uOceanColour;
static GLuint _uniform_water_fast_g_world_depth;
@@
-285,6
+306,12
@@
static void shader_water_fast_uCamera(v3f v){
static void shader_water_fast_uSurfaceY(float f){
glUniform1f(_uniform_water_fast_uSurfaceY,f);
}
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);
}
static void shader_water_fast_uShoreColour(v3f v){
glUniform3fv(_uniform_water_fast_uShoreColour,1,v);
}
@@
-306,6
+333,8
@@
static void shader_water_fast_link(void){
_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_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" );
_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" );
diff --git
a/skaterift.c
b/skaterift.c
index 0ad5bba4838186909bf1687176005976b2a7b617..518ac439995c8dd39c42764e4217b9ae4161ebd6 100644
(file)
--- a/
skaterift.c
+++ b/
skaterift.c
@@
-395,7
+395,6
@@
VG_STATIC void render_scene(void)
/* Draw world */
glEnable( GL_DEPTH_TEST );
/* Draw world */
glEnable( GL_DEPTH_TEST );
-
render_world( &main_camera );
render_world( &main_camera );
diff --git
a/world_render.h
b/world_render.h
index af20830cd0f6d388ca7abcdb58bba139769d5bf9..e1c17c828ee9824e4408b3869a470459bc8d36c0 100644
(file)
--- a/
world_render.h
+++ b/
world_render.h
@@
-8,8
+8,9
@@
#include "camera.h"
#include "world.h"
#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)
{
VG_STATIC void world_render_init(void)
{
@@
-93,6
+94,8
@@
VG_STATIC void render_world_vb( camera *cam )
shader_vblend_uPvmPrev( cam->mtx_prev.pv );
shader_vblend_uMdl( identity_matrix );
shader_vblend_uCamera( cam->transform[3] );
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 );
world_render_both_stages( k_shader_standard_vertex_blend,
bindpoint_diffuse_texture1 );
@@
-113,6
+116,8
@@
VG_STATIC void render_world_standard( camera *cam )
shader_standard_uMdl( identity_matrix );
shader_standard_uCamera( cam->transform[3] );
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 );
world_render_both_stages( k_shader_standard,
bindpoint_diffuse_texture1 );
@@
-133,6
+138,8
@@
VG_STATIC void render_world_alphatest( camera *cam )
shader_alphatest_uMdl( identity_matrix );
shader_alphatest_uCamera( cam->transform[3] );
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);
glDisable(GL_CULL_FACE);
@@
-168,6
+175,8
@@
VG_STATIC void render_terrain( camera *cam )
shader_terrain_uMdl( identity_matrix );
shader_terrain_uCamera( cam->transform[3] );
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 );
}
world_render_both_stages( k_shader_terrain_blend, bindpoint_terrain );
}
diff --git
a/world_routes.h
b/world_routes.h
index 7d4ef7c7778b8fd53cf17622595d9371aea05dd8..3aeaf05e931afe3885f880ee6772bcef1c9f7352 100644
(file)
--- a/
world_routes.h
+++ b/
world_routes.h
@@
-1146,6
+1146,8
@@
VG_STATIC void render_world_routes( camera *cam )
shader_route_uPvmPrev( cam->mtx_prev.pv );
shader_route_uMdl( identity_matrix );
shader_route_uCamera( cam->transform[3] );
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 );
mesh_bind( &world.mesh_route_lines );