// Pass to fragment shader with the same name varying vec2 TexCoords; void main(void) { gl_Position = gl_Vertex; // The origin of the texture coordinates locates at bottom-left // corner rather than top-left corner as defined on screen quad. // Instead of using texture coordinates passed in by OpenGL, we // calculate TexCoords based on vertex position as follows. // // Vertex[0] (-1, -1) to (0, 0) // Vertex[1] (-1, 1) to (0, 1) // Vertex[2] ( 1, 1) to (1, 1) // Vertex[3] ( 1, -1) to (1, 0) // // Texture coordinate system in OpenGL operates differently from // DirectX 3D. It is not necessary to offset TexCoords to texel // center by adding 1.0 / TextureSize / 2.0 TexCoords = (gl_Vertex.xy * 0.5 + 0.5); }