ine 5341 

Programa

OpenGL

Trabalhos 2001

Trabalhos 2002

Links

Bibliografia

Plano de Ensino

SDL - Uma nova API de altíssima performance para jogos

Por John Anderson Freitas Mendes
http://www.johnanderson.kit.net
john@wnet.com.br
20/05/2003

1. Introdução

Simple DirectMedia Layer (SDL) é uma biblioteca multimídia e multiplataforma utilizada em diversos jogos existentes no mercado e também em projetos comerciais. SDL possui potencialidades direcionadas à aplicações multimídia através de API consistente e abertas para múltiplos sistemas operacionais.

Este material apresenta várias funcionalidades da SDL com respeito a sua programação voltada a jogos no Linux.

SDL possui seu API bem definido, sendo considerado de fácil aprendizado. Suas vantagens vão desde acesso direto aos recursos multimídia do computador onde é possível efetuar com extrema eficiência aplicações com menor consumo de recursos adjacentes.

A SDL por possuir uma camada de aplicação bem definida, permitindo efetuar aplicações modulares podendo assim, integrar as aplicações SDL em diversos sistemas multimídia. Um exemplo disso é a utilização da SDL para o áudio em ferramentas como player de áudio, ou até aplicações de telefonia ou vídeo, mas os jogos são sua principal aplicação.

A biblioteca SDL também possui diversos e secundários APIs, oferecendo suporte multiplataforma para vídeo, áudio, manipulação de entrada, multithreading, OpenGL e vários outros recursos.

Para aqueles que são desenvolvedores de aplicações multimídia, possivelmente conhecem ou já ouviram falar em DirectX que é fornecido pela Microsoft, mas a utilização da biblioteca DirectX não é gratuíta, sendo assim, o custo para desenvolver aplicações multimídia com esta ferramenta, torna-se elevado. Em relação com a SDL, além de ser multiplataforma, ela é também gratuita e atualmente é considera a melhor biblioteca de desenvolvimento de aplicações 3D multimídia do mercado. Vale ressaltar que as aplicações desenvolvidas com a biblioteca SDL para plataforma Windows, é dependente do DirectX, pois a Microsoft possui política de utilização de suas ferramentas ou apí's caso alguma aplicação seja desenvolvida para sua plataforma.

Devemos observar que a SDL não possui recursos que permita trabalhar com com 3D, ou seja, devemos utilizar outros recursos como o OpenGL para podermos construir aplicações em 3D.

1.1 - Instalando SDL no Linux

Para algumas versões de Linux, as bibliotecas SDL estão incluídas no pacote (CD) de instalação, como é o caso do SuSE 8.0, RedHat 8.0 e 9.0. Precisamos também ter instalado no Linux o compilador C (gcc). Não podemos esquecer que para criarmos aplicações 3D, necessitamos do OpenGL, e para isso também necessitamos ter instalado as bibliotecas para podermos compilar nossas aplicações. (www.opengl.org)

Para as versões de Linux que não dispõem das bibliotecas SDL no CD de instalação, devemos acessar www.libsdl.org e na seção download baixarmos a versão que precisamos. Em linhas gerais, a instalação procede da seguinte maneira no Linux: rpm -i SDL-1.2.5-1.i386.rpm.

Normalmente a biblioteca é instalada em /usr/lib/sdl, mas dependendo da sua versão ou o modo como você instalou, você pode encontrar as bibliotecas em diretórios diferentes.

2. Programando

Para compilarmos qualquer aplicação do SDL, utilizamos o comando:

gcc -o arquivo_destino arquivo_fonte.c -lSDL

O parametro -lSDL é para informar que precisamos das bibliotecas SDL para sua compilação.

Nos casos onde utilizamos OpenGL juntamente com SDL para criar aplicações em 3D, necessitamos informar na linha de compilação as bibliotecas de OpenGL com a seguinte linha de comando:

gcc -o arquivo_destino arquivo_fonte.c -lGLU -lGL -lSDL

2.1 Vídeo

Ante de escrever no framebuffer, nós necessitamos dizer a placa de vídeo o que nós esperamos dela, ou seja, saber a definição da tela que nós queremos, como também o formato do pixel esperado no framebuffer. Para isso, SDL pode nos informar através da função SDL SetVideoMode. Na seqüência, o exemplo demonstra como ajustar a exposição a uma configuração de vídeo específica e preparar o framebuffer para o desenhos:

/*Exemplo de Inicialização do SDL. */

#include <SDL/SDL.h>
#include <stdio.h>
#include <stdlib.h>

int main(){
     SDL_Surface *screen;

     /*Inicializa SDL's sistema de video e verifica erros*/
     if (SDL_Init(SDL_INIT_VIDEO) != 0) {
          printf("Impossível iniciar SDL: %s\n", SDL_GetError());
          return 1;
     }

     /*Define uma certeza para chamada de saída*/
     atexit(SDL_Quit);

     /*Attempt to set a 640x480 hicolor video mode*/
     screen = SDL_SetVideoMode(640, 480, 16, SDL_FULLSCREEN);

     if (screen == NULL) {
          printf("Unable to set video mode: %s\n", SDL_GetError());
          return 1;
     }

     /* If we got this far, everything worked */
     printf("Success!\n");

     return 0;
}

2.2 Teclado

SDL permite que você interaja com o teclado, capturando as informações que são passadas pelo teclado e permitindo que você desenvolva aplicações que possua interatividade com o teclado.

O exemplo abaixo pode ser utilizado para aplicações que necessitem que seja pressionada uma tecla como "Escape" para sair da aplicação.

     SDL_PumpEvents(); //Checa por eventos do teclado...
     keystate = SDL_GetKeyState(NULL); //Associa
     keystate ao estado do teclado.

     if (keystate[SDLK_ESCAPE] || keystate[SDLK_q]){//Checa o teclado para o pressionamento de ESC ou q...
          exit(1);//... se ESC ou q foi pressionado, sai do jogo...
          break;
     }

2.3 Desenhando Objetos

Como foi mencionado na introdução, a SDL não permite que você programe 3D diretamente, mesmo porque a SDL é apenas uma biblioteca de interatividade e integração de som, vídeo, teclado, mouse, cd-rom, imagens, o que faz-se a necessidade de integrar OpenGL com SDL para podermos criar e aplicações em 2D ou 3D dentro do ambiente SDL.

2.3.1 Formas Geométricas

Nosso primeiro exemplo é a criação de um triângulo simples utilizando OpenGL com SDL.


código fonte

O segundo exemplo exibe uma forma de colorir o triângulo.


código fonte

O terceiro exemplo a seguir, descreve como movimentar/rotacionar o objeto triangulo.


código fonte

O quarto e último exemplo descreve um cubo colorido com movimento/rotação.


código fonte

3. Conclusão

SDL não é uma biblioteca que permite a criação de algoritmos computacionais gráficos, mas sim, uma biblioteca que permite uma integração de periféricos de entrada e saída com alta velocidade o que permite criar um ambiente mais apropriado e veloz para aplicações voltadas a computação multimídia, como, jogos, players de áudio e vídeo e aplicações comerciais de alta performance.

Por permitir a integração com OpenGL, podemos considerar a SDL uma biblioteca completa para aplicações diversas e sofisticadas 3D, 2D e multimídia, e isso se deve a sua tecnologia de gravação e leitura direta no framebuffer da memória de vídeo e acesso direto aos recursos computacionais como som, teclado, mouse, vídeo, cd-rom.

4. Referência

[1] SDL - http://www.libsdl.org
[2] Wes - http://www.404notfound.com.br/sdl_tutorial
[3] OpenGL - http://www.opengl.org

 
The Cyclops Project
German-Brazilian Cooperation Programme on IT
CNPq GMD DLR