【发布时间】:2019-12-17 14:58:40
【问题描述】:
我正在尝试创建帧缓冲区,以便可以渲染场景,然后对其应用过滤器,但是当我尝试绑定到任何新创建的帧缓冲区或将渲染缓冲区附加到其中一个时,我遇到了错误他们。
我像这样创建了帧缓冲区和渲染缓冲区:
GLuint frameBuffer[2];
glGenFramebuffers(2, frameBuffer);
//generate colorbuffer for normal rendering and brightness
GLuint colorBuffer[2];
glGenTextures(2, colorBuffer);
for (unsigned int i = 1; i > -1; i--)
{
glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer[i]);
glBindTexture(GL_TEXTURE_2D, colorBuffer[i]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB16F, 800, 800, 0, GL_RGB, GL_FLOAT, NULL); //800x800 window
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
// attach texture to framebuffer
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, colorBuffer[i], 0);
}
//currently frameBuffer[0] should be bound rn
GLuint rbo;
glGenRenderbuffers(1, &rbo);
glBindRenderbuffer(GL_RENDERBUFFER, rbo);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, 800, 800); //800x800 window
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo); //attach the renderbuffer
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE){
cout << "No Framebuffer" << endl;
}
当我检查帧缓冲区是否完整时,它不会抛出错误,所以我认为它是完整的,但是
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rbo);
引发无效操作错误。
尝试在程序后面使用glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer[0]); 也会导致无效操作错误,无论我是否尝试将渲染缓冲区绑定到它。
我是 opengl 的新手,我不完全确定我做错了什么。我认为这与帧缓冲区的生成有关。如果您需要更多信息,请随时询问。
【问题讨论】:
-
@ybungalobill 谢谢!我刚刚尝试过,并取得了一些进展,现在它显示为帧缓冲区不完整。将调试它。
-
将我的评论转换为答案。