为什么在绘制圆形过程中比从纹理中读取要慢?

时间:2013-09-13 15:14:34

标签: opengl-es-2.0 geometry fragment-shader

我正在创建一个应用程序,我需要在屏幕上绘制很多圆圈,所以我有了更换三角形纹理的想法,我用它来绘制带有绘制圆形功能的纹理。然而,在测试之后,结果比从纹理中选择值慢(尽管质量非常优越)。这是我生产圆圈的方式有问题,还是从纹理读取真的要快得多? (大约快两倍)

新代码:

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]

1 个答案:

答案 0 :(得分:0)

GPU上的条件分支非常昂贵,因为没有分支预测,也可能是其他原因。此外,纹理查找延迟通常可以在着色器处理开销下隐藏,因此实际上它最终可能会更快地工作。因此,如果可以的话,最好避免使用GLSL中的分支和循环。