barra horizontal azul
simbolo minerva da ufrj

A Biblioteca Multimídia SDL

Valid HTML 4.0!
barra horizontal azul
©2007 - Bruno Bottino Ferreira

  1. Introdução
  2. Programa básico em SDL
  3. Funções gerais e tratamento de janelas
    1. Inicialização e deinicialização
    2. Tratamento de erros
    3. Tratamento de janelas
  4. O subsistema de vídeo
    1. Definições básicas
    2. Conseguindo informações sobre o hardware de vídeo
    3. Criando uma janela
    4. Atualizando a tela
    5. Ajustando o Gamma da tela
    6. Trabalhando com pixels
    7. Trabalhando com superfícies
    8. Carregando e salvando imagens BMP
    9. Trabalhando com transparências
    10. Máscaras
    11. Convertendo superfícies
    12. Desenhando retângulos
    13. Copiando superfícies (blitting)
    14. O cursor do mouse
  5. Eventos
    1. O que são eventos?
    2. Trabalhando com eventos
    3. Tipos de eventos
  6. Joysticks
  7. Temporizadores (Timers)
  8. Utilizando áudio com SDL_mixer
  9. Carregando imagens com SDL_image
  10. Desenhando texto com SDL_ttf
  11. Apêndice A: Códigos de teclas
  12. Apêndice B: Palestra sobre SDL
barra horizontal azul

Introdução

Fazendo download dos arquivos necessários

Vá em http://www.libsdl.org/, Downloads, SDL 1.2 (a versão mais recente no momento). Procure por "Development Libraries" e faça o download do pacote relativo ao sistema operacional e compilador que estiver usando (Linux, Visual C++ ou MinGW).

Como instalar os arquivos no MinGW (Windows)

Baixe o arquivo ao lado de "Mingw32" e descompacte-o em algum lugar (é necessário ter um programa capaz de descompactar arquivos tar.gz, como o WinRAR). Dentro da pasta SDL-1.2.11, copie as pastas "include" e "lib" para a pasta onde está instalado o seu MinGW (geralmente C:\MinGW), POR CIMA das pastas que já existem, de modo que os arquivos no pacote da SDL sejam adicionados aos includes e bibliotecas já instalados (ou simplesmente copie os arquivos para as pastas correspondentes).

Dentro da pasta bin há também um arquivo chamado SDL.dll. Não é necessário copiar este arquivo para algum lugar na pasta do compilador; ele será necessário na hora de executar seu programa compilado com SDL. Será então necessário que ele esteja na mesma pasta do seu arquivo executável compilado, ou em uma pasta onde o sistema possa encontrá-lo (tipicamente X:\Windows\System32). Em geral você vai querer que este arquivo esteja junto com seu executável (que é onde o sistema procura primeiro) para evitar problemas de conflito de versão.

Como instalar os arquivos no GNU/Linux

Utilize seu gerenciador de pacotes preferido para instalar o pacote libsdlx.y-dev, onde x.y é a versão mais recente (no momento, 1.2). Utilizando apt-get, que deve funcionar na maioria das versões, utilize o comando:

sudo apt-get install libsdlx.y-dev

Testando a integração com o compilador

Vamos escrever um programa bem simples, apenas para testar se a SDL está instalada e funcionando corretamente. Abra um editor de textos qualquer e digite o programa a seguir:

#include <SDL.h> //usaremos funcoes da SDL

#define SCREEN_W 640 //tamanho da janela que sera criada
#define SCREEN_H 480

int main(int argc, char** argv) //funcao de entrada
{
    SDL_Surface* screen; //superficie que representa a tela do computador
    SDL_Event event; //um evento enviado pela SDL
    int quit = 0; //devemos encerrar o programa?

    SDL_Init(SDL_INIT_VIDEO); //inicializar a SDL
    screen = SDL_SetVideoMode(SCREEN_W, SCREEN_H, 16, SDL_SWSURFACE); //criar uma janela 640x480x16bits

    while(!quit) //rodar enquanto nao for para encerrar :)
    {
        while(SDL_PollEvent(&event)) //checar eventos
        {
            if(event.type == SDL_QUIT) //fechar a janela?
            {
                quit = 1; //sair do loop principal
            }
        }

        SDL_Flip(screen); //atualizar a tela
    }

    SDL_Quit(); //encerrar a SDL

    return 0;
}

Para compilar este programa no Windows com MinGW, abra um prompt de comando, navegue até a pasta onde o seu arquivo está salvo e digite o comando a seguir (substituindo "ex1" pelo nome do seu arquivo):

gcc ex1.c -o ex1.exe -Wall -lmingw32 -lSDLmain -lSDL

Para compilar no GNU/Linux:

gcc ex1.c -o ex1 -Wall `sdl-config --cflags --libs`

Rode seu programa. Deverá aparecer uma janela preta com o título "SDL_app". O programa deverá encerrar-se quando o usuário clica no botão "fechar" na barra de título da janela.

Observação: em programas compilados com SDL para Windows, a saída padrão (o arquivo stdout, e as funções printf, puts, putchar etc) são redirecionados para um arquivo chamado stdout.txt, criado na mesma pasta do seu executável. Note que este arquivo será substituído sem aviso cada vez que o seu programa rodar. A entrada padrão (arquivo stdin, e as funções scanf, gets, getchar etc) em geral gera problemas e não deve ser utilizada. Raramente, porém, você precisará destes ao escrever um programa tão complexo que utilize uma biblioteca gráfica--provavelmente você irá implementar meios mais elegantes de entrada e saída (por exemplo, leitura de um arquivo de configuração, ou leitura do teclado utilizando as funções da biblioteca, e saída gráfica para a tela ou saída de texto para um arquivo de log).

Descrição dos parâmetros usados na compilação:

- gcc ex1.c -o ex1.exe : operação padrão de compilação
- -Wall : mostrar todos os warnings (avisos)
- -lmingw32 -lSDLmain -lSDL : bibliotecas necessárias que serão "linkadas" ao seu programa

Utilize sempre este formato de comando para compilar seus programas feitos em SDL e MinGW. Se eles possuírem mais de um arquivo, adicione outros nomes após "ex1.c" (ou o nome do seu arquivo inicial).

O programa acima será explicado em maiores detalhes na próxima seção.

Os tipos em SDL

A SDL define (typedef) alguns nomes de tipos diferentes para definir as variáveis usadas em suas estruturas e funções. Como estas definições estão no arquivo SDL.h, você pode também utilizá-las em seus programas, ou usar os tipos padrão do C/C++, ou mesmo utilizar seus próprios, desde que sejam equivalentes.

typedef signed char Sint8;
typedef unsigned char Uint8;
typedef signed short Sint16;
typedef unsigned short Uint16;
typedef signed int Sint32;
typedef unsigned int Uint32;
typedef signed long long Sint64;
typedef unsigned long long Uint64;

barra horizontal azul
Anterior
Topo da página
Próximo