到cuda的Opengl深度缓冲区
我是Opengl的新程序员, 我的目标是将深度缓冲区检索到FBO中,以便能够在不使用glReadpixels的情况下传输到cuda 以下是我已经做过的:到cuda的Opengl深度缓冲区,opengl,cuda,depth-buffer,zbuffer,Opengl,Cuda,Depth Buffer,Zbuffer,我是Opengl的新程序员, 我的目标是将深度缓冲区检索到FBO中,以便能够在不使用glReadpixels的情况下传输到cuda 以下是我已经做过的: void make_Fbo() { glGenFramebuffers(1, &fbo); glBindFramebuffer(GL_FRAMEBUFFER, fbo); glFramebufferRenderbuffer(GL_FRAMEBUFFER,
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
这些说法仍然正确吗?
您建议我如何将深度缓冲区转储到颜色通道?
到纹理?是和否。问题是,当CUDA中的资源绑定到FBO时,您无法访问它们 据我所知,使用
cudaGraphicsGLRegisterImage()
可以让cuda访问任何类型的图像数据。因此,如果使用作为渲染目标且未绑定到FBO的深度缓冲区,则可以使用它
以下是cuda API信息:
在本文中,他们解释说,您应该循环使用深度缓冲区或将深度缓冲区加倍缓冲,或者在CUDA中使用数据之前复制数据(但是您或多或少会放弃互操作的整个概念)