2013-04-22 114 views
1

我正在使用OpenGL ES分析器。它显示调用glResolveMultisampleFramebufferAPPLE()需要大约90%的运行时间。这是典型的,还是我的代码有一些低效率?这里是我的绘制代码:iPad OpenGL ES极其缓慢glResolveMultisampleFramebufferAPPLE()

glBindFramebuffer(GL_FRAMEBUFFER, sampleFramebuffer); 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

// Draw Stuff . . . 

glBindFramebuffer(GL_DRAW_FRAMEBUFFER_APPLE, defaultFramebuffer); 
glBindFramebuffer(GL_READ_FRAMEBUFFER_APPLE, sampleFramebuffer); 
glResolveMultisampleFramebufferAPPLE(); 

const GLenum discard1[] = {GL_COLOR_ATTACHMENT0, GL_DEPTH_ATTACHMENT}; 
glDiscardFramebufferEXT(GL_READ_FRAMEBUFFER_APPLE, 2, discard1); 
const GLenum discard2[] = {GL_DEPTH_ATTACHMENT}; 
glDiscardFramebufferEXT(GL_DRAW_FRAMEBUFFER_APPLE, 1, discard2); 

glBindRenderbuffer(GL_RENDERBUFFER, colorRenderbuffer); 
[[EAGLContext currentContext] presentRenderbuffer:GL_RENDERBUFFER]; 

场景很复杂,每帧渲染了超过一百万个三角形。我认为我的慢帧速率(10帧/秒)是由于平局 - 而不是多抽样。有什么想法吗?

+0

您使用了多少个样品?你是否正在调用像glRenderbufferStorageMultisampleAPPLE(GL_RENDERBUFFER_OES,4,GL_RGB565_OES,backingWidth,backingHeight); ? – HalR 2013-04-22 23:09:52

+0

是的,我正在使用内部格式为GL_RGBA8_OES的4个样本。 – AbleArcher 2013-04-22 23:36:43

+0

是的,这是推动大量数据。说得通。您是否尝试过使用GL_RGB5_A1_OES或更少的样本? – HalR 2013-04-22 23:42:49

回答

1

如果你在iPad上,尤其是如果你在视网膜上,多次采样可能会非常昂贵,所以它对我来说并不意外。我知道许多图形显卡都停止吹嘘自己可以抽出数百万个多边形,因为大家都知道,你推的多少tris并不重要,因为你的后期处理和着色器确实占用了你所有的时间。

+0

感谢您的信息,但10 fps中的90%给每次调用glResolveMultisampleFramebufferAPPLE()的总时间,这是其他人显然没有遇到的,因此它必须是别的。 – AbleArcher 2013-05-26 17:07:13

0

这是一个棘手的问题。我不能说我得到的所有细节都正确,但我相信我从OpenGL ES Analyzer和我自己的日志信息中获得了冲突的信息。我自己的日志告诉我所花费的时间是在每次单独调用glDrawElements()时,这表明三角形的数量是问题。我根据所需的细节开始使用不同的VAO,这对我有很大的帮助。