# -*-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(); } }