1

我正在使用 OpenGL ES 分析器。它表明调用 glResolveMultisampleFramebufferAPPLE() 需要大约 90% 的运行时间。这是典型的,还是我的代码效率低下?这是我的绘图代码:

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 fps)是由于绘制调用 - 而不是多重采样。有什么想法吗?

4

2 回答 2

1

如果你在 iPad 上,尤其是在 Retina 上,多重采样可能会非常昂贵,所以这对我来说并不奇怪。我知道在许多图形视频卡上,他们不再吹嘘自己有能力抽出数百万个多边形,因为每个人都知道你推了多少 tris 并不重要,因为你的后期处理和你的着色器真的占用了你所有的时间。

于 2013-04-22T23:13:35.077 回答
0

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

于 2013-05-26T17:14:47.820 回答