iPhone上的OpenGL性能:跟踪上的glAlphaFuncx

时间:2010-07-31 19:39:03

标签: iphone opengl-es

这有点奇怪,但我注意到在glAlphaFuncx中花费了高达40%的渲染时间。我知道alpha测试非常昂贵,但有趣的是我不使用它:)没有单一的代码使用alpha测试,我也不会以任何其他方式调用此函数。

我还检查了GL图层,以便在其他可能导致这种情况发生的事情上进行混合,但事实就是如此。

所以,如果有人知道什么可能导致glAlphaFuncx出现在CPU Sampler的性能轨迹上,我会很高兴听到它:)

更新:修复了屏幕截图链接:http://twitpic.com/2afxho/full

更新2:导致glAlpaFuncx调用的函数包含一行:

[context presentRenderbuffer:GL_RENDERBUFFER_OES];

更新3:我尝试在此函数中设置断点,但似乎根本没有调用它。我猜这个探测器搞砸了......

4 个答案:

答案 0 :(得分:1)

奇怪的是,此功能出现在探查器跟踪上,正如您所说的那样,您没有使用它。尝试在glAlphaFuncx中设置一个断点,以查看它被调用的位置。

但无论如何,这不应该是一个问题,glAlphaFunc只会在GL服务器端设置一个状态,它不会(或应该)进行更多的处理。它不应该是性能问题,可能是GL实现或分析器中的错误。

可以肯定的是,您可以使用glDisable(GL_ALPHA_TEST)禁用alpha测试。

答案 1 :(得分:0)

从我所看到的情况来看,glAlphaFuncx可能只是用来设置渲染或推动像素。可能是它在渲染中的第一个或最后一个运行。

您是否有实际的性能问题,或者您只是想找到要切片/优化的代码片段?

如果是这样,你应该在glAlphaFuncx中设置一个断点,看看它的调用位置和原因。为此,只需打开调试器控制台并输入“break glAlphaFuncx”。

答案 2 :(得分:0)

您是否尝试过明确禁用Alpha通道?

glDisable(GL_ALPHA_TEST);

http://www.khronos.org/opengles/documentation/opengles1_0/html/glEnable.html

答案 3 :(得分:0)

无论系统如何,这种行为 - 展示所绘制内容的时间 - 几乎总是表明GPU是瓶颈。要么绘图太多(如果帧率有问题),要么CPU做得不够(如果帧率很好)。

实际上,还有另外一种可能性 - GPU工作量很好,但系统正在等待某种垂直回扫期。 (这似乎不太可能只在一台只有液晶显示器的设备上,并且不支持光栅扫描显示,但也许事情在内部仍然以这种方式工作。)结果仍然是相同的CPU工作量去但是,因为你有时间做更多的事情而不影响帧速率。

我无法解释为什么glAlphaFuncx具体出现在调用堆栈中,但是如果它实际上没有被实际调用那么我会认为它是一个红色的鲱鱼,直到证明不然。