美文网首页
OpenGL文档翻译:FBO

OpenGL文档翻译:FBO

作者: 奔向火星005 | 来源:发表于2018-12-14 14:21 被阅读0次

原文地址 http://www.songho.ca/opengl/gl_vbo.html

网上讲FBO的太多,但大部分都讲不到点子上,这篇文章是目前为止发现对FBO解释最为清晰的了,因此翻译以备复习。

在OpenGL渲染流水线上,几何数据和纹理被传输和通过多个tests,最终渲染到一个2D像素的屏幕。这个最终渲染的目的地叫做framebufferFramebuffer是一个2D arrays的集合或存储,被OpenGL所用,如colour buffers, depth buffer, stencil buffer and accumulation buffer. 默认情况下,OpenGL使用framebuffer作为渲染的目的地,它完全由窗口系统创建和管理。这个默认的framebuffer称为window-system-provided framebuffer.

OpenGL的扩展,GL_ARB_framebuffer_object提供了一个接口来创建额外的non-displayable的framebuffer objects (FBO). 这个framebuffer被称为application-created framebuffer,为了区分默认的window-system-provided framebuffer。通过使用framebuffer object (FBO),一个OpenGL 应用可以将渲染输出重定向到application-created framebuffer object (FBO)而不是传统的window-system-provided framebuffer. 而且,这完全由OpenGL控制。

window-system-provided framebuffer类似,一个FBO包含一系列的rendering destinations:color, depth and stencil buffer。(注意accumulation buffer没有定义在FBO)。这些在一个FBO上的逻辑buffers称为framebuffer-attachable images,这些是2D arrays of pixels,绑定在一个framebuffer object中。

这里有两种类型的framebuffer-attachable imagestexture images and renderbuffer images。如果一个texture object的一个image被绑定到一个framebuffer,OpenGL执行"render to texture”。如果一个renderbuffer object的一个image被绑定到framebuffer,OpenGL执行"offscreen rendering”

顺带一提,renderbuffer object是定义在GL_ARB_framebuffer_object扩展的一个新的storage object类型。它在渲染过程中,作为一个单一的2D image的渲染目的地。

下面的图表显示了framebuffer objecttexture objectrenderbuffer object的连接。多个texture objects或者renderbuffer objects可以通过attachment points来绑定到一个framebuffer object

在一个framebuffer object中,有多个color attachment points (GL_COLOR_ATTACHMENT0,..., GL_COLOR_ATTACHMENTn),一个depth attachment point (GL_DEPTH_ATTACHMENT), 和一个stencil attachment point (GL_STENCIL_ATTACHMENT)。color attachment points 的数量是依赖于实现的,但每个FBO必须至少有一个color attachement point。你可以通过GL_MAX_COLOR_ATTACHMENTS获得color attachement points的数量的最大值,它由一个图形卡支持。一个FBO有多个color attachement points的原因是它允许同时渲染color buffer到多个目的地。这个"multiple render targets" (MRT)可以通过GL_ARB_draw_buffers扩展来实现。注意framebuffer object本身没有任何 image storage(array) 在内,它只有多个attachment points.

Framebuffer object (FBO)提供一个高效的切换机制:从一个FBO中解绑旧的framebuffer-attachable image,然后绑定一个新的framebuffer-attachable image到这个FBO. 在framebuffer-attachable images之间切换比在FBOs间切换快很多。FBO提供glFramebufferTexture2D()切换2D texture objects,glFramebufferRenderbuffer()来切换renderbuffer objects.

后面是API的讲解,暂时不翻译了...

相关文章

网友评论

      本文标题:OpenGL文档翻译:FBO

      本文链接:https://www.haomeiwen.com/subject/tbcghqtx.html