相关疑难解决方法(0)

丢弃对OpenGL中的程序性能有害吗?

我正在读这篇文章,作者写道:

以下是通过两个简单步骤在每个平台上编写高性能应用程序的方法:
[...]
遵循最佳实践.在Android和OpenGL的情况下,这包括"批量绘制调用","不在片段着色器中使用丢弃"等内容.

我从来没有听说丢弃会对性能等产生不良影响,并且一直在使用它来避免在没有必要时使用详细的alpha时进行混合.

有人可以解释为什么以及何时使用丢弃可能被认为是一种不好的做法,以及discard + depthtest与alpha + blend相比如何?

编辑:在收到关于这个问题的答案后,我做了一些测试,通过渲染背景渐变,顶部有纹理四边形.

  • 使用GL_DEPTH_TEST和以" if( gl_FragColor.a < 0.5 ){ discard; }" 行结尾的片段着色器给出了大约32 fps.
  • 从片段着色器中删除if/discard语句会将渲染速度提高到大约44 fps.
  • 使用GL_BLEND和混合函数"(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA)"而不是GL_DEPTH_TEST也导致大约44 fps.

shader android opengl-es opengl-es-2.0

22
推荐指数
2
解决办法
2万
查看次数

标签 统计

android ×1

opengl-es ×1

opengl-es-2.0 ×1

shader ×1