关于渲染到纹理

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

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

以下是我所遵循的步骤:

  • 创建一个framebuffer对象并附加一个合适的纹理作为颜色附件
  • 绑定并清除FBO
  • 渲染一些基元
  • 解除绑定FBO,然后切换回系统FBO
  • 绑定用作颜色附件的纹理
  • 使用上面创建的纹理渲染系统FBO。
  • 删除纹理和FBO创建。
  • 来自系统FBO的glReadpixel。
  • 现在,正如我已经在系统FBO上呈现的那样。 为什么我们仍然需要纹理和其他用作纹理的FBO?

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


    我建议阅读: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,在某些清理过程中在应用程序结束时删除它们。

    链接地址: http://www.djcxy.com/p/33923.html

    上一篇: Regarding render to texture

    下一篇: OpenGL fragment shader not writing to fbo color buffer