帧缓冲(Framebuffer)

将颜色缓冲,深度缓冲,模板缓冲结合起来,就叫作帧缓冲(存储在内存中)。git

具体建立方法以及用法这里不讲,LearnOpenGL对应章节有:帧缓冲github

这里说一下容易让人误解(或者难以理解)的地方。性能


  1. 实际上咱们平时作的一些操做都是在默认帧缓冲中的渲染缓冲(Renderbuffer)中进行的,这里默认的帧缓冲是在建立窗口的时候GLFW生成和配置的。
  2. 咱们能够建立本身的帧缓冲,方便进行一些后期处理操做(不明白的话往下看)。
  3. 帧缓冲至少须要一个颜色附件,附件当中至少要有一个缓冲类型(颜色,深度,模板)。
  4. 颜色附件中的“颜色”指的是附加到帧缓冲的时候的目标类型,注意和附件自己的存储格式区分开:比方说一个纹理颜色附件,那么建立纹理的时候存储格式应该为GL_RGB(源图格式也应该设置为GL_RGB),而附加到帧缓冲上的时候用:GL_COLOR_ATTACHMENT;又好比说一个纹理深度(模板)附件,那么建立纹理的时候就应该将存储格式改成GL_DEPTH_COMPOENT(GL_STENCIL_INDEX),而附加到帧缓冲的时候用GL_DEPTH_ATTACHMENT(GL_STENCIL_ATTACHMENT)。
  5. 另一种附件叫作渲染缓冲附件(同纹理附件相对应),渲染缓冲对象直接将全部的渲染数据储存到它的缓冲中,不会作任何针对纹理格式的转换,让它变为一个更快的可写储存介质。然而,渲染缓冲对象一般都是只写的,因此你不能读取它们(好比使用纹理访问)。固然你仍然仍是可以使用glReadPixels来读取它,这会从当前绑定的帧缓冲,而不是附件自己,中返回特定区域的像素。
  6. 通常纹理附件拿来当颜色附件,渲染缓冲附件拿来当 “模板&深度(一个总体)” 附件,一样,这里的"颜色”“模板&深度”指的都是附加到帧缓冲时候的目标类型。
  7. 那么何时选择纹理附件,何时选择渲染缓冲附件呢?
    一般的规则是,若是你不须要从一个缓冲中采样数据,那么对这个缓冲使用渲染缓冲对象会是明智的选择。若是你须要从缓冲中采样颜色或深度值等数据,那么你应该选择纹理附件。性能方面它不会产生很是大的影响的。
  8. 须要注意的是,这些附件只是存储最终结果的,实际渲染过程(深度测试,模板测试之类的)依旧由GLFW本身操做。
  9. 建立本身的帧缓冲有什么用呢?它的优点是什么呢?
    拿纹理附件(目标类型是颜色缓冲)来讲的话,咱们能够用图像的方式访问已经渲染场景的每一个像素,因此能够在fragment shader中作出一些效果,好比说反相,灰度,更进一步,能够结合核(kernel)作出更加有特色的效果:锐化,模糊等。这些操做统称为后期处理(Post-processing)

以上。测试

相关文章
相关标签/搜索