pods::SDL::Cookbook::OpenGL man page on OpenSuSE
[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]
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
|
Vote for polarhome
|