Cuda Render Buffer Interop для компонента глубины
То, что я пытаюсь сделать, это использовать OpenGL для выполнения некоторого рендеринга, а затем использовать CUDA для выполнения некоторой пост-обработки только для чтения (вычислений) непосредственно на визуализированных компонентах RGB и глубины без копирования данных в PBO.
Для этого я создаю FBO и прикрепляю к нему два RBO (одно для RGBA и одно для DEPTH).
Затем я вызываю cudaGraphicsGLRegisterImage для каждого RBO с GL_RENDERBUFFER в качестве параметра. Для цвета 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");
1 ответ
У меня не было никакого успеха, связывающего сам буфер глубины. Одним из способов решения этой проблемы является рендеринг значения пикселя глубины в цветовой буфер и связывание цветового буфера, как вы делаете. Вам нужно будет написать свой собственный шейдер для достижения этой цели.