#!/usr/bin/perl -w
# 
#	OpenGL.pm
#
#	Wayne Keenan Copyright (O) 2000

package SDL::OpenGL;


@ISA = qw(Exporter);
use strict;
use SDL::sdlpl;

use Exporter();
use vars qw(@EXPORT);

#
# Constants
#

my @constants=qw(
		 SDL_GL_RED_SIZE
		 SDL_GL_GREEN_SIZE
		 SDL_GL_BLUE_SIZE
		 SDL_GL_ALPHA_SIZE
		 SDL_GL_ACCUM_RED_SIZE
		 SDL_GL_ACCUM_GREEN_SIZE
		 SDL_GL_ACCUM_BLUE_SIZE
		 SDL_GL_ACCUM_ALPHA_SIZE
		 SDL_GL_BUFFER_SIZE
		 SDL_GL_DEPTH_SIZE
		 SDL_GL_STENCIL_SIZE
		 SDL_GL_DOUBLEBUFFER
		);


@EXPORT = map { "&$_" }  @constants;


my %constant_lookup =();

foreach my $constant (@constants)
{
 my $func = $constant;

 #create the Packaged scoped constant function
 my $sdl_func_call ="SDL::sdlpl::".lc($func);
 eval "sub $constant { $sdl_func_call(); }";
 $constant_lookup{eval "$sdl_func_call()"}=$constant;
}






#
# App Constructor / Destructor
#

sub new 
  {
   my $proto = shift;
   my $class = ref($proto) || $proto;
   my %options = @_;
   
   my $self={};
   bless $self,$class;
   return $self;
  }	


#OpenGL

sub set_attribute
  {
   my $self=shift;
   my $attr=shift;
   my $value=shift;
   
   $self->{GL_ATTRIBUTES}{$attr}=$value; #helper: record vars (to keep 'track' of them)
   return SDL::sdlpl::sdl_gl_set_attribute($attr, $value);
  }

sub get_attribute
  {
   my $self=shift;
   my $attr=shift;
   
   return SDL::sdlpl::sdl_gl_get_attribute($attr);
  }



sub swap_buffers
  {
   my $self=shift;
   
   return SDL::sdlpl::sdl_gl_swap_buffers();
  }



#helper functions

sub get_attributes
  {
   my $self=shift;
   my %copy=%{$self->{GL_ATTRIBUTES}};

   my %new=();
   foreach my $key (keys %copy)
     {
      my $constant_name=$constant_lookup{$key};
      my ($new_name)=$constant_name =~ /SDL_GL_(.*)$/;    #rename so we dont get CONSTANT confusion

      $new{$new_name} = $copy{$key};   #make Human readable;
      $new{$key}      = $copy{$key};   #ensure we could use the original CONSTATNS if we want too.
     }
   return \%new;
  }



1;



__END__;

=head1 NAME

SDL::OpenGL - a SDL perl extension

=head1 SYNOPSIS

Provides OpenGL bits to SDL-Perl, please look at the examples.

=head1 DESCRIPTION


=head2 Additional Methods


=head1 AUTHOR

Wayne Keenan

=head1 SEE ALSO

perl(1) SDL::Surface(3) SDL::Mixer(3) SDL::Event(3) SDL::Cdrom(3).

=cut