The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# -*-perl-*-
BEGIN{
	  # Set perl to not try to resolve all symbols at startup
	  #   The default behavior causes some problems because 
	  #    opengl.pd builds an interface for all functions
	  #    defined in gl.h and glu.h even though they might not
	  #    actually be in the opengl libraries.
	  $ENV{'PERL_DL_NONLAZY'}=0;
}

# use PDL::Graphics::OpenGL;

sub hasDISPLAY {
  return defined $ENV{DISPLAY} && $ENV{DISPLAY} !~ /^\s*$/;
}

use Test;

BEGIN { 
  use PDL::Config;
  if( $PDL::Config{OPENGL_LIBS} && $PDL::Config{WITH_3D} 
      # only if GL modules have actually been built
      && $PDL::Config{GL_BUILD} && hasDISPLAY()) {
	 plan tests => 3; 
	 eval 'use PDL::Graphics::OpenGL';
	 ok($@, ''); 
  }else{
	 plan tests => 1; 
         print hasDISPLAY() ? "ok 1 # Skipped: OpenGL support not compiled\n"
	   : "ok 1 # Skipped: DISPLAY environment variable not set\n";
	 exit;
  }
}

#
# Try opening 2 GL windows
#
my $numwins = 2;
my @windows;
my $opt;
$opt->{width} = 90;
$opt->{height} = 90;

foreach(0..$numwins-1){
  $opt->{x} = ($numwins % 10) *100;
  $opt->{y} = int($numwins / 10) *100;
  my $win=new PDL::Graphics::OpenGL::OO($opt);
  ok(ref($win), 'PDL::Graphics::OpenGL::OO');
  push @windows, $win;
}
exit;
#
# More test code not currently used.
# 

my $angle=0;
my $i=0;
while($i++<100){
  $angle++;
  foreach my $win (@windows){
	 $win->glXMakeCurrent() || die "glXMakeCurrent failed\n";
    if(PDL::Graphics::OpenGL::XPending($win->{Display})>0){
		my @ev = PDL::Graphics::OpenGL::glpXNextEvent($win->{Display});
    
		if($ev[0] ==  PDL::Graphics::OpenGL::ConfigureNotify){
		
		  glFlush();
		  glViewport(0, 0, $opt->{width}, $opt->{height});
		  glMatrixMode(GL_PROJECTION);
		  glLoadIdentity();
		  glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);

		}	 
	 }
#	 my $out = Dumper($win);
#	 print "$out\n";

	 glShadeModel(GL_FLAT);


    glClearColor(0., 0.5, 0., 1.0); 

	 glClear(GL_COLOR_BUFFER_BIT);
	 

	 glPushMatrix();

	 glRotatef($angle, 0, 0, 1);

	 glBegin(GL_TRIANGLES);

	 # draw pink triangle 

	 glColor3f(1.0, 0.3, 0.5);
	 glVertex2f(0, 0.8);
	 glVertex2f(-0.8, -0.7);
	 glVertex2f(0.7, 0.8);
	 glEnd();

    glPopMatrix();


    $win->glXSwapBuffers();
  }
}