FreeWRL
view release on metacpan or search on metacpan
GLBackEnd.pm view on Meta::CPAN
cmap => !$VRML::ENV{FREEWRL_NO_COLORMAP});
glClearColor(0,0,0,1);
# my $lb = VRML::OpenGL::glpRasterFont("5x8",0,256);
# $VRML::OpenGL::fontbase = $lb;
# glDisable(&GL_DITHER);
# glShadeModel (&GL_SMOOTH);
glShadeModel (&GL_FLAT);
glEnable(&GL_DEPTH_TEST);
glEnable(&GL_NORMALIZE);
glEnable(&GL_LIGHTING);
glEnable(&GL_LIGHT0);
glEnable(&GL_CULL_FACE);
glLightModeli(&GL_LIGHT_MODEL_TWO_SIDE, &GL_TRUE);
glLightModeli(&GL_LIGHT_MODEL_LOCAL_VIEWER, &GL_FALSE);
# glLightModeli(&GL_LIGHT_MODEL_TWO_SIDE, &GL_TRUE);
glEnable(&GL_POLYGON_OFFSET_EXT);
glPolygonOffsetEXT(0.0000000001,0.00002);
glPixelStorei(&GL_UNPACK_ALIGNMENT,1);
glPixelStorei(&GL_PACK_ALIGNMENT,1);
# $this->reshape();
# Try to interface with Tk event loop?
if(defined &Tk::DoOneEvent) {
my $gld = VRML::OpenGL::glpXConnectionNumber();
# Create new mainwindow just for us.
my $mw = MainWindow->new();
$mw->iconify();
my $fh = new FileHandle("<&=$gld\n")
or die("Couldn't reopen GL filehandle");
$mw->fileevent($fh,'readable',
sub {# print "GLEV\n";
$this->twiddle(1)});
$this->{FileHandle} = $fh;
$this->{MW} = $mw;
}
$this->{Interactive} = 1;
print "STARTED OPENGL\n" if $VRML::verbose;
if($VRML::offline) {
$this->doconfig($w,$h);
}
$this->{Viewer} = VRML::Viewer::Examine->new;
return $this;
}
# Set the sub used to go forwards/backwards in VP list
sub set_vp_sub {
$_[0]{VPSub} = $_[1];
}
sub quitpressed {
return delete $_[0]{QuitPressed};
}
sub update_scene {
my($this,$time) = @_;
while(XPending()) {
# print "UPDS: Xpend:",XPending(),"\n";
my @e = &glpXNextEvent();
# print "EVENT $e[0] $e[1] $e[2] !!!\n";
if($e[0] == &ConfigureNotify) {
$this->resize($e[1],$e[2]);
}
$this->event($time,@e);
}
$this->finish_event();
$this->{Viewer}->handle_tick($time);
$this->render();
}
sub set_root { $_[0]{Root} = $_[1] }
sub bind_viewpoint {
my($this,$node,$bind_info) = @_;
$this->{Viewer}->bind_viewpoint($node,$bind_info);
}
sub unbind_viewpoint {
my($this, $node) = @_;
return $this->{Viewer}->unbind_viewpoint($node);
}
sub bind_navi_info {
my($this,$node) = @_;
$this->{Viewer}->bind_navi_info($node);
my $t = ref $this->{Viewer};
$t =~ /^VRML::Viewer::(\w+)/ or die("Invalid viewer");
$this->choose_viewer($1);
}
sub choose_viewer {
my($this,$viewer) = @_;
my $vs = [];
if($this->{Viewer}{Navi}) {
$vs = $this->{Viewer}{Navi}{RFields}{"type"};
}
if(!@$vs) {
if($viewer) {
$this->set_viewer($viewer);
} else {
$this->set_viewer("WALK");
}
return;
}
if(grep {(lc $_) eq (lc $viewer)} @$vs) {
$this->set_viewer($viewer);
return;
}
$this->set_viewer($vs->[0]);
}
sub set_viewer {
( run in 0.894 second using v1.01-cache-2.11-cpan-39bf76dae61 )