私がやろうとしているのは、OpenGL を使用してレンダリングを実行し、次に CUDA を使用して、データを PBO にコピーせずに、レンダリングされた RGB および深度コンポーネントで読み取り専用の後処理 (計算) を直接実行することです。
これを行うには、FBO を作成し、それに 2 つの RBO を接続します (1 つは RGBA 用、もう 1 つは DEPTH 用)。
次に、パラメータとして GL_RENDERBUFFER を使用して、RBO ごとに cudaGraphicsGLRegisterImage を呼び出します。カラー RBO の場合、cudaGraphicsGLRegisterImage は cudaSuccess を返しますが、深度 RBO の場合は cudaErrorInvalidValue を受け取ります。
フォーラムのどこかで、深度コンポーネントの CUDA レンダー バッファーの相互運用性が現在 nVidia でサポートされていないことを読みましたが、ドキュメントには十分に記載されています。
CUDA Toolkit 5.0 を使用しており、Quadro 2000 カードを持っています。
誰かがこれを行うことに成功しましたか?どのように?
ここにいくつかのコードの抜粋があります:
glGenRenderbuffers(1, &rbo_color);
glBindRenderbuffer(GL_RENDERBUFFER, rbo_color);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, WIDTH, HEIGHT);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
if (cudaGraphicsGLRegisterImage(&resource_color, rbo_color, GL_RENDERBUFFER, cudaGraphicsMapFlagsReadOnly) != cudaSuccess)
fprintf(stderr, "Error in registering rbo color with cuda\n");
glGenRenderbuffers(1, &rbo_depth);
glBindRenderbuffer(GL_RENDERBUFFER, rbo_depth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT32F, WIDTH, HEIGHT);
glBindRenderbuffer(GL_RENDERBUFFER, 0);
if (cudaGraphicsGLRegisterImage(&resource_depth, rbo_depth, GL_RENDERBUFFER, cudaGraphicsMapFlagsReadOnly) != cudaSuccess)
fprintf(stderr, "Error in registering rbo depth with cuda\n");