Perl OpenGL
Perl OpenGL (POGL) — переносимая скомпилированная библиотека-оболочка, которая позволяет использовать OpenGL в языке программирования Perl.
POGL предоставляет поддержку для большинства расширений OpenGL 2.0, специальных обработчиков процессов и поддерживает OpenGL Utility Toolkit (GLUT), простой межплатформенный интерфейс для работы с окнами.
POGL предоставляет дружелюбные для Perl прикладные программные интерфейсы (API) для передачи и возврата строк и массивов.
Основным специалистом по обслуживанию Perl OpenGL является Крис Маршалл.[1] 3 июля 2011 года вся работа над проектом переместилась на Sourceforge.net.
Поддержка платформ[править]
Операционные системы:
- Microsoft Windows: XP, Vista, 7
- OS X: только версии 10.x
- Linux: Fedora, Debian, Ubuntu, Gentoo
- FreeBSD
- Solaris
Графические карты и интерфейсы:
- NVIDIA (Quadro-110M,6600,6800,7300,7800,7950,8800)
- ATI (Radeon 9000/9200, FireGL)
- Cygwin/X Window System (Mesa 3D)
Совместимость[править]
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.