first sorta working port
[fishladder.git] / shaders / sprite.h
1 #ifndef SHADER_sprite_H
2 #define SHADER_sprite_H
3 static void shader_sprite_link(void);
4 static void shader_sprite_register(void);
5 static struct vg_shader _shader_sprite = {
6 .name = "sprite",
7 .link = shader_sprite_link,
8 .vs =
9 {
10 .orig_file = "shaders/sprite.vs.glsl",
11 .static_src =
12 "layout (location=0) in vec2 a_co; // quad mesh\n"
13 "uniform vec4 uUv;\n"
14 "uniform vec3 uPos;\n"
15 "\n"
16 "uniform mat3 uPv;\n"
17 "\n"
18 "out vec2 aTexCoords;\n"
19 "\n"
20 "void main(){\n"
21 " vec2 vertex_world = uUv.zw * (a_co-0.5) * uPos.z + uPos.xy;\n"
22 " gl_Position = vec4( uPv * vec3( vertex_world, 1.0 ), 1.0 );\n"
23 " aTexCoords = uUv.xy + a_co*uUv.zw;\n"
24 "}\n"
25 ""},
26 .fs =
27 {
28 .orig_file = "shaders/sprite.fs.glsl",
29 .static_src =
30 "uniform sampler2D uTexMain;\n"
31 "out vec4 FragColor;\n"
32 "\n"
33 "in vec2 aTexCoords;\n"
34 "\n"
35 "void main(){\n"
36 " vec4 texture_sample = texture( uTexMain, aTexCoords );\n"
37 " FragColor = texture_sample;\n"
38 "}\n"
39 ""},
40 };
41
42 static GLuint _uniform_sprite_uUv;
43 static GLuint _uniform_sprite_uPos;
44 static GLuint _uniform_sprite_uPv;
45 static GLuint _uniform_sprite_uTexMain;
46 static void shader_sprite_uUv(v4f const v){
47 glUniform4fv(_uniform_sprite_uUv,1,v);
48 }
49 static void shader_sprite_uPos(v3f const v){
50 glUniform3fv(_uniform_sprite_uPos,1,v);
51 }
52 static void shader_sprite_uPv(m3x3f m){
53 glUniformMatrix3fv(_uniform_sprite_uPv,1,GL_FALSE,(float*)m);
54 }
55 static void shader_sprite_uTexMain(int i){
56 glUniform1i(_uniform_sprite_uTexMain,i);
57 }
58 static void shader_sprite_register(void){
59 vg_shader_register( &_shader_sprite );
60 }
61 static void shader_sprite_use(void){ glUseProgram(_shader_sprite.id); }
62 static void shader_sprite_link(void){
63 _uniform_sprite_uUv = glGetUniformLocation( _shader_sprite.id, "uUv" );
64 _uniform_sprite_uPos = glGetUniformLocation( _shader_sprite.id, "uPos" );
65 _uniform_sprite_uPv = glGetUniformLocation( _shader_sprite.id, "uPv" );
66 _uniform_sprite_uTexMain = glGetUniformLocation( _shader_sprite.id, "uTexMain" );
67 }
68 #endif /* SHADER_sprite_H */