2

ポリゴン レンダリング用の OpenGL とボリューム レンダリング用の CUDA を組み合わせたレンダリングを実行しようとしています。私のアイデアは、OpenGL シーンをフレーム バッファにレンダリングし、そのカラー バッファと深度バッファを CUDA レンダラーへの入力として使用し、OpenGL と同じ方法で使用することです。これにより、適切なアルファと深度合成が得られます。

しかし、問題が発生しています。私が電話するとき:

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が、2 番目のエラーでは「無効な引数」エラーが発生します。CUDA 3.2 は深度コンポーネント テクスチャの登録をサポートしていませんか? 4.0 (出てくるとき) はありますか? 私が見逃しているこれにアプローチする別の方法はありますか?

4

1 に答える 1