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);