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
pods::SDL::Cookbook::OpenGL(3) User Contributed Perl Documentation pods::SDL::Cookbook::OpenGL(3)

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

Cookbook

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.

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 "";
        }

perl SDLx::App OpenGL

See "AUTHORS" in SDL.
2022-06-07 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

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