【发布时间】:2023-04-05 00:26:01
【问题描述】:
Brad Larson 提供了一些很棒的代码 here 和 here 用于“将场景渲染到支持纹理的帧缓冲区”,但目前尚不清楚这是否与我用于绘图的其余部分的帧缓冲区相同。
如果将渲染缓冲区附加到帧缓冲区,帧缓冲区是否也可以通过相同的调用渲染到纹理中?
【问题讨论】:
标签: ios textures opengl-es-2.0 fbo
Brad Larson 提供了一些很棒的代码 here 和 here 用于“将场景渲染到支持纹理的帧缓冲区”,但目前尚不清楚这是否与我用于绘图的其余部分的帧缓冲区相同。
如果将渲染缓冲区附加到帧缓冲区,帧缓冲区是否也可以通过相同的调用渲染到纹理中?
【问题讨论】:
标签: ios textures opengl-es-2.0 fbo
听起来您可能对 FBO 的使用有些困惑。如果您需要它,这应该可以帮助您入门:Apple Developer - Drawing offscreen。 This 也有帮助。
渲染缓冲区是您可以绑定到 FBO(帧缓冲区对象)的东西。 FBO 是您在不希望立即显示渲染但想要读取渲染结果或对其执行额外渲染时创建的东西。 FBO 在 OpenGL ES 2.0 中的工作方式,您只有一个可用的颜色连接点(GL_COLOR_ATTACHMENT0 - 您的片段着色器输出变量 gl_FragColor 连接到此连接点),并且它只能连接一个纹理或渲染缓冲区。因此,要回答最后一个问题,您不能拥有一个同时将颜色写入渲染缓冲区和纹理的 FBO。
至于您问题的第一部分,这取决于您是否已经在使用 FBO 或默认帧缓冲区。您正在寻找的行为可能是这样的:
希望这能稍微回答你的问题。
【讨论】:
var defaultFrameBuffer: GLint = 0glGetIntegerv(GLenum(GL_FRAMEBUFFER_BINDING), &defaultFrameBuffer) 然后在上面提到的第 3 步,绑定回默认帧缓冲区:glBindFramebuffer(GLenum(GL_FRAMEBUFFER), GLuint(defaultFrameBuffer))。如您所见,defaultFrameBuffer 不是 0。