在OpenGL中, OpenGL Context有一个默认的FBO用来绘制图像, 但是我们也可以创建新的用户定义的Framebuffers, 这样我们可以绘制到自定义的framebuffer, 而不会影响到窗口系统。
关键词定义
- Image: 本文中, Image是包含像素的二维数组,这些像素具有特定的存储格式。
- Layered Image: 具有某一特定尺寸和格式的一套images, 对应于texture的某一个mipmap level. (注意 layered image不是一个人在战斗,而是一整套的images!)
- Texture: 表示一系列的images的集合。所有的image具有相同的格式, 但是尺寸不一样(不同的mipmap level). Texture 可以绑定(bind)到 shaders.
- Renderbuffer: 包含一个image, 不可以绑定(bind)到shaders, 只能附着(attach)到FBO.
- Framebuffer-attachable image: 可附着到FBO的image
- Framebuffer-attachable layered image: 可附着到FBO的layered image.
- Attachment point: FBO中一个署名的附着点,可用来附着(attach) framebuffer-attachable image 和 framebuffer-attachable layered image. 对于附着(attach)的image,要求具有特定的格式。
- Attach: 附着是表示将两个物体连系起来, 和绑定(bind) 是不一样的。 一个物体被绑定(bind)到context, 但是物体与物体则是相互附着(attach).
绑定FBO
和其它 OpenGL object一样,FBO有以下的相关函数:
void glGenFramebuffers(GLsizei n, GLuint* framebuffers);
void glDeleteFramebuffers(GLsizei n, GLuint* framebuffers);
void glBindFramebuffer(GLenum target, GLuint framebuffer);
其中的
target
参数可以是:- GL_FRAMEBUFFER
- GL_READ_FRAMEBUFFER
- GL_DRAW_FRAMEBUFFER
GL_READ_FRAMEBUFFER:当
target
设置为GL_READ_FRAMEBUFFER时,framebuffer
参数所指代的FBO变成读操作的目标,如glReadPixels
,glCopyTexImage2D
,glCopyTexSubImage2D
.
GL_DRAW_FRAMEBUFFER: 当target 设置为 GL_DRAW_FRAMEBUFFER