2010-07-31 26 views
8

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

我也检查了GL层混合其他类型的东西,可能会导致这种情况发生,但它是这样。

所以,如果有人知道什么可能导致glAlphaFuncx出现在CPU采样器的性能跟踪,我会很高兴听到这个消息:)

更新:固定的截图链接:http://twitpic.com/2afxho/full

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

[context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

更新3:我想设置这个功能里面的断点,但似乎并没有在所有被调用。我想这里的分析器是搞砸了......

+2

您的截图并不工作:( – Calvin1602 2010-08-01 19:48:42

+0

抱歉的是,固定 – Anton 2010-08-03 08:48:40

回答

1

这个功能出现在探查器轨迹上,这很奇怪,就像你说你没有使用它。尝试在glAlphaFuncx中设置一个断点来查看它被调用的位置。

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

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

+0

我试图禁用它 - 没有运气 至于invokation的地方 - 请看看我的更新,它似乎是由[背景presentRenderbuffer调用: GL_RENDERBUFFER_OES]。 我担心的原因是应用程序的性能不高,尽管我渲染的几何图形很少,所以如果我可以修复它,它会很好... – Anton 2010-08-03 16:52:53

+0

那么,如果该功能是真的启用和使用alpha测试,你可以做的事情不多 我会使用OpenGL分析器/调试器,比如gDebugger,来看看GL管线的哪一部分是你的瓶颈,注意一个CPU分析器有点不值钱因为CPU和GPU并行运行。 – 2010-08-03 17:56:01

+0

问题是,iPod Touch完美地运行应用程序(FPS = 60),所以我的猜测CPU是瓶颈(AFAIK他们有相同的GPU) – Anton 2010-08-03 19:31:02

0

从我所看到的,glAlphaFuncx可能只是设置渲染或推动像素点击。这可能是它在渲染中首先运行或最后运行。

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

如果是这样,你应该在glAlphaFuncx中设置一个断点并查看它从哪里被调用以及为什么。要做到这一点,只需调出调试器控制台并输入“break glAlphaFuncx”即可。

+0

好吧,我希望应用程序运行速度更快,这样对我来说就足够平滑。 我试着在这个函数里面设置断点,但好像根本没有被调用过。我猜这里的分析器是搞砸了...... – Anton 2010-08-04 08:31:53

0

无论系统,这种行为 - 花费的时间呈现什么被吸引 - 几乎总是表示该GPU是瓶颈。要么你画得太多(如果帧率有问题),要么CPU不够用(如果帧率很好)。

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

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