The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use FileHandle;
use strict;
use warnings;
use Carp;

$SIG{__DIE__} = sub {print Carp::longmess(@_); 
							die;};


STDOUT->autoflush(1);
STDERR->autoflush(1);

use PDL::Graphics::OpenGL;

my $numwins = shift;
$numwins = 1 unless(defined $numwins);
my @windows;
my $opt;
$opt->{width} = 90;
$opt->{height} = 90;

#PDL::Graphics::OpenGL::glpSetDebug(1);

foreach(0..$numwins-1){
  $opt->{x} = ($numwins % 10) *100;
  $opt->{y} = int($numwins / 10) *100;

  my $win=new PDL::Graphics::OpenGL::OO($opt);
  push @windows, $win;
}

my $angle=0;

use Data::Dumper;
my $out = Dumper($windows[0]);
print "$out\n";



while(1){
  $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();
  }
}