pods::SDL::Cookbook::OpenGL man page on OpenSuSE

Man page or keyword search:  
man Server   25941 pages
apropos Keyword Search (all sections)
Output format
OpenSuSE logo
[printable version]

pods::SDL::Cookbook::OUserLContributed Perl Docupods::SDL::Cookbook::OpenGL(3)

NAME
       SDL::Cookbook::OpenGL - Using SDL with OpenGL

CATEGORY
       Cookbook

DESCRIPTION
       As of release 2.5 SDL no longer maintains it's own bindings of OpenGL.
       Support for OpenGL has been moved over to a more mature implementation.

       This implementation is the POGL project. OpenGL is faster and more
       complete; and works with SDL seamlessly.

   EXAMPLE
       Expanded from Floyd-ATC's OpenGL example.

	       use strict;
	       use warnings;
	       use SDL;
	       use SDLx::App;
	       use SDL::Mouse;
	       use SDL::Video;
	       use SDL::Events;
	       use SDL::Event;
	       use OpenGL qw(:all);

       You can use OpenGL as needed here.

	       my ($SDLAPP, $WIDTH, $HEIGHT, $SDLEVENT);

	       $| = 1;
	       $WIDTH = 1024;
	       $HEIGHT = 768;
	       $SDLAPP = SDLx::App->new(title => "OpenGL App", width => $WIDTH, height => $HEIGHT, gl => 1);
	       $SDLEVENT = SDL::Event->new;

       SDLx::App can start an OpenGL application with the parameter gl => 1.

	       glEnable(GL_DEPTH_TEST);
	       glMatrixMode(GL_PROJECTION);
	       glLoadIdentity;
	       gluPerspective(60, $WIDTH / $HEIGHT, 1, 1000);
	       glTranslatef(0, 0, -20);

       Above we enable GL and set the correct perspective

	       while (1) {
		 &handlepolls;
		 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
		 glRotatef(.1, 1, 1, 1);
		 &drawscene;
		 $SDLAPP->sync;
	       }

       For SDLx::App sync handles the GL buffer clean.

	       sub drawscene {
		 my ($color, $x, $y, $z);

		 for (-2 .. 2) {
		   glPushMatrix;
		   glTranslatef($_ * 3, 0, 0);
		   glColor3d(1, 0, 0);
		   &draw_cube;
		   glPopMatrix;
		 }

		 return "";
	       }

	       sub draw_cube {
		 my (@indices, @vertices, $face, $vertex, $index, $coords);

		 @indices = qw(4 5 6 7	 1 2 6 5   0 1 5 4
			       0 3 2 1	 0 4 7 3   2 3 7 6);
		 @vertices = ([-1, -1, -1], [ 1, -1, -1],
			      [ 1,  1, -1], [-1,  1, -1],
			      [-1, -1,	1], [ 1, -1,  1],
			      [ 1,  1,	1], [-1,  1,  1]);

		 glBegin(GL_QUADS);

		 foreach my $face (0..5) {
		   foreach my $vertex (0..3) {
		     $index  = $indices[4 * $face + $vertex];
		     $coords = $vertices[$index];

		     glVertex3d(@$coords);
		   }
		 }

		 glEnd;

		 return "";
	       }

       Below we can use SDL::Events as normal:

	       sub handlepolls {
		 my ($type, $key);

		 SDL::Events::pump_events();

		 while (SDL::Events::poll_event($SDLEVENT)) {
		   $type = $SDLEVENT->type();
		   $key = ($type == 2 or $type == 3) ? $SDLEVENT->key_sym : "";

		   if ($type == 4) { printf("You moved the mouse! x=%s y=%s xrel=%s yrel=%s\n", $SDLEVENT->motion_x, $SDLEVENT->motion_y, $SDLEVENT->motion_xrel, $SDLEVENT->motion_yrel) }
		   elsif ($type == 2) { print "You are pressing $key\n" }
		   elsif ($type == 3) { print "You released $key\n" }
		   elsif ($type == 12) { exit }
		   else { print "TYPE $type UNKNOWN!\n" }

		   if ($type == 2) {
		     if ($key eq "q" or $key eq "escape") { exit }
		   }
		 }

		 return "";
	       }

SEE ALSO
       perl SDLx::App OpenGL

AUTHORS
       See "AUTHORS" in SDL.

perl v5.18.1			  2013-09-28	pods::SDL::Cookbook::OpenGL(3)
[top]

List of man pages available for OpenSuSE

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net