1 #ifndef SHADER_button_H
2 #define SHADER_button_H
3 static void shader_button_link(void);
4 static void shader_button_register(void);
5 static struct vg_shader _shader_button
= {
7 .link
= shader_button_link
,
10 .orig_file
= "shaders/button.vs.glsl",
12 "layout (location=0) in vec2 a_co;\n"
13 "uniform vec4 uOffset; // Tile x/y, uv x/y\n"
16 "out vec2 aTexCoords;\n"
19 " // Vertex transform\n"
20 " vec3 worldpos = vec3( a_co + uOffset.xy, 1.0 );\n"
21 " gl_Position = vec4( uPv * worldpos, 1.0 );\n"
23 " // Create texture coords\n"
24 " vec2 edge_safe_coords = a_co * 0.98 + 0.01;\n"
25 " aTexCoords = (edge_safe_coords + uOffset.zw) * 0.25; \n"
30 .orig_file
= "shaders/button.fs.glsl",
32 "out vec4 FragColor;\n"
34 "uniform sampler2D uTexMain;\n"
35 "uniform vec4 uColour; // rgb, light amount\n"
37 "in vec2 aTexCoords;\n"
40 " vec4 glyph = texture( uTexMain, aTexCoords.xy );\n"
42 " FragColor = vec4( uColour.rgb * \n"
43 " (mix(glyph.r,glyph.g,uColour.a)+0.02)*2.6 + glyph.b * 0.4, \n"
49 static GLuint _uniform_button_uOffset
;
50 static GLuint _uniform_button_uPv
;
51 static GLuint _uniform_button_uTexMain
;
52 static GLuint _uniform_button_uColour
;
53 static void shader_button_uOffset(v4f
const v
){
54 glUniform4fv(_uniform_button_uOffset
,1,v
);
56 static void shader_button_uPv(m3x3f m
){
57 glUniformMatrix3fv(_uniform_button_uPv
,1,GL_FALSE
,(float*)m
);
59 static void shader_button_uTexMain(int i
){
60 glUniform1i(_uniform_button_uTexMain
,i
);
62 static void shader_button_uColour(v4f
const v
){
63 glUniform4fv(_uniform_button_uColour
,1,v
);
65 static void shader_button_register(void){
66 vg_shader_register( &_shader_button
);
68 static void shader_button_use(void){ glUseProgram(_shader_button
.id
); }
69 static void shader_button_link(void){
70 _uniform_button_uOffset
= glGetUniformLocation( _shader_button
.id
, "uOffset" );
71 _uniform_button_uPv
= glGetUniformLocation( _shader_button
.id
, "uPv" );
72 _uniform_button_uTexMain
= glGetUniformLocation( _shader_button
.id
, "uTexMain" );
73 _uniform_button_uColour
= glGetUniformLocation( _shader_button
.id
, "uColour" );
75 #endif /* SHADER_button_H */