我正在尝试使用用于多边形渲染的 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(当它出来时)?还有另一种方法可以解决我缺少的问题吗?