Використовуючи текстури в GLSL, найкраще обчислити кінцеві координати текстури у вершинній шейдері та здати їх на шейдер фрагмента за допомогою varying
s. Приклад з простим перевертанням координати 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);
// ...
}
Якщо перевертання координати y або ще простіша операція, наприклад додавання vec2(0.5)
до координати текстури, виконується в шейдері фрагмента, доступ до текстури стає набагато повільнішим. Чому?
Як зауваження, наприклад, змішування двох текстур із застосуванням зваженої їх суми значно дешевше за час, а також потрібно робити для кожного пікселя, тому сам розрахунок координати текстури не здається таким дорогим.