Ao usar texturas no GLSL, é melhor calcular as coordenadas finais da textura no shader de vértice e entregá-las ao shader de fragmento usando varying
s. Exemplo com um simples giro na 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);
// ...
}
Se o giro na coordenada y, ou uma operação ainda mais simples, como adicionar vec2(0.5)
à coordenada da textura, for realizada no sombreador de fragmentos, o acesso à textura será muito mais lento. Por quê?
Como uma observação, por exemplo, misturar duas texturas, usando uma soma ponderada delas, é muito mais barato em termos de tempo e também precisa ser feito para cada pixel; portanto, o cálculo da coordenada da textura em si não parece tão dispendioso.