1 #ifndef SHADER_background_H
2 #define SHADER_background_H
3 static void shader_background_link(void);
4 static void shader_background_register(void);
5 static struct vg_shader _shader_background
= {
7 .link
= shader_background_link
,
10 .orig_file
= "shaders/background.vs.glsl",
12 "layout (location=0) in vec2 a_co;\n"
14 "uniform vec3 uOffset;\n"
16 "out vec2 aTexCoords;\n"
19 " vec2 world_pos = a_co * uOffset.z + uOffset.xy;\n"
20 " gl_Position = vec4( uPv * vec3( world_pos, 1.0 ), 1.0 );\n"
21 " aTexCoords = a_co;\n"
26 .orig_file
= "shaders/background.fs.glsl",
28 "out vec4 FragColor;\n"
30 "uniform sampler2D uTexMain;\n"
31 "uniform sampler2D uSamplerNoise;\n"
32 "uniform float uVariance;\n"
33 "uniform float uVisibility;\n"
35 "in vec2 aTexCoords;\n"
38 " vec4 data_this_tile = texture( uTexMain, aTexCoords );\n"
40 " float ao_accum = 0.0;\n"
41 " vec2 random_noise;\n"
43 " for( int i=0; i<10; ++i ){\n"
44 " random_noise = (texture( uSamplerNoise, \n"
45 " aTexCoords*10.0 + float(i)*0.2 ).xy - vec2(0.5)) \n"
47 " vec4 background = texture( uTexMain, aTexCoords + random_noise );\n"
48 " float height_diff = min(data_this_tile.r - background.r,0.0);\n"
49 " ao_accum += height_diff * clamp((1.0 - length( random_noise )), 0.0, 1.0);\n"
51 " ao_accum *= 0.15;\n"
53 " vec2 square_coords = fract( aTexCoords * 64.0 );\n"
54 " vec2 grid_coords = abs( square_coords - 0.5 );\n"
55 " float gridline = step( 0.49, max(grid_coords.x,grid_coords.y) );\n"
57 " vec3 colour_main = mix( vec3( 0.14 ) + random_noise.x*0.5, \n"
58 " vec3( 0.1 ) + gridline*0.02, \n"
59 " data_this_tile.g * uVisibility );\n"
60 " FragColor = vec4( colour_main + ao_accum*0.05, 1.0 );\n"
65 static GLuint _uniform_background_uPv
;
66 static GLuint _uniform_background_uOffset
;
67 static GLuint _uniform_background_uTexMain
;
68 static GLuint _uniform_background_uSamplerNoise
;
69 static GLuint _uniform_background_uVariance
;
70 static GLuint _uniform_background_uVisibility
;
71 static void shader_background_uPv(m3x3f m
){
72 glUniformMatrix3fv(_uniform_background_uPv
,1,GL_FALSE
,(float*)m
);
74 static void shader_background_uOffset(v3f
const v
){
75 glUniform3fv(_uniform_background_uOffset
,1,v
);
77 static void shader_background_uTexMain(int i
){
78 glUniform1i(_uniform_background_uTexMain
,i
);
80 static void shader_background_uSamplerNoise(int i
){
81 glUniform1i(_uniform_background_uSamplerNoise
,i
);
83 static void shader_background_uVariance(float f
){
84 glUniform1f(_uniform_background_uVariance
,f
);
86 static void shader_background_uVisibility(float f
){
87 glUniform1f(_uniform_background_uVisibility
,f
);
89 static void shader_background_register(void){
90 vg_shader_register( &_shader_background
);
92 static void shader_background_use(void){ glUseProgram(_shader_background
.id
); }
93 static void shader_background_link(void){
94 _uniform_background_uPv
= glGetUniformLocation( _shader_background
.id
, "uPv" );
95 _uniform_background_uOffset
= glGetUniformLocation( _shader_background
.id
, "uOffset" );
96 _uniform_background_uTexMain
= glGetUniformLocation( _shader_background
.id
, "uTexMain" );
97 _uniform_background_uSamplerNoise
= glGetUniformLocation( _shader_background
.id
, "uSamplerNoise" );
98 _uniform_background_uVariance
= glGetUniformLocation( _shader_background
.id
, "uVariance" );
99 _uniform_background_uVisibility
= glGetUniformLocation( _shader_background
.id
, "uVisibility" );
101 #endif /* SHADER_background_H */