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 )