Quando si usano le trame in GLSL, è meglio calcolare le coordinate finali della trama nello shader di vertice e consegnarle allo shader di frammento usando varying
s. Esempio con un semplice capovolgimento nella coordinata 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 il capovolgimento della coordinata y, o un'operazione ancora più semplice come l'aggiunta vec2(0.5)
alla coordinata della trama, viene eseguita nello shader di frammenti, l'accesso alla trama è molto più lento. Perché?
Come nota, ad esempio la fusione di due trame, usando una somma ponderata di esse, è molto più economica in termini di tempo e deve anche essere eseguita per ogni pixel, quindi il calcolo della coordinata della trama stessa non sembra essere così costoso.