SDL (biblioteca)
| Simple DirectMedia Layer | |
|---|---|
| Desenvolvedor | Sam Lantinga |
| Versão estável | 1.2.11 (26-jun-2006) |
| Sistema Operacional | Multiplataforma |
| Gênero(s) | API |
| Licença | GNU LGPL |
| Página oficial | libsdl.org |
| Portal das Tecnologias de informação | |
Simple DirectMedia Layer (SDL) é uma biblioteca multimídia e multiplataforma escrita em C (mas diretamente compatível com C++ e possui interfaces para outras linguagens de programação, como Ada, Eiffel, Java, Lua, ML, Perl, PHP, Pike, Python, e Ruby), que cria uma abstração em várias plataformas de gráficos, sons, e entrada de APIs, tornando possível ao programador escrever um jogo de computador ou outra aplicação multimedia já que ela pode rodar em GNU/Linux, Windows, Mac OS Classic, Mac OS X, BeOS, FreeBSD, OpenBSD, Solaris, QNX, IRIX, e muitas outras plataformas não oficialmente suportadas. Ela gerencia video, eventos, audio digital, CD-ROM, som, threads, processamento de objetos compartilhados, rede e tempo.
Índice |
[editar] História
Sam Lantinga criou a biblioteca, primeiramente lançando no começo de 1998, enquanto trabalhava na Loki Software. Ele teve a idéia enquanto portava uma aplicação do Windows para o Macintosh. Então ele usou a SDL para portar o Doom para o BeOS. Muitas outras bibliotecas livres apareceram para trabalhar com a SDL, como a SMPEG e a OpenAL.
A biblioteca SDL teve ligações com quase toda linguagem que existe, desde a popular (C++, Perl, Python (com o pygame), Pascal etc.) até os menos conhecidos (como o Euphoria, Free Basic ou Pliant). Isso e o fato de ter o código aberto, licenciado sobre a LGPL, fazem do SDL uma escolha comum para muitas aplicações multimedia.
SDL em si é muito simples; ela meramente age de maneira transparente, de maneira multi-plataforma, provendo suporte para operações com pixels em 2D, som, acesso a arquivos, gerenciamento de eventos, tempo, threading, e mais. OpenGL é frequentemente usado com a SDL para prover rápida renderização em 3D. É também conhecida como uma DirectX multi-plataforma, embora tenha funcionalidades mais avançadas. SDL ainda tem uma porção de outras extensões que fazem dela mais fácil e com mais funções avançadas.
A Biblioteca é dividida em vários subsistemas, como o Video, Audio, CD-ROM, Joystick e Subsistemas de tempo. Além do básico, suporte alto-nível, também há umas poucas bibliotecas dependentes da SDL que provêem mais funcionalidades avançadas. Estas incluem SDL image (provê uma maneira fácil de carregar os formatos de imagem mais conhecidas hoje em dia), SDL mixer (funções complexas de audio, principalmente para mistura de som), SDL net (suporte a rede), SDL ttf (renderização de Fontes TrueType), SDL gfx (algumas funções gráficas adicionais, como redimensionar e girar imagens), SMPEG (algumas funções para exibição de mpg) e SDL rtf (renderização simples do Rich Text Format).
[editar] Instalação
A SDL pode ser obtida no endereço www.libsdl.org. Há versões runtime (apenas para rodar aplicativos que dependem da SDL) e versões para desenvolvimento de aplicativos. Em alguns sistemas Linux como o Ubuntu, pode-se encontrar a biblioteca pré-compilada no gerenciador de pacotes nativo.
O Dev-C++ (IDE e compilador C++ gratuito para Windows, pode ser encontrado em www.bloodshed.net) possui pacotes prontos e configurados corretamente para desenvolvimento de aplicativos SDL. Basta baixá-los e instalá-los através do próprio gerenciador de pacotes do Dev-C++.
Um detalhe importante fica por conta do arquivo SDL.dll. Ele deve constar em algum diretório do sistema (como C:\windows\system) ou no próprio diretório do aplicativo.
[editar] Básico em Linguagem C
Todo aplicativo SDL deve incluir o cabeçalho da SDL logo no início, com a declaração
#include <SDL/SDL.h>
E a main deve ser declarada recebendo dois parâmetros, um inteiro, representando a quantidade de argumentos enviandos ao programa, e um array de strings, que representam os argumentos:
int main(int argc, char** argv)
{
// código aqui
}
A primeira providência, no programa, é inicializar a SDL. Isso é feito com a função
SDL_Init();
Como parâmetro, é necessário informar quais subsistemas da SDL serão inicializados. Exemplos são o controle de vídeo (SDL_INIT_VIDEO), de som (SDL_INIT_AUDIO), cd-rom (SDL_INIT_CDROM), joystick (SDL_INIT_JOYSTICK), entre outros. Por enquanto, ficaremos apenas com vídeo e som.
SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO);
Ou ainda, para inicializar todos os subsistemas possíveis:
SDL_Init(SDL_INIT_EVERYTHING);
Essa função tem retorno, portanto, é possível testar se a SDL foi inicializada corretamente:
if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0)
{
printf("Nao foi possível inicializar a SDL: %s\n", SDL_GetError());
return 1;
}
Antes de explicar o próximo passo, uma breve explicação sobre as Surfaces do SDL. Uma Surface é uma área da memória utilizada para armazenar imagens. Praticamente tudo no SDL é feito com Surfaces. Cada imagem do jogo (como bolinhas, pás e tela de fundo num jogo tipo Pong), são Surfaces.
É possível desenhar uma Surface dentro de outra Surface. O melhor exemplo disso é a tela principal do jogo. Ela pode ser alocada como uma Surface de 640x480 (por exemplo), em branco. Depois, as Surfaces da bolinha e pás são declaradas e carregadas com os devidos arquivos bitmaps, para depois, cada uma dessas Surfaces ser desenhada na Surface principal do jogo, para finalmente ser exibido para o jogador.
Vamos começar com a tela principal do jogo. Para declarar uma Surface, usamos:
SDL_Surface *tela;
Para inicializar a Surface como tela principal do jogo, usamos:
tela = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF);
Essa função devolve um ponteiro para uma estrutura SDL_Surface. Se por algum motivo a SDL não conseguiu criar a superfície, o valor retornado da função será NULL:
if ((tela = SDL_SetVideoMode(640, 480, 32, SDL_HWSURFACE | SDL_DOUBLEBUF)) == NULL)
{
printf("Nao foi possível configurar a tela: %s\n", SDL_GetError());
return 1;
}
E por fim devemos encerrar a SDL e o subsistemas que foram inicializados:
SDL_Quit();