Perl OpenGL

Материал из Циклопедии
Перейти к навигации Перейти к поиску
Скриншот, иллюстрирующий FBO

Perl OpenGL (POGL) — переносимая скомпилированная библиотека-оболочка, которая позволяет использовать OpenGL в языке программирования Perl.

POGL предоставляет поддержку для большинства расширений OpenGL 2.0, специальных обработчиков процессов и поддерживает OpenGL Utility Toolkit (GLUT), простой межплатформенный интерфейс для работы с окнами.

POGL предоставляет дружелюбные для Perl прикладные программные интерфейсы (API) для передачи и возврата строк и массивов.

Основным специалистом по обслуживанию Perl OpenGL является Крис Маршалл.[1] 3 июля 2011 года вся работа над проектом переместилась на Sourceforge.net.

Поддержка платформ[править]

Операционные системы:

Графические карты и интерфейсы:

Совместимость[править]

Perl Data Language[править]

POGL используется в качестве привязки OpenGL к Perl Data Language (PDL).

ImageMagick[править]

Команда POGL сотрудничала с командой ImageMagick, чтобы создать PerlMagick API, позволяющий видеокарте и ImageMagick совместно использовать кэш-буферы через C-указатели, оптимизирующие производительность для FBO (Frame buffer object) и VBO (Vertex buffer object) и используемые с загрузкой и сохранением текстур.

Данные API были включены в ImageMagick в версии 6.3.5:

  • Get('Scene') — возвращает число сцен в изображении IM.
  • Get('Quantum') — возвращает глубину кэша IM.
  • GetImagePixels() — возвращает C-указатель на кэш изображения IM.
  • SyncImagePixels() — синхронизация кэша изображения IM после записи (для больших или разбитых на страницы изображений).

FFmpeg[править]

Модуль CPAN FFmpeg может использоваться с POGL и вышеупомянутым API File::Magick, чтобы отобразить видео на текстурах OpenGL.

Производительность[править]

Perl vs C[править]

Графический процессор общего назначения (GPU, GPGPU) — единственная область, в которой Perl можно сравнить в производительности со скомпилированными языками.

На основе их собственных сравнительных тестов Perl разработчики OpenGL утверждают, что нет никаких значительных различий в производительности между C и Perl (через POGL) при рендеринге трехмерного оживленного объекта в реальном времени с динамично сгенерированным texturemaps.[2]

Они анализируют свои результаты, отмечая, что вершинные шейдеры могут выполнить сложный C-подобный код на больших массивах данных, редко обращаясь к ЦП.[3]

Perl vs Python[править]

Разработчики Perl OpenGL утверждают, что POGL работает на 20 % быстрее, чем Python.[4]

Объекты OpenGL[править]

POGL предоставляет специализированные объекты, которые улучшают производительность Perl. Объекты POGL хранят данные как типизированные C-массивы и передают данные между API, используя C-указатели — это избавляет от необходимости копирования и преобразования при передаче данных между интерфейсами.

OpenGL::Array (OGA)[править]

OGA хранит данные OpenGL как типизированные C-массивы. OGA может быть заполнен C-указателем, упакованными Perl-массивами или просто Perl-массивами. OGA может быть связан с VBO, чтобы обменяться данными между GPU и Perl.

OpenGL::Image (OGI)[править]

POGL — скомпилированный модуль и он может использоваться в сочетании со скомпилированными модулями обработки изображений (такими как ImageMagick) для загрузки/сохранения массивов данных (текстур).

OGI используют OGA, чтобы обернуть буферы изображения с различных библиотек обработки изображений. OGI упрощает загрузку, изменение и сохранение текстур OpenGL, FBO и VBO.

OGI обеспечивает расширяемую сменную архитектуру, чтобы поддерживать новые библиотеки обработки изображений: OGI поддерживает ImageMagick (v6.3.5 и новее), и Targa (по умолчанию, несжатые RGBA-файлы).

OGI обеспечивает прямой доступ C-указателя к кэшу изображения ImageMagick, что приводит к повышению производительности в передаче изображений/данных между GPU и IM.

Примечания[править]

Ссылки[править]