Есть ли способ выразить инструкции OpenGL независимо от языка? - PullRequest
2 голосов
/ 08 января 2012

Название в значительной степени говорит об этом.Я думал о создании простого видеоредактора и не был уверен в «логистике» различных эффектов, фильтров и тому подобного.Допустим, я хочу, чтобы внешняя программа применила некоторый эффект к изображению.Обязательно ли это исполняемая программа или это может быть просто набор инструкций OpenGL, которые видеоредактор может анализировать и, по сути, «передавать» в OpenGL.Технически, это была бы программа, но она кажется более элегантной и стандартизированной, чем создание полноценной вторичной программы только для применения эффекта.Может быть, есть лучший способ?

Редактировать: Спасибо за ответы, ребята.Вот продолжение: Как другие видеоредакторы реализуют это?Причина, по которой я спрашиваю, состоит в том, что ответы, по-видимому, довольно отрицательны по вышеуказанному вопросу, поэтому мне было интересно, как это делается профессиональными приложениями.

Ответы [ 5 ]

3 голосов
/ 08 января 2012

Обязательно ли это исполняемая программа, или это может быть просто набор инструкций OpenGL, которые видеоредактор может анализировать и, по сути, "передавать" в OpenGL.

Существует несколько способов решения проблемы («создать видеоредактор с возможностью создания пользовательских эффектов»).

  1. Сделайте так, чтобы ваш редактор поддерживал плагины, и предоставьте API для создания новых плагинов для видеоэффектов.Директор Macromedia работал таким образом.Новый эффект должен быть реализован в виде библиотеки плагинов (dll / .so, в зависимости от вашей платформы).
  2. Встраивание языка сценариев с привязками OpenGL в ваше приложение для создания видеоэффектов, обеспечение основных функций для взаимодействия с внутреннимисостояние вашей заявки.Это позволит быстрее разрабатывать эффекты, но производительность будет сильно снижаться для определенных операций.«Blender» (3D-редактор) работает таким образом, Maya предоставляет аналогичные рамки (я думаю).По сути, это # ​​1, но реализовано как язык сценариев.
  3. Заставьте ваш редактор загружать шейдеры GLSL.Это позволит вам довольно быстро создавать некоторые эффекты, но кроме этого это не очень хорошая идея - хотя GLSL обладает приличным количеством «мощности» (функции / математика), один GLSL не позволит вам делать все, что вы захотите, потому чтоон вообще не сможет взаимодействовать с вашим приложением (чистый GLSL не может создавать текстуры, кадровые буферы и т. д., что ограничивает вашу способность делать что-то более интересное).Скорее всего, вы сможете сделать только какой-то фильтр, не более того.# 1 и # 2 дадут «власть» конечному пользователю.
  4. Реализация редактора эффектов на основе узлов .Т.е. существует несколько типов узлов, которые пользователь может перетаскивать, которые представляют определенные операции, у них есть входы / выходы, и пользователь может их подключать.Blender 3D и UDK (Unreal Development Kit) имеют такую ​​функцию.Я думаю, что .kkreiger (сайт не работает, Google это) использовал аналогичную технику, чтобы сделать 96kb шутер от первого лица.Это может быть довольно мощным, но программисты, скорее всего, будут ненавидеть перетаскивание графических объектов с помощью мыши, если только вы не предоставите способ создания такого графа узлов с помощью языка сценариев (в AviSynth было нечто подобное, но не совсем так).Это может быть настолько же мощно, как # 1 или # 2, но будет стоить вам дополнительного времени разработки.

Кроме этого, не существует "независимого от языка" способа создания эффекта.Либо вы должны использовать существующий язык, чтобы плагин эффекта взаимодействовал с вашим приложением, либо вы должны создать свой собственный «язык» для описания эффекта.Единственный независимый от языка способ справиться с этим - нанять программиста и сказать ему, какой эффект вы хотите получить.Но опять же, это требует естественного языка.

3 голосов
/ 08 января 2012

Допустим, я хочу, чтобы внешняя программа применила некоторый эффект к изображению.Обязательно ли это исполняемая программа или это может быть просто набор инструкций OpenGL, которые видеоредактор может анализировать и, по сути, «передавать» в OpenGL.

Любая вещь работает.Однако в самом стандарте OpenGL нет такого понятия, как «инструкции OpenGL» или «коды операций».Но по крайней мере в системах на основе X11 с косвенным GLX это возможно, потому что GLX фактически определяет коды операций.И несколько X-клиентов могут работать в одном и том же контексте, если он косвенный.К сожалению, у вас не будет этой опции большую часть времени, так как вам, вероятно, нужен прямой контекст, потому что вы можете захотеть OpenGL3 (для которого не все операции имеют коды операций, определяющие, что делает косвенные невозможными для OpenGL-3), или потому что вы 'мы не используем GLX.

Так что следующий вариант заключается в том, что вы предоставляете другому процессу какой-либо запрос команды / интерпретатора для OpenGL.Если вы ленивы, я предлагаю вам просто встроить интерпретатор Python в вашу программу вместе с привязками Python OpenGL.Они работают в любом контексте, который активен в настоящее время, позволяя другой программе фактически отправлять некоторый скрипт Python для выполнения своих задач.

И, наконец, что не менее важно, вы можете предоставить OpenGL через некоторый интерфейс RPC.

Или вы предоставляете некоторую систему плагинов, где вы загружаете какую-то DLL, которая выполняет действия.

1 голос
/ 08 января 2012

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

0 голосов
/ 08 января 2012

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

0 голосов
/ 08 января 2012

Короткий ответ - нет. То, что вы ищете, это DSL мечты парня HCI, который описал бы презентацию независимо от базовой технологии.

...