1 module prova.graphics.shaderprograms.sprite;
2 
3 import prova.graphics.shaderprograms;
4 
5 /**
6  * Uniforms:
7  * - mat4 transform
8  * - sampler2D sprite;
9  * - vec4 clip
10  * - vec4 tint
11  */
12 class SpriteShaderProgram : ShaderProgram
13 {
14   ///
15   this()
16   {
17     super();
18 
19     attachVertexShader(
20       "#version 130
21       uniform mat4 transform;
22       in vec4 vertexPosition;
23       out vec2 position;
24 
25       void main() {
26         position = vertexPosition.xy;
27         gl_Position = transform * vertexPosition;
28       }"
29     );
30 
31     attachFragmentShader(
32       "#version 130
33       uniform sampler2D sprite;
34       uniform vec4 clip;
35       uniform vec4 tint;
36 
37       in vec2 position;
38       out vec4 fragmentColor;
39 
40       void main() {
41         vec2 texPos = vec2(
42           clip.x + (position.x) * clip.z,
43           clip.y + (position.y) * clip.w
44         );
45 
46         fragmentColor = texture(sprite, texPos) * tint;
47 
48         if(fragmentColor.a == 0)
49           discard;
50       }"
51     );
52 
53     link();
54   }
55 }