关于渲染到纹理

时间:2013-02-15 06:33:04

标签: opengl render-to-texture

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

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

以下是我要遵循的步骤:

  1. 创建一个帧缓冲对象并将合适的纹理作为颜色附件附加
  2. 绑定并清除FBO
  3. 渲染一些原语
  4. 取消绑定FBO,从而切换回系统FBO
  5. 绑定用作颜色附件的纹理
  6. 使用上面创建的纹理渲染系统FBO。
  7. 删除纹理并创建FBO。
  8. 来自系统FBO的glReadpixel。
  9. 现在,正如我在系统FBO上渲染的那样。为什么我们仍然需要纹理和其他用作纹理的FBO?

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

1 个答案:

答案 0 :(得分: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,在某些清理过程中在应用程序结束时删除它们。