webgl切换着色器和纹理的性能成本

时间:2012-07-29 01:30:26

标签: performance webgl

I.切换着色器效果哪种方式更好? 1.使用大的着色器程序并在着色器程序中使用统一的if / else子句来使用差异效果。 2.呼叫之间的切换程序。

II。使用大质地或使用几种小质地更好吗?并且上传纹理费用很多,绑定纹理怎么样?

1 个答案:

答案 0 :(得分:10)

嗯,最好是编写一些性能测试并尝试一般。

  • 小的着色器比大的快。
  • 1纹理比许多纹理更快
  • 上传纹理很慢
  • 绑定纹理很快
  • 切换程序很慢,但通常比将2个小程序组合成1个大程序要快得多。

特别是片段着色器每帧执行数百万次。一个1920x1080的显示器有200万像素,所以没有透支,这仍然意味着你的着色器每帧执行200万次。对于每帧执行200万次的任何事情,或者每秒1.2亿次,每秒目标60帧,更小的情况会更好。

对于纹理,mips比没有mips更快,因为GPU有纹理缓存,如果接下来需要的像素接近它先前读取的像素,它们可能已经在缓存中。如果他们很远,他们就不会在缓存中。这也意味着从纹理中随机读取特别慢。但大多数应用程序通过纹理线性地读取。

切换程序的速度足够慢,以便对使用程序的模型进行排序,以便首先绘制使用程序A的所有模型,然后使用程序B的所有模型通常比以随机顺序绘制它们更快。但是效果表现还有其他一些因素。例如,如果大型模型遮挡小型模型,最好先绘制大型模型,因为小型模型将失败深度测试(z缓冲区),并且不会为任何像素执行其片段着色器。所以这是一个权衡。您所能做的就是测试您的特定应用程序。

此外,以正确的方式进行测试也很重要。 http://updates.html5rocks.com/2012/07/How-to-measure-browser-graphics-performance