OpenGL::Shader - copyright 2007 Graphcomp - ALL RIGHTS RESERVED Author: Bob "grafman" Free - grafman@graphcomp.com


NAME

  OpenGL::Shader - copyright 2007 Graphcomp - ALL RIGHTS RESERVED
  Author: Bob "grafman" Free - grafman@graphcomp.com
  This program is free software; you can redistribute it and/or
  modify it under the same terms as Perl itself.


DESCRIPTION

  This module provides an extensible abstraction for managing OpenGL shaders.
  Requires OpenGL v0.56 or newer.


SYNOPSIS

  ##########
  # Load and manage a shader
  use OpenGL(':all');
  use OpenGL::Shader;
  # Note: these APIs/methods requires a current GL context/window
  glutInit();
  glutInitDisplayMode(GLUT_RGBA);
  glutInitWindowSize($w,$h);
  my $Window_ID = glutCreateWindow( "OpenGL::Shader test" );
  # Get a hashref of shader types
  my $shaders = $OpenGL::Shader::GetTypes();
  # Test for shader support
  my $ok = OpenGL::Shader::HasType('Cg');
  # Instantiate a shader - list acceptable shaders by priority
  my $shdr = new OpenGL::Shader('GLSL','ARB');
  # Get shader type and version
  my $type = $shdr->GetType();
  my $ver = $shdr->GetVersion();
  # Load shader by strings
  my $stat = $shdr->Load($fragment,$vertex);
  # Load shader by file
  my $stat = $shdr->LoadFiles($fragment_file,$vertex_file);
  # Enable
  $shdr->Enable();
  # Get vertex attribute ID
  # returns undef if not supported or not found
  my $attr_id = $self->MapAttr($attr_name);
  glVertexAttrib4fARB($attr_id,$x,$y,$z,$w);
  # Get Global Variable ID (uniform/local)
  my $var_id = $self->Map($var_name);
  # Set float4 vector variable
  $stat = $self->SetVector($var_name,$x,$y,$z,$w);
  # Set float4x4 matrix via OGA
  $stat = $self->SetMatrix($var_name,$oga);
  # Do GL rendering
  # Disable
  $shdr->Disable();
  # Done
  glutDestroyWindow($Window_ID);

 OpenGL::Shader - copyright 2007 Graphcomp - ALL RIGHTS RESERVED Author: Bob "grafman" Free - grafman@graphcomp.com