2

我正在尝试使用用于多边形渲染的 OpenGL 和用于体积渲染的 CUDA 执行组合渲染。我的想法是将 OpenGL 场景渲染到帧缓冲区中,然后使用该颜色和深度缓冲区作为我的 CUDA 渲染器的输入,以与 OpenGL 相同的方式使用它,因此我得到了正确的 alpha 和深度合成。

但是,我遇到了一个问题。当我打电话时:

glGenTextures(1, &m_tex_color);
glGenTextures(1, &m_tex_depth);

glBindTexture(GL_TEXTURE_2D, m_tex_color);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, m_iWidth, m_iHeight, 0,
             GL_RGBA, GL_UNSIGNED_BYTE, 0);
glBindTexture(GL_TEXTURE_2D, m_tex_depth);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, m_iWidth, m_iHeight, 0,  
             GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0);
glBindTexture(GL_TEXTURE_2D, 0);

glGenFramebuffersEXT(1, &m_fbo);
glBindFramebuffer( GL_FRAMEBUFFER, m_fbo);

glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
                       GL_TEXTURE_2D, m_tex_color, 0 );
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
                       GL_TEXTURE_2D, m_tex_depth, 0 );
cudaError_t b;
b = cudaGraphicsGLRegisterImage(&m_cuda_color_resource, m_tex_color,
                                GL_TEXTURE_2D, cudaGraphicsMapFlagsNone);
printf("%s",  cudaGetErrorString(b));
b = cudaGraphicsGLRegisterImage(&m_cuda_depth_resource, m_tex_depth,
                                GL_TEXTURE_2D, cudaGraphicsMapFlagsNone);
printf("%s",  cudaGetErrorString(b));

第一个没有错误cudaGraphicsGLRegisterImage,但第二个出现“无效参数”错误。CUDA 3.2 不支持注册深度组件纹理吗?4.0(当它出来时)?还有另一种方法可以解决我缺少的问题吗?

4

1 回答 1

1

CUDA GL 纹理互操作当前不支持 GL_DEPTH_COMPONENT(从 CUDA 4.1 开始)。

不幸的是,这在 CUDA 文档中被忽略了。已提交文档错误以纠正此问题。

于 2012-02-22T01:11:12.787 回答