我正在使用帧缓冲对象来进行屏幕外渲染。这就是我正在初始化FBO的方式:
glGenFramebuffers(1, &fb);
glBindFramebuffer(GL_FRAMEBUFFER, fb);
glGenRenderbuffers(1, &color_rb);
glBindRenderbuffer(GL_RENDERBUFFER, color_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA8, windowWidth, windowHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, color_rb);
glGenRenderbuffers(1, &depth_rb);
glBindRenderbuffer(GL_RENDERBUFFER, depth_rb);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, windowWidth, windowHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depth_rb);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);
在我的过剩鼠标功能中,我正在尝试阅读使用在主窗口中单击的位置,以映射并读取我的FBO中的相应像素位置。但是,我似乎从主窗口获取像素数据而不是我的屏幕外渲染FBO。这是我的过剩鼠标功能:
GLubyte像素;
glReadBuffer(GL_COLOR_ATTACHMENT0);
glReadPixels(x, windowHeight - y - 1, 1, 1, GL_RGB, GL_UNSIGNED_BYTE, &pixel);
cout << "Pixel clicked: " << (int) pixel << endl;
有谁知道如何在主窗口中使用点击位置来读取我的FBO中相应的像素位置?
答案 0 :(得分:2)
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fb);
尝试常规'ole GL_FRAMEBUFFER
而不是GL_DRAW_FRAMEBUFFER
。
答案 1 :(得分:2)
glReadPixels
reads from the framebuffer currently bound to GL_READ_FRAMEBUFFER
。因此,如果您想从中读取,则应在阅读之前将其绑定到该目标。
或者,您可以绑定到GL_FRAMEBUFFER
,GL_DRAW_FRAMEBUFFER
绑定GL_READ_FRAMEBUFFER
和{{1}}。