Рендеринг SVG с помощью OpenGL (и OpenGL ES)

В настоящее время я изучаю возможность рендеринга векторной графики из файла SVG с использованием OpenGL и OpenGL ES. Я намерен ориентироваться на Windows и Android. Моим идеальным решением было бы иметь минимальную библиотеку C, которая генерирует триангуляцию многоугольника из заданного файла SVG. Затем это будет генерировать стандартные вызовы OpenGL или OpenGL ES и использовать список отображения или vbo для оптимизации при перерисовке. Я бы просто нарисовал список отображения, чтобы нарисовать векторное изображение после перевода и поворота, что позволяет мне смешивать это с другими вызовами OpenGL.

Пока что я вижу, что я предлагаю сначала использовать QT или Cairo. -Это не вариант, учитывая, что я хочу управлять своим собственным контекстом OpenGL без раздутых библиотек (в контексте того, чего я пытаюсь достичь). Это также не подходит для Android.

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

В-третьих, существует возможность использования OpenVG. Существуют некоторые реализации спецификации OpenVG с открытым исходным кодом (ShivaVG и т. Д.), Но мне еще предстоит найти библиотеку, способную генерировать соответствующие вызовы OpenVG из заданного файла SVG во время выполнения, и я не вижу, как оптимизировать это, поскольку мы могли бы пожелать использовать список отображения или vbo.

Все три метода имеют ограничения. Я думаю, что наиболее многообещающим вариантом является использование реализации OpenVG, если другого решения не существует. Итак, мой вопрос: есть ли какие-нибудь библиотеки, которые делают то, что я хочу, или близкие к тому, что я хочу? Если нет, то почему бы и нет? И не лучше ли попытаться сделать это с нуля?

55
задан Matt Esch 8 June 2011 в 15:59
поделиться