X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fscene_water_fast.h;h=e0f1b4c1c2641ca0483051e7f36dee4bae2fa829;hb=5f6a4f9df6c8accc89f1920bfe9ace3cbac4c4b6;hp=ac987dd5204c6f15feb79c77bc4d6fff46469757;hpb=a109f126d8adab622e38fbcc2d4281e75255246a;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/scene_water_fast.h b/shaders/scene_water_fast.h index ac987dd..e0f1b4c 100644 --- a/shaders/scene_water_fast.h +++ b/shaders/scene_water_fast.h @@ -1,588 +1,70 @@ -#ifndef SHADER_scene_water_fast_H -#define SHADER_scene_water_fast_H -static void shader_scene_water_fast_link(void); -static void shader_scene_water_fast_register(void); -static struct vg_shader _shader_scene_water_fast = { - .name = "scene_water_fast", - .link = shader_scene_water_fast_link, - .vs = +#pragma once +#include "vg/vg_engine.h" +extern struct vg_shader _shader_scene_water_fast; +extern GLuint _uniform_scene_water_fast_uMdl; +extern GLuint _uniform_scene_water_fast_uPv; +extern GLuint _uniform_scene_water_fast_uPvmPrev; +extern GLuint _uniform_scene_water_fast_uTexDudv; +extern GLuint _uniform_scene_water_fast_uTime; +extern GLuint _uniform_scene_water_fast_uCamera; +extern GLuint _uniform_scene_water_fast_uSurfaceY; +extern GLuint _uniform_scene_water_fast_uBoard0; +extern GLuint _uniform_scene_water_fast_uBoard1; +extern GLuint _uniform_scene_water_fast_uShoreColour; +extern GLuint _uniform_scene_water_fast_uOceanColour; +extern GLuint _uniform_scene_water_fast_g_world_depth; +extern GLuint _uniform_scene_water_fast_uLightsArray; +extern GLuint _uniform_scene_water_fast_uLightsIndex; +static inline void shader_scene_water_fast_uMdl(m4x3f m) { -.orig_file = "shaders/scene.vs", -.static_src = -"layout (location=0) in vec3 a_co;\n" -"layout (location=1) in vec4 a_norm;\n" -"layout (location=2) in vec2 a_uv;\n" -"\n" -"#line 1 1 \n" -"const float k_motion_lerp_amount = 0.01;\n" -"\n" -"#line 2 0 \n" -"\n" -"out vec3 aMotionVec0;\n" -"out vec3 aMotionVec1;\n" -"\n" -"void vs_motion_out( vec4 vproj0, vec4 vproj1 )\n" -"{\n" -" // This magically solves some artifacting errors!\n" -" //\n" -" vproj1 = vproj0*(1.0-k_motion_lerp_amount) + vproj1*k_motion_lerp_amount;\n" -"\n" -" aMotionVec0 = vec3( vproj0.xy, vproj0.w );\n" -" aMotionVec1 = vec3( vproj1.xy, vproj1.w );\n" -"}\n" -"\n" -"#line 6 0 \n" -"\n" -"uniform mat4x3 uMdl;\n" -"uniform mat4 uPv;\n" -"uniform mat4 uPvmPrev;\n" -"\n" -"out vec2 aUv;\n" -"out vec4 aNorm;\n" -"out vec3 aCo;\n" -"out vec3 aWorldCo;\n" -"\n" -"void main()\n" -"{\n" -" vec3 world_pos0 = uMdl * vec4( a_co, 1.0 );\n" -" vec4 vproj0 = uPv * vec4( world_pos0, 1.0 );\n" -" vec4 vproj1 = uPvmPrev * vec4( a_co, 1.0 );\n" -"\n" -" vs_motion_out( vproj0, vproj1 );\n" -"\n" -" gl_Position = vproj0;\n" -"\n" -" aUv = a_uv;\n" -" aNorm = vec4( mat3(uMdl) * a_norm.xyz, a_norm.w );\n" -" aCo = a_co;\n" -" aWorldCo = world_pos0;\n" -"}\n" -""}, - .fs = -{ -.orig_file = "shaders/scene_water_fast.fs", -.static_src = -"uniform sampler2D uTexDudv;\n" -"\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" -"#line 1 1 \n" -"// :D\n" -"const float CLEARSKIES_LIGHT_DOT_MIN = 0.0;\n" -"\n" -"#line 13 0 \n" -"#line 1 2 \n" -"// :D\n" -"\n" -"in vec2 aUv;\n" -"in vec4 aNorm;\n" -"in vec3 aCo;\n" -"in vec3 aWorldCo;\n" -"\n" -"#line 1 1 \n" -"layout (location = 0) out vec4 oColour;\n" -"\n" -"// OpenGL wiki: Recommends do not use vec3 because of drivers. hence the v4s...\n" -"layout (std140) uniform ub_world_lighting\n" -"{\n" -" vec4 g_cube_min;\n" -" vec4 g_cube_inv_range;\n" -"\n" -" vec4 g_water_plane;\n" -" vec4 g_depth_bounds;\n" -"\n" -" vec4 g_daysky_colour;\n" -" vec4 g_nightsky_colour;\n" -" vec4 g_sunset_colour;\n" -" vec4 g_ambient_colour;\n" -" vec4 g_sunset_ambient;\n" -" vec4 g_sun_colour;\n" -" vec4 g_sun_dir;\n" -" vec4 g_board_0;\n" -" vec4 g_board_1;\n" -"\n" -" float g_water_fog;\n" -" float g_time;\n" -" float g_realtime;\n" -" float g_shadow_length;\n" -" float g_shadow_spread;\n" -"\n" -" float g_time_of_day;\n" -" float g_day_phase;\n" -" float g_sunset_phase;\n" -"\n" -" int g_light_preview;\n" -" int g_shadow_samples;\n" -"\n" -" int g_debug_indices;\n" -" int g_debug_complexity;\n" -"};\n" -"\n" -"uniform sampler2D g_world_depth;\n" -"uniform samplerBuffer uLightsArray;\n" -"uniform usampler3D uLightsIndex;\n" -"\n" -"#line 1 1 \n" -"//const vec3 DAYSKY_COLOUR = vec3( 0.37, 0.54, 0.97 );\n" -"//const vec3 NIGHTSKY_COLOUR = vec3( 0.03, 0.05, 0.20 );\n" -"//const vec3 SUNSET_COLOUR = vec3( 1.00, 0.32, 0.01 );\n" -"//const vec3 AMBIENT_COLOUR = vec3( 0.13, 0.17, 0.35 );\n" -"//const vec3 SUNSET_AMBIENT = vec3( 0.25, 0.17, 0.51 );\n" -"//const vec3 SUN_COLOUR = vec3( 1.10, 0.89, 0.35 );\n" -"\n" -"const float SUN_ANGLE = 0.0001;\n" -"const float PI = 3.14159265358979323846264;\n" -"\n" -"//struct world_info\n" -"//{\n" -"// float time,\n" -"// time_of_day,\n" -"// day_phase,\n" -"// sunset_phase;\n" -"// \n" -"// vec3 sun_dir;\n" -"//};\n" -"\n" -"vec3 rand33(vec3 p3)\n" -"{\n" -" p3 = fract(p3 * vec3(.1031, .1030, .0973));\n" -" p3 += dot(p3, p3.yxz+33.33);\n" -" return fract((p3.xxy + p3.yxx)*p3.zyx);\n" -"}\n" -"\n" -"float stars( vec3 rd, float rr, float size ){\n" -" vec3 co = rd * rr;\n" -"\n" -" float a = atan(co.y, length(co.xz)) + 4.0 * PI;\n" -"\n" -" float spaces = 1.0 / rr;\n" -" size = (rr * 0.0015) * fwidth(a) * 1000.0 * size;\n" -" a -= mod(a, spaces) - spaces * 0.5;\n" -"\n" -" float count = floor(sqrt(pow(rr, 2.0) * (1.0 - pow(sin(a), 2.0))) * 3.0);\n" -" \n" -" float plane = atan(co.z, co.x) + 4.0 * PI;\n" -" plane = plane - mod(plane, PI / count);\n" -"\n" -" vec2 delta = rand33(vec3(plane, a, 0.0)).xy;\n" -"\n" -" float level = sin(a + spaces * (delta.y - 0.5) * (1.0 - size)) * rr;\n" -" float ydist = sqrt(rr * rr - level * level);\n" -" float angle = plane + (PI * (delta.x * (1.0-size) + size * 0.5) / count);\n" -" vec3 center = vec3(cos(angle) * ydist, level, sin(angle) * ydist);\n" -" float star = smoothstep(size, 0.0, distance(center, co));\n" -" return star;\n" -"}\n" -"\n" -"float luminance( vec3 v )\n" -"{\n" -" return dot( v, vec3(0.2126, 0.7152, 0.0722) );\n" -"}\n" -"\n" -"vec3 clearskies_ambient( vec3 dir )\n" -"{\n" -" float sun_azimuth = g_sunset_phase * (dot( dir.xz, g_sun_dir.xz )*0.4+0.6);\n" -" float sky_gradient = dir.y;\n" -" \n" -" /* Blend phase colours */\n" -" vec3 ambient = g_daysky_colour.rgb * (g_day_phase-g_sunset_phase*0.1);\n" -" ambient += g_sunset_colour.rgb * (1.0-dir.y*0.5)*sun_azimuth;\n" -" ambient += g_nightsky_colour.rgb * (1.0-g_day_phase);\n" -" \n" -" /* Add gradient */\n" -" ambient -= sky_gradient * luminance(ambient);\n" -" \n" -" return ambient;\n" -"}\n" -"\n" -"vec3 clearskies_sky( vec3 ray_dir )\n" -"{\n" -" ray_dir.y = abs( ray_dir.y );\n" -" vec3 sky_colour = clearskies_ambient( ray_dir );\n" -" \n" -" /* Sun */\n" -" float sun_theta = dot( ray_dir, g_sun_dir.xyz );\n" -" float sun_size = max( 0.0, sun_theta * 0.5 + 0.5 + SUN_ANGLE );\n" -" float sun_shape = pow( sun_size, 2000.0 );\n" -" sun_shape += sun_size * max(g_sun_dir.y,0.0) * 0.5;\n" -" \n" -" vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" -" sun_colour *= sun_shape;\n" -"\n" -" \n" -" float star = 0.0;\n" -" float star_blend = 10.0*max(0.0,(1.0-g_day_phase*2.0));\n" -"\n" -" if( star_blend > 0.001 ){\n" -" for( float j = 1.0; j <= 4.1; j += 1.0 ){\n" -" float m = mix(0.6, 0.9, smoothstep(1.0, 2.0, j));\n" -" star += stars( ray_dir, 1.94 * pow( 1.64, j ), m ) * (1.0/pow(4.0, j));\n" -" }\n" -" }\n" -" \n" -" vec3 composite = sky_colour + sun_colour + star*star_blend;\n" -" return composite;\n" -"}\n" -"\n" -"vec3 clearskies_lighting( vec3 normal, float shadow, vec3 halfview )\n" -"{\n" -" float fresnel = 1.0 - abs(dot(normal,halfview));\n" -"\n" -" vec3 reflect_colour = mix( g_daysky_colour.rgb, g_sunset_colour.rgb, \n" -" g_sunset_phase );\n" -"\n" -" vec3 sky_reflection = 0.5 * fresnel * reflect_colour;\n" -" vec3 light_sun = max( CLEARSKIES_LIGHT_DOT_MIN, \n" -" dot(normal,g_sun_dir.xyz)*0.75+0.25\n" -" ) * g_sun_colour.rgb * g_day_phase;\n" -"\n" -" float scaled_shadow = max( shadow, 1.0 - max(g_sun_dir.y,0.0) );\n" -" vec3 ambient = mix( g_ambient_colour.rgb, g_sunset_ambient.rgb, \n" -" g_sunset_phase );\n" -"\n" -" return ambient + (light_sun + sky_reflection) * shadow;\n" -"}\n" -"\n" -"#line 44 0 \n" -"\n" -"float world_depth_sample( vec3 pos )\n" -"{\n" -" vec2 depth_coord = (pos.xz - g_depth_bounds.xy) * g_depth_bounds.zw; \n" -" return texture( g_world_depth, depth_coord ).r;\n" -"}\n" -"\n" -"float world_water_depth( vec3 pos )\n" -"{\n" -" float ref_depth = g_water_plane.y*g_water_plane.w;\n" -" return world_depth_sample( pos ) - ref_depth;\n" -"}\n" -"\n" -"float shadow_sample( vec3 co ){\n" -" float height_sample = world_depth_sample( co );\n" -"\n" -" float fdelta = height_sample - co.y;\n" -" return clamp( fdelta, 0.2, 0.4 )-0.2;\n" -"}\n" -"\n" -"float newlight_compute_sun_shadow( vec3 co, vec3 dir ){\n" -" if( g_shadow_samples == 0 ){\n" -" return 1.0;\n" -" }\n" -"\n" -" float fspread = g_shadow_spread;\n" -" float flength = g_shadow_length;\n" -"\n" -" float famt = 0.0;\n" -" famt += shadow_sample(co+(dir+vec3(-0.56,0.55, 0.30)*fspread)*flength*0.1);\n" -" famt += shadow_sample(co+(dir+vec3( 0.80,0.68, 0.34)*fspread)*flength*0.2);\n" -" famt += shadow_sample(co+(dir+vec3( 0.78,0.07,-0.06)*fspread)*flength*0.3);\n" -" famt += shadow_sample(co+(dir+vec3(-0.59,0.07,-0.42)*fspread)*flength*0.4);\n" -"\n" -" //famt+=shadow_sample(co+(dir+vec3(-0.790,-0.933,-0.875)*fspread)*flength*0.5);\n" -" //famt+=shadow_sample(co+(dir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6);\n" -" //famt+=shadow_sample(co+(dir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7);\n" -" //famt+=shadow_sample(co+(dir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8);\n" -"\n" -" return 1.0 - famt;\n" -"}\n" -"\n" -"float newlight_specular( vec3 wnormal, vec3 dir, vec3 halfview, float exponent )\n" -"{\n" -" vec3 specdir = reflect( -dir, wnormal );\n" -" return pow(max(dot( halfview, specdir ), 0.0), exponent);\n" -"}\n" -"\n" -"vec3 scene_apply_fog( vec3 vfrag, vec3 colour, float fdist ){\n" -" float dist = pow(fdist*0.0010,0.78);\n" -" return mix( vfrag, colour, min( 1.0, dist ) );\n" -"}\n" -"\n" -"vec3 scene_calculate_light( int light_index, \n" -" vec3 halfview, vec3 co, vec3 normal )\n" -"{\n" -" vec4 light_colour = texelFetch( uLightsArray, light_index+0 );\n" -" vec4 light_co = texelFetch( uLightsArray, light_index+1 );\n" -" vec4 light_dir = texelFetch( uLightsArray, light_index+2 );\n" -"\n" -" vec3 light_delta = light_co.xyz-co;\n" -" float dist2 = dot(light_delta,light_delta);\n" -"\n" -" light_delta = normalize( light_delta );\n" -"\n" -" float quadratic = dist2*100.0;\n" -" float attenuation = 1.0/( 1.0 + quadratic );\n" -" attenuation *= max( dot( light_delta, normal ), 0.0 );\n" -"\n" -" float falloff = max( 0.0, 1.0-(dist2*light_co.w) );\n" -"\n" -" if( light_dir.w < 0.999999 ){\n" -" float spot_theta = max( 0.0, dot( light_delta, -light_dir.xyz ) );\n" -" falloff *= max( 0.0, (spot_theta - light_dir.w) / (1.0-light_dir.w) );\n" -" }\n" -"\n" -" return light_colour.rgb * attenuation * falloff \n" -" * step( g_day_phase, light_colour.w );\n" -"}\n" -"\n" -"vec3 scene_calculate_packed_light_patch( uint packed_index, \n" -" vec3 halfview, vec3 co, vec3 normal )\n" -"{\n" -" uint light_count = packed_index & 0x3u;\n" -"\n" -" vec3 l = vec3(0.0);\n" -"\n" -" if( light_count >= 1u ){\n" -" int index_0 = int( ((packed_index >> 2u) & 0x3ffu) * 3u );\n" -" int index_1 = int( ((packed_index >> 12u) & 0x3ffu) * 3u );\n" -" int index_2 = int( ((packed_index >> 22u) & 0x3ffu) * 3u );\n" -"\n" -" l += scene_calculate_light( index_0, halfview, co, normal );\n" -"\n" -" if( light_count >= 2u ){\n" -" l += scene_calculate_light( index_1, halfview, co, normal );\n" -"\n" -" if( light_count >= 3u ){\n" -" l += scene_calculate_light( index_2, halfview, co, normal );\n" -" }\n" -" }\n" -" }\n" -"\n" -" return l;\n" -"}\n" -"\n" -"vec3 world_compute_lighting( vec3 diffuse, vec3 normal, vec3 co,\n" -" float light_mask )\n" -"{\n" -" if( g_light_preview == 1 )\n" -" diffuse = vec3(0.75);\n" -"\n" -" // Lighting\n" -" vec3 halfview = uCamera - co;\n" -" float fdist = length(halfview);\n" -" halfview /= fdist;\n" -"\n" -" float world_shadow = newlight_compute_sun_shadow( \n" -" co, g_sun_dir.xyz * (1.0/(max(g_sun_dir.y,0.0)+0.2)) );\n" -"\n" -" vec3 total_light = clearskies_lighting( \n" -" normal, min( light_mask, world_shadow ), halfview );\n" -"\n" -" vec3 cube_coord = (co - g_cube_min.xyz) * g_cube_inv_range.xyz;\n" -" cube_coord = floor( cube_coord );\n" -"\n" -" if( g_debug_indices == 1 )\n" -" {\n" -" return rand33(cube_coord);\n" -" }\n" -"\n" -" if( g_debug_complexity == 1 )\n" -" {\n" -" ivec3 coord = ivec3( cube_coord );\n" -" uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );\n" -"\n" -" uint light_count = (index_sample.x & 0x3u) + (index_sample.y & 0x3u);\n" -" return vec3( float(light_count)*(1.0/6.0), 0.0, 0.5 );\n" -" }\n" -"\n" -" // FIXME: this coord should absolutely must be clamped!\n" -" \n" -" ivec3 coord = ivec3( cube_coord );\n" -" uvec4 index_sample = texelFetch( uLightsIndex, coord, 0 );\n" -"\n" -" total_light += \n" -" scene_calculate_packed_light_patch( index_sample.x,\n" -" halfview, co, normal ) \n" -" * light_mask;\n" -" total_light += \n" -" scene_calculate_packed_light_patch( index_sample.y,\n" -" halfview, co, normal )\n" -" * light_mask;\n" -"\n" -" // Take a section of the sky function to give us a matching fog colour\n" -"\n" -" vec3 fog_colour = clearskies_ambient( -halfview );\n" -" float sun_theta = dot( -halfview, g_sun_dir.xyz );\n" -" float sun_size = max( 0.0, sun_theta * 0.5 + 0.5 );\n" -" float sun_shape = sun_size * max(g_sun_dir.y,0.0) * 0.5;\n" -" \n" -" vec3 sun_colour = mix( vec3(1.0), g_sunset_colour.rgb, g_sunset_phase*0.5 );\n" -" sun_colour *= sun_shape;\n" -"\n" -" fog_colour += sun_colour;\n" -" return scene_apply_fog( diffuse * total_light, fog_colour, fdist );\n" -"}\n" -"\n" -"#line 9 0 \n" -"\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" -"float compute_board_shadow()\n" -"{\n" -" // player shadow\n" -" float dist_to_player = max( 0.0, sdLine( aWorldCo, g_board_0.xyz,\n" -" g_board_1.xyz )-0.1 );\n" -" float player_shadow = max( 1.0-dist_to_player*2.7, 0.0 );\n" -" player_shadow *= player_shadow*player_shadow*player_shadow;\n" -"\n" -" return 1.0 - player_shadow*0.8;\n" -"}\n" -"\n" -"vec3 scene_compute_lighting( vec3 diffuse, vec3 normal, vec3 co )\n" -"{\n" -" return world_compute_lighting( diffuse, normal, co, compute_board_shadow() );\n" -"}\n" -"\n" -"#line 14 0 \n" -"#line 1 3 \n" -"const float k_motion_lerp_amount = 0.01;\n" -"\n" -"#line 2 0 \n" -"\n" -"layout (location = 1) out vec2 oMotionVec;\n" -"\n" -"in vec3 aMotionVec0;\n" -"in vec3 aMotionVec1;\n" -"\n" -"void compute_motion_vectors()\n" -"{\n" -" // Write motion vectors\n" -" vec2 vmotion0 = aMotionVec0.xy / aMotionVec0.z;\n" -" vec2 vmotion1 = aMotionVec1.xy / aMotionVec1.z;\n" -"\n" -" oMotionVec = (vmotion1-vmotion0) * (1.0/k_motion_lerp_amount);\n" -"}\n" -"\n" -"#line 15 0 \n" -"\n" -"vec4 water_surf( vec3 halfview, vec3 vnorm, float depthvalue )\n" -"{\n" -" vec3 surface_tint = mix(uShoreColour, uOceanColour, depthvalue);\n" -"\n" -" float ffresnel = pow(1.0-dot( vnorm, halfview ),5.0);\n" -"\n" -" vec3 lightdir = vec3(0.95,0.0,-0.3);\n" -" vec3 specdir = reflect( -lightdir, vnorm );\n" -" float spec = pow(max(dot(halfview,specdir),0.0),20.0)*0.3;\n" -" \n" -" return vec4( surface_tint + spec, max(min(depthvalue*4.0, 1.0),0.0) );\n" -"}\n" -"\n" -"void main()\n" -"{\n" -" compute_motion_vectors();\n" -"\n" -" // Surface colour composite\n" -" float depthvalue = clamp( -world_water_depth( aCo )*(1.0/25.0), 0.0, 1.0 );\n" -"\n" -" vec2 world_coord = aCo.xz * 0.008;\n" -" vec4 time_offsets = vec4( uTime ) * vec4( 0.008, 0.006, 0.003, 0.03 );\n" -" vec4 dudva = texture( uTexDudv, world_coord + time_offsets.xy )-0.5;\n" -" vec4 dudvb = texture( uTexDudv, world_coord *7.0 - time_offsets.zw )-0.5;\n" -"\n" -" vec3 surfnorm = dudva.rgb + dudvb.rgb;\n" -" surfnorm = normalize(vec3(0.0,1.0,0.0) + dudva.xyz*0.4 + dudvb.xyz*0.1);\n" -" \n" -" // Foam\n" -" float fband = fract( aCo.z*0.02+uTime*0.1+depthvalue*10.0 );\n" -" fband = step( fband+dudva.a*0.8, 0.3 ) * max((1.0-depthvalue*4.0),0.0);\n" -"\n" -" // Lighting\n" -" vec3 halfview = -normalize( aCo-uCamera );\n" -"\n" -" // Fog\n" -" float fdist = pow(length( aCo.xz-uCamera.xz ) * 0.00047, 2.6);\n" -"\n" -" // Composite\n" -" vec4 vsurface = water_surf( halfview, surfnorm, depthvalue );\n" -" vsurface.a -= fdist;\n" -" oColour = mix( vsurface, vec4(1.0,1.0,1.0,0.5), fband );\n" -" oColour.rgb = scene_compute_lighting( oColour.rgb, aNorm.xyz, aWorldCo );\n" -"}\n" -""}, -}; - -static GLuint _uniform_scene_water_fast_uMdl; -static GLuint _uniform_scene_water_fast_uPv; -static GLuint _uniform_scene_water_fast_uPvmPrev; -static GLuint _uniform_scene_water_fast_uTexDudv; -static GLuint _uniform_scene_water_fast_uTime; -static GLuint _uniform_scene_water_fast_uCamera; -static GLuint _uniform_scene_water_fast_uSurfaceY; -static GLuint _uniform_scene_water_fast_uBoard0; -static GLuint _uniform_scene_water_fast_uBoard1; -static GLuint _uniform_scene_water_fast_uShoreColour; -static GLuint _uniform_scene_water_fast_uOceanColour; -static GLuint _uniform_scene_water_fast_g_world_depth; -static GLuint _uniform_scene_water_fast_uLightsArray; -static GLuint _uniform_scene_water_fast_uLightsIndex; -static void shader_scene_water_fast_uMdl(m4x3f m){ - glUniformMatrix4x3fv(_uniform_scene_water_fast_uMdl,1,GL_FALSE,(float*)m); + glUniformMatrix4x3fv(_uniform_scene_water_fast_uMdl,1,GL_FALSE,(f32*)m); } -static void shader_scene_water_fast_uPv(m4x4f m){ - glUniformMatrix4fv(_uniform_scene_water_fast_uPv,1,GL_FALSE,(float*)m); +static inline void shader_scene_water_fast_uPv(m4x4f m) +{ + glUniformMatrix4fv(_uniform_scene_water_fast_uPv,1,GL_FALSE,(f32*)m); } -static void shader_scene_water_fast_uPvmPrev(m4x4f m){ - glUniformMatrix4fv(_uniform_scene_water_fast_uPvmPrev,1,GL_FALSE,(float*)m); +static inline void shader_scene_water_fast_uPvmPrev(m4x4f m) +{ + glUniformMatrix4fv(_uniform_scene_water_fast_uPvmPrev,1,GL_FALSE,(f32*)m); } -static void shader_scene_water_fast_uTexDudv(int i){ +static inline void shader_scene_water_fast_uTexDudv(int i) +{ glUniform1i(_uniform_scene_water_fast_uTexDudv,i); } -static void shader_scene_water_fast_uTime(float f){ +static inline void shader_scene_water_fast_uTime(f32 f) +{ glUniform1f(_uniform_scene_water_fast_uTime,f); } -static void shader_scene_water_fast_uCamera(v3f v){ +static inline void shader_scene_water_fast_uCamera(v3f v) +{ glUniform3fv(_uniform_scene_water_fast_uCamera,1,v); } -static void shader_scene_water_fast_uSurfaceY(float f){ +static inline void shader_scene_water_fast_uSurfaceY(f32 f) +{ glUniform1f(_uniform_scene_water_fast_uSurfaceY,f); } -static void shader_scene_water_fast_uBoard0(v3f v){ +static inline void shader_scene_water_fast_uBoard0(v3f v) +{ glUniform3fv(_uniform_scene_water_fast_uBoard0,1,v); } -static void shader_scene_water_fast_uBoard1(v3f v){ +static inline void shader_scene_water_fast_uBoard1(v3f v) +{ glUniform3fv(_uniform_scene_water_fast_uBoard1,1,v); } -static void shader_scene_water_fast_uShoreColour(v3f v){ +static inline void shader_scene_water_fast_uShoreColour(v3f v) +{ glUniform3fv(_uniform_scene_water_fast_uShoreColour,1,v); } -static void shader_scene_water_fast_uOceanColour(v3f v){ +static inline void shader_scene_water_fast_uOceanColour(v3f v) +{ glUniform3fv(_uniform_scene_water_fast_uOceanColour,1,v); } -static void shader_scene_water_fast_g_world_depth(int i){ +static inline void shader_scene_water_fast_g_world_depth(int i) +{ glUniform1i(_uniform_scene_water_fast_g_world_depth,i); } -static void shader_scene_water_fast_register(void){ - vg_shader_register( &_shader_scene_water_fast ); -} -static void shader_scene_water_fast_use(void){ glUseProgram(_shader_scene_water_fast.id); } -static void shader_scene_water_fast_link(void){ - _uniform_scene_water_fast_uMdl = glGetUniformLocation( _shader_scene_water_fast.id, "uMdl" ); - _uniform_scene_water_fast_uPv = glGetUniformLocation( _shader_scene_water_fast.id, "uPv" ); - _uniform_scene_water_fast_uPvmPrev = glGetUniformLocation( _shader_scene_water_fast.id, "uPvmPrev" ); - _uniform_scene_water_fast_uTexDudv = glGetUniformLocation( _shader_scene_water_fast.id, "uTexDudv" ); - _uniform_scene_water_fast_uTime = glGetUniformLocation( _shader_scene_water_fast.id, "uTime" ); - _uniform_scene_water_fast_uCamera = glGetUniformLocation( _shader_scene_water_fast.id, "uCamera" ); - _uniform_scene_water_fast_uSurfaceY = glGetUniformLocation( _shader_scene_water_fast.id, "uSurfaceY" ); - _uniform_scene_water_fast_uBoard0 = glGetUniformLocation( _shader_scene_water_fast.id, "uBoard0" ); - _uniform_scene_water_fast_uBoard1 = glGetUniformLocation( _shader_scene_water_fast.id, "uBoard1" ); - _uniform_scene_water_fast_uShoreColour = glGetUniformLocation( _shader_scene_water_fast.id, "uShoreColour" ); - _uniform_scene_water_fast_uOceanColour = glGetUniformLocation( _shader_scene_water_fast.id, "uOceanColour" ); - _uniform_scene_water_fast_g_world_depth = glGetUniformLocation( _shader_scene_water_fast.id, "g_world_depth" ); - _uniform_scene_water_fast_uLightsArray = glGetUniformLocation( _shader_scene_water_fast.id, "uLightsArray" ); - _uniform_scene_water_fast_uLightsIndex = glGetUniformLocation( _shader_scene_water_fast.id, "uLightsIndex" ); +static inline void shader_scene_water_fast_use(void); +static inline void shader_scene_water_fast_use(void) +{ + glUseProgram(_shader_scene_water_fast.id); } -#endif /* SHADER_scene_water_fast_H */