我是 Opengl 的新程序员,我的目标是将深度缓冲区检索到 FBO 中,以便能够在不使用 glReadpixels 的情况下传输到 cuda。
这是我已经完成的:
void make_Fbo()
{
glGenFramebuffers(1, &fbo);
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
glFramebufferRenderbuffer(GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_RENDERBUFFER,
fbo);
check_gl_error("make_fbo");
}
void make_render_buffer()
{
glGenRenderbuffers(1, &rb);
glBindRenderbuffer(GL_RENDERBUFFER, rb);
glRenderbufferStorage(GL_RENDERBUFFER,
GL_DEPTH_COMPONENT,
win.width,
win.height);
check_gl_error("make render_buffer");
}
此代码使用正确的深度值创建我的 FBO。
根据文章“在 cuda 上使用不规则 z 缓冲区进行快速三角形光栅化”,现在出现了一个新问题。无法从 Cuda 访问附加到 FBO 的深度缓冲区。
这是文章的引述:
可以将纹理或渲染缓冲区附加到 FBO 的深度附加点以适应深度值。但是,据我们测试,CUDA 内核无法访问它们。[...] 我们设法使用了 FBO 上的颜色连接点。显然,在这种情况下,我们必须编写一个简单的着色器程序来将深度值转储到帧缓冲区的颜色通道中。根据 GLSL 规范 [KBR06],特殊变量 gl_FragCoord
这些陈述仍然正确吗?你建议我将深度缓冲区转储到颜色通道吗?到纹理?