Wenn Sie Texturen in GLSL verwenden, berechnen Sie am besten die endgültigen Texturkoordinaten im Vertex-Shader und übergeben Sie sie mit varying
s an den Fragment-Shader . Beispiel mit einem einfachen Umdrehen der y-Koordinate:
// 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);
// ...
}
Wenn das Umblättern der y-Koordinate oder eine noch einfachere Operation wie das Hinzufügen vec2(0.5)
zur Texturkoordinate im Fragment-Shader ausgeführt wird, ist der Texturzugriff viel langsamer. Warum?
Als Hinweis, z. B. das Mischen von zwei Texturen unter Verwendung einer gewichteten Summe davon, ist zeitlich viel billiger und muss auch für jedes Pixel durchgeführt werden, so dass die Berechnung der Texturkoordinate selbst nicht so kostspielig zu sein scheint.