1
在片段着色器中计算纹理坐标时,为什么访问纹理要慢得多?
在GLSL中使用纹理时,最好在顶点着色器中计算最终的纹理坐标,然后使用varyings 将其移交给片段着色器。在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); // ... } 如果vec2(0.5)在片段着色器中执行y坐标的翻转或什至更简单的操作(如添加到纹理坐标),则纹理访问会慢得多。为什么? 需要注意的是,例如,使用它们的加权总和来混合两个纹理在时间上要便宜得多,并且还需要针对每个像素完成,因此纹理坐标本身的计算似乎并不那么昂贵。