From Seo Wiki - Search Engine Optimization and Programming Languages
|File:Perl OpenGL fob2.jpg|
A screenshot illustrating FBO and Vertex/Fragment program extensions via POGL
|Developer(s)||Stan Melax, Kenneth Albanowski, Ilya Zakharevich, Jean-Louis Morel, Bob Free, Chris Marshall|
|Stable release||0.62 / December 27, 2009|
|Type||3D computer graphics software (library/API)|
|License||GNU General Public License, Artistic License|
POGL provides support for most OpenGL 2.0 extensions, abstracts OS-specific proc handlers, and supports GLUT, a simple cross-platform windowing interface.
POGL provides additional Perl-friendly APIs for passing/returning strings and arrays.
- Microsoft Windows: NT/XP/Vista
- Mac OS X: version 10.5 (Leopard) only
- Linux: Fedora 6, Debian Etch, Ubuntu Dapper, Gentoo
- nVidia (Quadro-110M,6600,6800,7300,7800,7950,8800)
- ATI (Radeon 9000/9200, FireGL)
- Cygwin/X Window System (Mesa)
Perl Data Language
POGL is used as the OpenGL binding for the 3D graphics in the Perl Data Language (PDL).
ImageMagick - Image Loading/Modification/Saving
The POGL team has collaborated with the ImageMagick team to add PerlMagick APIs that allow GPUs and ImageMagick to share cache buffers via C pointers - optimizing performance for FBOs and VBOs - for use with loading/saving textures and GPGPU data transfer.
These APIs have been added to ImageMagick 6.3.5:
- Get('Scene') - returns the number of scenes in an IM image.
- Get('Quantum') - returns IM's cache depth.
- GetImagePixels() - returns a C pointer to IM's image cache.
- SyncImagePixels() - sync's IM's image cache after a write (for large/paged images).
FFmpeg - Video Frame Textures
CPAN's FFmpeg module may be used in conjunction with POGL and the above Image::Magick APIs to map video to OpenGL textures.
Perl vs C
Based on their own benchmarks, Perl OpenGL developers claim that there are no significant performance differences between C and Perl (via POGL), when rendering a realtime 3D animated object with dynamically generated texturemaps.
Perl vs Python
As of this writing, Python OpenGL bindings do not support Framebuffers and other advanced GPGPU extensions.
Perl OpenGL developers claim that POGL performs over 20% faster than Python.
POGL provides specialized objects that enhance Perl performance. POGL objects store data as typed C arrays, and pass data between APIs using C pointers - eliminating the need to copy/convert/cast when passing data between interfaces.
OGAs store OpenGL data as typed C arrays. OGAs may be populated by C pointer, Perl packed arrays (strings) or Perl arrays. OGAs may be bound/mapped to VBOs to share data between the GPU and Perl. Accessor methods provide a means to get/set array elements by C pointer, packed arrays or Perl arrays.
OGIs use OGAs to wrap image buffers from various imaging libraries. OGI simplifies loading/modifying/saving OpenGL textures, FBOs and VBOs.
OGI provides an extensible plug-in architecture to support new imaging libraries: OGI supports ImageMagick (v6.3.5 or newer), and by default Targa (uncompressed RGBA files).
OGI provides direct C pointer access to ImageMagick's image cache, resulting in performance improvement in transferring images/data between the GPU and IM.
The OSG module abstracts OpenGL APIs for ARB (assembly), Cg and GLSL shading languages.
$shdr = new OpenGL::Shader(); my $ext = lc($shdr->GetType()); my $stat = $shdr->LoadFiles("fragment.$ext","vertex.$ext"); $shdr->Enable(); $Shader->SetVector('surfacecolor',1.0,0.5,0.0,1.0); $Shader->SetMatrix('xform',$xform); # Draw here $shdr->Disable();
Snap shot of a realtime animated blacklight shader.
The latest CPAN release of the following POGL modules are
- OpenGL v0.62
- OpenGL-Image v1.03
- OpenGL-Shader v1.01
- ↑ "Features". graphcomp.com. http://graphcomp.com/opengl/index.cgi?v=0111s3m2&r=s3m4. Retrieved 28 December 2009.
- ↑ "Perl OpenGL: POGL". graphcomp.com. 28 December 2009. http://cpansearch.perl.org/src/CHM/OpenGL-0.62/README. Retrieved 28 December 2009.
- CPAN OpenGL (POGL)
- CPAN OpenGL-Image
- CPAN OpenGL-Shader
- The Official POGL Website - documentation, examples, benchmarks, latest updates
- POGL Video Gallery
- POGL Sample Test App
- OpenGL::Array (OGA) Documentation
- OpenGL::Image (OGI) Documentation
- OpenGL::Shader (OGS) Documentation
- POGL Currents: POGL Developer's Blog
- SIGGRAPH 2007: POGL live reporting from San Diego