欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

GLSL-帧缓冲FBO

程序员文章站 2022-03-16 19:13:10
...

帧缓冲包括颜色缓冲、深度缓冲和模板缓冲

unsigned int fbo;
glGenFramebuffers(1, &fbo);//glGen** 函数中的第一个参数1是指生成对象的数量
glBindFramebuffer(GL_FRAMEBUFFER, fbo);

一个完整的帧缓冲应包括:

  • 至少附加一个缓冲(颜色、深度或模板缓冲);
  • 至少有一个颜色附件(Attachment);
  • 每个缓冲都应该有相同的样本数。
//生成纹理
unsigned int 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);
glBindTexture(GL_TEXTURE_2D, 0);
// 将纹理附加到当前绑定的帧缓冲对象
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texColorBuffer, 0);  

上面的帧缓冲对象没有深度缓冲,OpenGL将不再执行深度测试。

if(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE)
{
	//若不执行此句,会执行离屏渲染;执行此句后帧缓冲被设置为默认帧缓冲
	glBindFramebuffer(GL_FRAMEBUFFER, 0);
}
glDeleteFramebuffers(1, &fbo);