GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages


Manual Reference Pages  -  PODS::SDL::COOKBOOK::OPENGL (3)

.ds Aq ’

NAME

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

CONTENTS

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.
Search for    or go to Top of page |  Section 3 |  Main Index


perl v5.20.3 PODS::SDL::COOKBOOK::OPENGL (3) 2016-04-05

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with manServer 1.07.