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

NSt*_*tal 3 performance webgl

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

II.使用大纹理或使用几个小质地更好吗?并且上传纹理成本很高,绑定纹理怎么样?

gma*_*man 10

好吧,最好是编写一些性能测试并尝试一般.

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

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

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

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

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