Я не буду делать расчетный пиксель с OpenCL и отображать его непосредственно на дисплее без кругового опроса ЦП. Я мог бы использовать совместимость OpenCL с OpenGL и писать на баннеры текстуры графического процессора и отображать текстуру с OpenGL. Мне было интересно, какой будет лучший способ сделать это, поскольку мне не нужны какие-либо 3D-материалы, всего 2d pixelart.
Как нарисовать выделенные пиксели OpenCL на экране с помощью OpenGL?
Ответ 1
Лучший способ - использовать OpenCL/OpenGL interop, если ваша реализация OpenCL поддерживает его. Это позволяет OpenCL получать доступ к некоторым объектам OpenGL (объекты буфера и текстуры/рендерингбуферы). Вы не сможете напрямую обращаться к фреймбуферу OpenGL по умолчанию (т.е. К дисплею), но вы сможете получить доступ к изображению, привязанному к фреймбуферу. Оттуда вы можете в OpenGL сделать фреймбуфер blit для стандартного фреймбуфера. Ничего не коснется памяти ЦП.
Чтобы узнать подробности, вам нужно будет изучить особенности CL/GL interop. Основная идея заключается в том, что вы создаете renderbuffer в OpenGL (который вы связываете с FBO). Затем вы передаете этот renderbuffer в OpenCL и выполняете свои вычисления в renderbuffer. После этого вы выполните glBlitFramebuffer
, чтобы скопировать данные из renderbuffer в стандартный фреймбуфер, затем смените буферы, чтобы отобразить его.