我有一些类似于以下的顶点着色器代码(这是一个简化的示例):
attribute vec2 aPosition;
attribute vec4 aColor;
varying lowp vec4 vColor;
uniform vec4 uViewport;
mat4 viewportScale = mat4(2.0 / uViewport.z, 0, 0, 0, 0, -2.0 / uViewport.w, 0,0, 0, 0,1,0, -1,+1,0,1);
void main() {
vec2 pos = aPosition;
gl_Position = viewportScale * vec4(pos, 0, 1);
vColor = vec4(aColor.rgb*aColor.a, aColor.a);
}
特别是,viewportScale
矩阵计算自uViewport
制服在主函数之外。从浏览器(WebGL)使用它,它似乎在我测试过的每台机器上都能正常工作......特别是,viewportScale
当我更改时矩阵会正确更新uViewport
多变的。这样做和在主函数内部进行相同的计算有什么区别吗?我找不到与此相关的任何示例或讨论。
我遇到了一个相关问题这让我对这个问题有点偏执——至少,我想了解到底发生了什么。