После прочтения этой статьи я хотел попытаться сделать то же самое, но чтобы ускорить процесс рендеринга, часть, которую я хотел исполнить на GPU, само собой разумеется, почему треугольники или любые другие геометрические объекты должны отображаться на GPU, а не на CPU.
Вот одно хорошее изображение процесса:
Задача:
- Визуализация 'набора вершин'
- Оцените разницу в пикселях по
пиксель между визуализированным «набором вершин» и изображением Моны Лизы (Мона Лиза находится на текстурном или графическом процессоре без большой разницы)
Проблема:
При использовании OpenCL или Cuda с расширением OpenGL FBO (Frame Buffer Object).
В этом случае согласно нашей задаче
- Визуализация 'набора вершин' ( обрабатывается OpenGL )
- Оцените разницу в пикселях по
пиксель между визуализированным «набором вершин» и изображением Моны Лизы ( обрабатывается OpenCL или Cuda )
Так что в этом случае я вынужден делать копии из FBO в PBO (Pixel Buffer Object), чтобы получить «набор вершин», доступный для OpenCL / Cuda. Я знаю, как быстро выполняются копии памяти с устройства на устройство, но, учитывая, что мне нужно делать тысячи таких копий, имеет смысл не делать этого ...
Эта проблема оставляет три варианта:
- Визуализация с OpenGL в PBO ( каким-то образом, я не знаю как, это также может быть невозможно сделать )
- Визуализируйте изображение и оцените разницу между изображениями полностью с помощью OpenGL ( каким-то образом, я не знаю, как, возможно, используя шейдеры, единственная проблема в том, что я никогда не писал шейдеры в своей жизни, и это может потребоваться месяцы работы для меня ... )
- Визуализируйте изображение и оцените разницу между изображениями полностью с OpenCL / Cuda ( Я знаю, как это сделать, но также потребуются месяцы, чтобы получить стабильную и более или менее оптимизированную версию рендерера, реализованную в OpenCL или Cuda )
Вопрос
Кто-нибудь может мне помочь с написанием шейдера для вышеуказанного процесса или, может быть, указать способ рендеринга Моны Лизы в PBO без копий из FBO ...