Можно ли рисовать OpenGL на поверхности памяти? - PullRequest
3 голосов
/ 26 сентября 2011

Я начинаю изучать OpenGL, и мне стало интересно, можно ли нарисовать его в буфере видеопамяти, который я получил через другие библиотеки?

Ответы [ 2 ]

5 голосов
/ 26 сентября 2011

Для рисования в видеопамять вы можете использовать объекты кадрового буфера для рисования в OpenGL-текстурах или рендер-буферах (области VRAM для закадрового рендеринга), как предложил Стефан.

Когда речь идет о VRAMБуфер создан другой библиотекой, это зависит от того, о какой библиотеке вы говорите.Если эта библиотека также использует OpenGL под капотом, вам нужно некоторое представление о библиотеке, чтобы получить этот «буфер» (будь то текстура, в которую вы можете визуализировать непосредственно с помощью FBO, или объект буфера GL, в который вы можете читать визуализированныйпиксельные данные с использованием PBOs .

Если эта библиотека использует какой-либо другой API для взаимодействия с графическим процессором, возможностей не так много. Если она использует OpenCL или CUDA, эти API имеют функции для непосредственного использованияих буферы памяти или изображения в виде буферов или текстур OpenGL, которые вы затем можете визуализировать с помощью упомянутых методов.

Если эта библиотека использует Direct3D под капотом, это становится немного сложнее. Но по крайней мере nVidia имеет расширение для непосредственного использования поверхностей и текстур Direct3D 9 в качестве буферов и текстур OpenGL, но у меня нет никакого опыта с этим, и при этом я не знаю, широко ли это поддерживается.

4 голосов
/ 26 сентября 2011

Вы не можете позволить OpenGL рисовать напрямую в произвольную память, одна из причин состоит в том, что в большинстве реализаций рисование OpenGL происходит в видеопамяти, а не в системной памяти.Однако вы можете нарисовать в закадровом контексте OpenGL и затем прочитать результат в любом месте системной памяти.Веб-поиск объектов кадрового буфера (FBO) должен указывать вам на документацию и учебные пособия.

Если ваша память уже находится в VRAM, например, декодирована с аппаратным ускорением, то вы можете использовать ее напрямую.если она доступна в виде текстуры OpenGL - тогда вы можете использовать некоторые методы рендеринга в текстуру, которые позволят вам перенести данные из и в VRAM.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...