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
= {
7 .link
= shader_sprite_link
,
10 .orig_file
= "shaders/sprite.vs.glsl",
12 "layout (location=0) in vec2 a_co; // quad mesh\n"
14 "uniform vec3 uPos;\n"
18 "out vec2 aTexCoords;\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"
28 .orig_file
= "shaders/sprite.fs.glsl",
30 "uniform sampler2D uTexMain;\n"
31 "out vec4 FragColor;\n"
33 "in vec2 aTexCoords;\n"
36 " vec4 texture_sample = texture( uTexMain, aTexCoords );\n"
37 " FragColor = texture_sample;\n"
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
);
49 static void shader_sprite_uPos(v3f
const v
){
50 glUniform3fv(_uniform_sprite_uPos
,1,v
);
52 static void shader_sprite_uPv(m3x3f m
){
53 glUniformMatrix3fv(_uniform_sprite_uPv
,1,GL_FALSE
,(float*)m
);
55 static void shader_sprite_uTexMain(int i
){
56 glUniform1i(_uniform_sprite_uTexMain
,i
);
58 static void shader_sprite_register(void){
59 vg_shader_register( &_shader_sprite
);
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" );
68 #endif /* SHADER_sprite_H */