uniform int flipTexture; uniform mat4 rotationMatrix; uniform int texCoords0GenType; uniform int texCoords0Source; uniform mat4 textureTransforms[3]; vec2 rotateUV(vec2 uv, float rotation) { float mid = 0.5; return vec2( cos(rotation) * (uv.x - mid) + sin(rotation) * (uv.y - mid) + mid, cos(rotation) * (uv.y - mid) - sin(rotation) * (uv.x - mid) + mid ); } vec2 SetFlip(vec2 tex) { vec2 outTexCoord = tex; if (flipTexture == 1) //FlipH return vec2(-1.0, 1.0) * tex + vec2(1.0, 0.0); else if (flipTexture == 2) //FlipV return vec2(1.0, -1.0) * tex + vec2(0.0, 1.0); else if (flipTexture == 3) //Rotate90 return rotateUV(tex, radians(90.0)); else if (flipTexture == 4) //Rotate180 return rotateUV(tex, radians(180.0)); else if (flipTexture == 5) //Rotate270 return rotateUV(tex, radians(270.0)); return outTexCoord; } vec2 SetTexCoordType(int type, vec2 tex) { vec2 outTexCoord = tex; if (type == 0) return tex; //Tex0 if (type == 1) return tex; //Tex1 if (type == 2) return tex; //Tex2 if (type == 3) return tex; //Ortho if (type == 4) return tex; //Pane based if (type == 5) return tex; //Proj return outTexCoord; } void main() { gl_FrontColor = gl_Color; gl_TexCoord[0] = textureTransforms[0] * gl_MultiTexCoord0; gl_TexCoord[0].st = SetFlip(vec2(0.5, 0.5) + gl_TexCoord[0].st); gl_Position = gl_ModelViewProjectionMatrix * rotationMatrix * gl_Vertex; }