2015-11-23 4 views
0

Я использовал glReadPixels для чтения результата процесса рендеринга OpenGL. Теперь я использую функцию CUDA для постпроцесса этого результата, но я хочу изменить glReadPixels для некоторой операции, которая не требует копирования GPU-CPU-GPU. Я нашел пример на примерах CUDA (postProcessGL в примерах обработки изображений), но он использует PBO, в то время как я использую VBO.glReadPixels эквивалент в CUDA - OpenGL interop, используя VBO

В общем, мне нужно получить указатель на память графического процессора, в которой хранится выходное изображение, сгенерированное с использованием VBO, чтобы избежать использования glReadPixels.

Любые предложения или примеры кода?

Thanks, Jose.

ответ

1

Используйте cudaGLRegisterBuffer, чтобы зарегистрировать VBO в качестве ресурса CUDA, затем используйте cudaMapGraphicsResources для сопоставления объекта OpenGL в массив CUDA. Затем вы можете использовать массив в операциях cudaMemcpy или даже зарегистрировать его как поверхность изображения CUDA для записи.

+0

Вы можете ссылаться на образец кода? – progjose

+0

@progjose: Как насчет кода примера simpleGL, который поставляется с CUDA SDK? В этом примере создается OpenGL VBO, он создает ресурсы CUDA для него, отображает его память и передает указатель VGA-Mapped-CUDA на ядро ​​CUDA для записи. – datenwolf

+0

Спасибо. Да, но я думаю, что он просто отображает вершинный массив, а не результирующее изображение ... Я не уверен, где найти массив, указывающий на изображение. – progjose