gpt4 book ai didi

iOS OpenGL ES : when should I bind the frame buffer and render buffer?

转载 作者:行者123 更新时间:2023-11-29 11:23:32 25 4
gpt4 key购买 nike

我有一些 OpenGL ES 代码,如下所示:

- (void)drawView {
[EAGLContext setCurrentContext:context];

glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glViewport(0, 0, backingWidth, backingHeight);

[game drawFrame];

glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];

[self checkGLError:NO];
}

我的问题是:我应该什么时候调用 glBindFramebufferOESglBindRenderbufferOES?老实说,我不记得为什么我在上面的示例中以这种方式编写代码(几个月前),我开始回到 iOS 上的 OpenGL ES,我正在尝试了解帧缓冲区和渲染缓冲区的工作原理。

我应该在每一帧调用这些函数吗?或者我应该只在开始绘制任何帧之前调用它们一次吗?

编辑:我什至应该在每帧的基础上调用 glViewport 吗?在调用 draw 之前,我在一个单独的函数中设置了我的视口(viewport) - 每帧连续调用 glViewPort 是否有意义?

最佳答案

我倾向于忘记哪些调用是多余的,但我可以在这里评论我在有限测试中看到的内容。

在设置场景时,您应该只需要调用一次 glViewport(),除非您将离屏渲染到不同大小的 FBO。在这种情况下,您可以使用 glViewport() 在帧缓冲区之间切换时重置大小。

同样,您应该只需要在设置时使用一次 glBindFramebufferOES(),除非您要切换正在渲染的 FBO 或由于更改而重建当前 FBO查看大小。

在我的示例应用程序中,我发现 glBindRenderbufferOES() 需要在每一帧的 -presentRenderbuffer: 之前使用,否则将不显示任何内容。不过,我可能只是在错误的时间设置了一些东西。

我会通过告诉您您可能想要研究 Xcode 4 来绕过 NDA,其中可能有也可能没有 Instruments 中的新工具可以帮助指出这些冗余的 OpenGL ES 调用。假设。

关于iOS OpenGL ES : when should I bind the frame buffer and render buffer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5233263/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com