Визуализация поверхности Каира непосредственно в текстуру OpenGL - PullRequest
14 голосов
/ 24 мая 2011

Я использую cairo (http://cairographics.org) в сочетании с библиотекой 3D-графики на основе OpenGL.
В настоящее время я использую 3D-библиотеку в Windows, но надеюсь получить ответ, который не зависит от платформы. Это все сделано в C ++.

У меня есть прямой подход, который заключается в использовании cairo_image_surface_create в сочетании с glTexImage2D для получения текстуры OpenGL.

Тем не менее, из того, что я смог извлечь из документации cairo_image_surface_create использует основанный на ЦП рендерер и записывает вывод в основную память.

Я пришел к выводу, что в cairo появился новый рендерер на основе OpenGL, который выводит свои данные непосредственно на GPU, но я не могу найти конкретные подробности о том, как его использовать.
(Я нашел некоторые подробности о glitz-renderer, но он устарел и удален).

Я проверил список поверхностей по адресу: http://www.cairographics.org/manual/cairo-surfaces.html,, но чувствую, что упускаю очевидное.

У меня вопрос: как создать поверхность Каира, которая будет визуализироваться непосредственно в текстуру OpenGL?
Обратите внимание: мне нужно иметь возможность использовать текстуру напрямую (без копирования), чтобы отобразить вывод cairo на экране.

Ответы [ 3 ]

1 голос
/ 23 февраля 2012

Я сделал это с помощью GL_BGRA.

int tex_w = cairo_image_surface_get_width(surface);
int tex_h = cairo_image_surface_get_height(surface);
unsigned char* data = cairo_image_surface_get_data(surface);

, а затем сделал

glTexImage2D(GL_TEXTURE_2D, 0, 4, tex_w,tex_h, 0,GL_BGRA, GL_UNSIGNED_BYTE, data);

при создании текстуры.Используйте glTexSubImage2D (...) для обновления текстуры при изменении содержимого изображения.Для скорости установите фильтры для текстуры на GL_NEAREST

1 голос
/ 11 ноября 2015

Начиная с 2015 года, Cairo GL SDL2, вероятно, является лучшим способом использования Cairo GL

https://github.com/cubicool/cairo-gl-sdl2

Если вы работаете в такой ОС, как Ubuntu, где cairo не компилируется с GLнужно будет скомпилировать вашу собственную копию и сообщить cairo-gl-sdl2, где она находится.

1 голос
/ 26 мая 2011

Сверкающий блеск был заменен экспериментальным cairo-gl бэкэндом.

Вы найдете упоминание об этом в: http://cairographics.org/OpenGL/

Can 'Скажем, достаточно ли он стабилен для использования.

После того, как у вас есть рабочий интерфейс gl, вы можете выполнить рендеринг в объект Framebuffer для рендеринга непосредственно в заданной текстуре.

...