Używając tekstur w GLSL, najlepiej obliczyć ostateczne współrzędne tekstury w module cieniującym wierzchołki i przekazać je do modułu cieniującego fragmenty za pomocą varying
s. Przykład z prostym przerzuceniem we współrzędnej 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);
// ...
}
Jeśli przerzucanie współrzędnej y lub jeszcze prostsza operacja, taka jak dodanie vec2(0.5)
do współrzędnej tekstury, jest wykonywana w module cieniującym fragmenty, dostęp do tekstury jest znacznie wolniejszy. Dlaczego?
Uwaga: np. Zmieszanie dwóch tekstur przy użyciu ich ważonej sumy jest znacznie tańsze pod względem czasu i również musi zostać wykonane dla każdego piksela, więc obliczenie samej współrzędnej tekstury nie wydaje się tak kosztowne.