Saat menggunakan tekstur dalam GLSL, yang terbaik adalah menghitung koordinat tekstur akhir dalam vertex shader dan menyerahkannya ke shader fragmen menggunakan varying
s. Contoh dengan flip sederhana di koordinat 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);
// ...
}
Jika flip dalam koordinat y, atau operasi yang lebih sederhana seperti menambahkan vec2(0.5)
ke koordinat tekstur dilakukan dalam shader fragmen, akses tekstur jauh lebih lambat. Mengapa?
Sebagai catatan, misalnya memadukan dua tekstur, menggunakan jumlah tertimbang dari mereka, jauh lebih murah dari segi waktu dan juga perlu dilakukan untuk setiap piksel, sehingga perhitungan koordinat tekstur itu sendiri tampaknya tidak terlalu mahal.