GEOMETRY SHADER
------------------------------------------------------------------
#version 120
//in values from vert shader...
varying in vec2 vSpriteTransform[];
varying in vec4 vSpriteColor[];
varying in vec4 vSpriteTexCoords[];
//out values to frag shader...
varying out vec2 TexCoord;
varying out vec4 Color;
void main() {
mat4 gVP = gl_ModelViewProjectionMatrix;
vec2 pos = gl_PositionIn[0].xy;
vec2 size = vSpriteTransform[0].xy;
vec4 tex = vSpriteTexCoords[0];
//out to frag...
Color = vSpriteColor[0];
gl_Position = gVP * vec4(pos.x, pos.y, 0, 1); //top left
TexCoord = vec2(tex.x, tex.y);
EmitVertex();
gl_Position = gVP * vec4(pos.x+size.x, pos.y, 0, 1); //top right
TexCoord = vec2(tex.x+tex.z, tex.y);
EmitVertex();
gl_Position = gVP * vec4(pos.x, pos.y+size.y, 0, 1); //bottom left
TexCoord = vec2(tex.x, tex.y+tex.w);
EmitVertex();
gl_Position = gVP * vec4(pos.x+size.x, pos.y+size.y, 0, 1); //bottom right
TexCoord = vec2(tex.x+tex.z, tex.y+tex.w);
EmitVertex();
EndPrimitive();
}
VERTEX SHADER
------------------------------------------------------------------
#version 120
//in values...
attribute vec2 SpriteTransform;
attribute vec4 SpriteTexCoords;
attribute vec4 SpriteColor;
//out values...
varying vec2 vSpriteTransform;
varying vec4 vSpriteColor;
varying vec4 vSpriteTexCoords;
void main() {
vSpriteTransform = SpriteTransform;
vSpriteTexCoords = SpriteTexCoords;
vSpriteColor = SpriteColor;
gl_Position = gl_Vertex;
}
VERTEX SHADER
------------------------------------------------------------------
#version 120
uniform sampler2D tex0;
varying vec2 TexCoord;
varying vec4 Color;
void main(void) {
vec4 c = texture2D(tex0, TexCoord);
gl_FragColor = Color * c;
}