OpenGL帧缓存对象FBO

        帧缓存对象最大的意义就是可以在不同的缓存之间大量迁移数据,对于离屏渲染技术、纹理贴图的更新非常有帮助。但是我们在屏幕上看到的只能是窗口系统提供的帧缓存,而应用程序中创建的帧缓存无法被显示器所显示,只能利用离屏渲染技术将帧缓存内容渲染到窗口系统的帧缓存进行显示。

         但是《OpenGL编程指南第8版》P140最后一句话:现在,我们可以选择将这些附件(帧缓存附件)关联到两种不同的渲染表面之上,渲染缓存或者纹理图像的某个层级。顿时感到崩溃,帧缓存对象、帧缓存附件与渲染缓存以及纹理到底什么关系。。网上看了一些文章之后有了一个清楚的认识。利用帧缓存时,首先需要创建一个FBO,但是与窗口系统管理的帧缓存对象相比,它没有自己的缓存对象(或者说帧缓存附件,颜色缓存、深度缓存以及模板缓存),所以我们需要为帧缓存对象创建一些附件并将其绑定到该帧缓冲上,而创建一个附件的方式有两种:纹理或渲染缓冲对象!也就是说,我们可以将纹理或者渲染缓冲对象作为帧缓存对象的GL_COLOR_ATTACHMENTi、GL_DEPTH_ATTACHMENT、GL_STENCIL_ATTACHMENT附件!这应该就是这句话的真正含义!

代码:

            GLuint texture;

            glGenTextures(1, &texture);

            glBindTexture(GL_TEXTURE_2D, texture);

            glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 800, 600, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);

            glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

            //附加到帧缓存

            glFrameBufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);

读者可以好好揣摩一下QT的QOpenGLFramebufferObject的构造函数!翻译一下并比较跟上述代码的异同!

渲染缓存对象附件与纹理附件大体一致,而二者的使用规则即何时使用渲染缓存对象何时使用纹理大致如下:

         如果不需要从特定的缓冲中采样,渲染缓存对象是明智的选择,但是如果需要从颜色或者深度值这样的特定缓冲中采样,最好使用纹理附件(配合片段着色器使用纹理,texture采样)

暂时这些,后续理解深入的话继续更新!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值