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 }