我正在创建一个应用程序,我需要在屏幕上绘制很多圆圈,所以我有了更换三角形纹理的想法,我用它来绘制带有绘制圆形功能的纹理。然而,在测试之后,结果比从纹理中选择值慢(尽管质量非常优越)。这是我生产圆圈的方式有问题,还是从纹理读取真的要快得多? (大约快两倍)
新代码:
precision mediump float;
uniform sampler2D u_Texture;
varying vec4 vColor;
varying vec2 vTexCoordinate;
void main() {
gl_FragColor = vec4(0, 0, 0, 0);
mediump float thing = vTexCoordinate.x * vTexCoordinate.x + vTexCoordinate.y * vTexCoordinate.y;
if(thing < 1.0 && thing > 0.9){
gl_FragColor = vec4(0, 0, 0, 1);
}
if(thing < 0.9){
gl_FragColor = vec4(1, 1, 1, 1) * vColor;
}
};
旧代码:
gl_FragColor = texture2D(u_Texture, vTexCoordinate) * vColor;
obs:我没有费心重命名vTexCoordinate,因此现在它的值为[-1,1],其中[0,1]
答案 0 :(得分:0)
GPU上的条件分支非常昂贵,因为没有分支预测,也可能是其他原因。此外,纹理查找延迟通常可以在着色器处理开销下隐藏,因此实际上它最终可能会更快地工作。因此,如果可以的话,最好避免使用GLSL中的分支和循环。