Perl OpenGL

From Wikipedia, the free encyclopedia
Jump to navigation Jump to search
Perl OpenGL
DevelopersStan Melax, Kenneth Albanowski, Ilya Zakharevich, Jean-Louis Morel, Bob Free, Chris Marshall
Stable release
0.66 / July 29, 2011; 14 years ago (2011-07-29)
Repository
  • {{URL|example.com|optional display text}}Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemCross-platform
    Type3D computer graphics software (library/API)
    LicenseGNU General Public License, Artistic License
    Websitesourceforge.net/projects/pogl

    Perl OpenGL (POGL) is a portable, compiled wrapper library that allows OpenGL to be used in the Perl programming language.

    POGL provides support for most OpenGL 2.0 extensions, abstracts operating system specific proc handlers, and supports OpenGL Utility Toolkit (GLUT), a simple cross-platform windowing interface.

    POGL provides additional Perl-friendly application programming interfaces (API) for passing and returning strings and arrays.

    The primary maintainer of Perl OpenGL is Chris Marshall.[1] As of July 3, 2011, the Perl OpenGL Project on SourceForge.net was started and all development and module support going forward has moved there.

    Platform support

    [edit | edit source]

    Confirmed with:[2]

    Interoperability

    [edit | edit source]

    Perl Data Language

    [edit | edit source]

    POGL is used as the OpenGL binding for the 3D graphics in the Perl Data Language (PDL).

    ImageMagick: image loading, modifying, saving

    [edit | edit source]

    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 and saving textures and GPGPU data transfer.[citation needed]

    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

    [edit | edit source]

    CPAN's FFmpeg module may be used with POGL and the above File::Magick APIs to map video to OpenGL textures.

    Performance

    [edit | edit source]

    Perl vs C

    [edit | edit source]

    General Purpose graphics processing unit (GPU, GPGPU) processing is one area in which Perl can be compared with compiled languages in performance.

    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.[3]

    They analyze their results by remarking that GPGPU vertex shaders can execute complex C-like code on large arrays of data, rarely touching the CPU.[4]

    Perl vs Python

    [edit | edit source]

    Perl OpenGL developers claim that POGL performs over 20% faster than Python.[5]

    OpenGL objects

    [edit | edit source]

    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.

    OpenGL::Array (OGA)

    [edit | edit source]

    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.

    OpenGL::Image (OGI)

    [edit | edit source]

    POGL is a compiled module, and may be used in conjunction with compiled imaging modules (such as ImageMagick) for loading/saving data arrays (textures).

    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.

    OpenGL::Shader (OGS)

    [edit | edit source]

    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();
    

    Sample renderings

    [edit | edit source]

    Status

    [edit | edit source]

    The latest CPAN release of the following POGL modules are

    • OpenGL v0.66
    • OpenGL-Image v1.03
    • OpenGL-Shader v1.01

    POGL provides access to most of the OpenGL APIs up to 1.2, and OpenGL extensions,[6] such as Framebuffer Objects (FBO) and Vertex Buffer Objects (VBO).[7]

    References

    [edit | edit source]
    1. ^ Chris Marshall
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    6. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]