OpenGL Frame Buffer Object - glBindFramebuffer Error
背景:
我试图将基元绘制到默认的窗口系统帧缓冲区对象中。我有三个可以正确渲染的对象。现在,我想生成自己的帧缓冲区对象以包含这些相同的图像,但是要使每个对象以平坦的唯一颜色ID呈现,以便在运行时进行选择。将向用户显示三个对象,通过单击鼠标将选择一个对象,然后代码将读取帧缓冲区对象中的一个像素以确定颜色。读取颜色后,对象的颜色将更改以指示已被选择。
问题:
由于某些原因,在调用
代码(希望只是相关部分):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | void initFrameBuffers() { glGenRenderbuffers(NumRBOs, rbos); glBindRenderbuffer(GL_RENDERBUFFER, rbos[COLOR]); glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, WIDTH, HEIGHT); glBindRenderbuffer(GL_RENDERBUFFER, rbos[DEPTH]); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, WIDTH, HEIGHT); glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); // Causes the error glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, rbos[COLOR]); glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rbos[DEPTH]); glEnable(GL_DEPTH_TEST); // Re-enable the default window-system framebuffer for drawing glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } void drawToFBO() { // Load the user defined framebuffer object glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); glDrawBuffer(GL_COLOR_ATTACHMENT0); glViewport(0, 0, WIDTH, HEIGHT); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Draw into the user defined framebuffer object, not the default window-system FBO glBindVertexArray(vaos[CYLINDER]); glDrawArrays(GL_TRIANGLES, 0, cylinder.vertices.size()); // Re-enable the default window-system framebuffer glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); } |
现在,我不确定在调用initFrameBuffers方法之前是否需要做任何特殊的事情,但这就是我正在做的事情。我的主要功能只是调用
我已经在较新版本的Kubuntu中尝试了相同的代码,它给了我一个不同的错误代码:
如所指出的,
关于帧缓冲区的使用,每次执行绘图时,我都必须一直保持窗口系统帧缓冲区的连接,因为每个绘图都不在FBO内发生,而是在窗口系统帧缓冲区上发生。在注意了绑定FBO的位置以及如何调用