Cuando se usan texturas en GLSL, es mejor calcular las coordenadas de textura finales en el sombreador de vértices y entregarlas al sombreador de fragmentos usando varying
s. Ejemplo con un simple giro en la coordenada y:
// Vertex shader
attribute vec2 texture;
varying highp vec2 texCoord;
// ...
void main() {
texCoord = vec2(texture.x, 1.0-texture.y);
// ...
}
// Fragment shader
varying highp vec2 textureCoordinates;
uniform sampler2D tex;
// ...
void main() {
highp vec4 texColor = texture2D(tex, texCoord);
// ...
}
Si el giro en la coordenada y, o una operación aún más simple como agregar vec2(0.5)
a la coordenada de textura se realiza en el sombreador de fragmentos, el acceso a la textura es mucho más lento. ¿Por qué?
Como nota, por ejemplo, mezclar dos texturas, usando una suma ponderada de ellas, es mucho más barato en términos de tiempo y también debe hacerse para cada píxel, por lo que el cálculo de la coordenada de textura en sí no parece ser tan costoso.