0

我正在实施渲染到纹理的概念,并且对 FBO 的范围有疑问。在我完成对默认 FBO 的 glDrawArrays 调用并渲染到纹理后,我将删除纹理和非默认 FBO。然后我调用 glReadPixels 来读取默认 FBO 上的内容。所以,我的问题是我做得对吗?我的意思是我应该在删除 FBO 和纹理之前调用 readpixel 吗?

我假设在默认 FBO 上绘制后,我们不需要非默认 FBO 和纹理,但后来一些 OpenGL 开发人员告诉我,我在上面提到的应用程序中做了一些奇怪的事情。请帮助我理解这一点。

以下是我正在遵循的步骤:

  1. 创建一个帧缓冲区对象并附加一个合适的纹理作为颜色附件
  2. 绑定和清除FBO
  3. 渲染一些原语
  4. 取消绑定 FBO 从而切换回系统 FBO
  5. 绑定用作颜色附件的纹理
  6. 使用上面创建的纹理在系统 FBO 上渲染。
  7. 删除创建的纹理和 FBO。
  8. 来自系统 FBO 的 glReadpixel。

现在,正如我在系统 FBO 上渲染的那样。为什么我们仍然需要该纹理和其他用作纹理的 FBO?

注意:我使用术语系统 FBO 来区分两个 FBO,这是我的术语。

4

1 回答 1

0

我建议阅读: http: //www.songho.ca/opengl/gl_fbo.html

但总而言之,这里是 OpenGL 中渲染到纹理的一些伪代码

init() {
    // setup FBO, attachments, etc...
}

render() {
    glBindFramebuffer(your_fbo);
    glClearBuffer(...);
    renderScene();

    glBindFramebuffer(0);  // setup default, system FBO
    glBindTexture(texture_id_that_was_attached_to_FBO);
    renderSecondScene();
}

渲染场景后无需删除纹理或 fbo,在应用程序结束时在某些清理过程中删除它们。

于 2013-02-15T06:52:14.673 回答