【发布时间】:2012-01-20 11:56:08
【问题描述】:
我正在阅读this的文章,作者写道:
以下是如何通过两个简单的步骤在每个平台上编写高性能应用程序:
[...]
遵循最佳实践。对于 Android 和 OpenGL,这包括诸如“批量绘制调用”、“不要在片段着色器中使用丢弃”等内容。
我以前从未听说过丢弃会对性能等产生不良影响,并且一直使用它来避免在不需要详细 alpha 时进行混合。
有人可以解释一下为什么以及何时使用丢弃可能被认为是一种不好的做法,以及丢弃 + 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。
【问题讨论】:
-
很有趣的问题,希望有人能解答。
标签: android opengl-es opengl-es-2.0 shader