我正在阅读this文章,作者写道:



我以前从未听说过丢弃会对性能等产生不良影响,并且在不需要详细的Alpha时会一直使用它来避免混合。

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

编辑:在收到有关此问题的答案后,我通过渲染背景渐变以及顶部的带纹理的四边形进行了一些测试。

  • 使用GL_DEPTH_TEST和以“if(gl_FragColor.a < 0.5 ){ discard; }”行结尾的片段着色器,可以得到 32 fps
  • 从fragment-shader删除if/discard语句的次数增加了
    渲染速度约为 44 fps
  • 将GL_BLEND与混合功能“((GL_SRC_ALPHA,
    GL_ONE_MINUS_SRC_ALPHA)”而不是GL_DEPTH_TEST也导致 44 fps 左右。
  • 最佳答案

    它取决于硬件。对于PowerVR硬件和其他使用基于图块的渲染的GPU,使用discard意味着TBR不能再假定绘制的每个片段都将成为一个像素。该假设很重要,因为它允许TBR首先评估所有深度,然后仅评估最顶部片段的片段着色器。除硬件外,一种延迟渲染方法。

    请注意,打开Alpha测试会遇到相同的问题。

    关于android - 丢弃是否对OpenGL中的程序性能有害?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8509051/

    10-10 06:56