# SDL (biblioteca)

Simple DirectMedia Layer (SDL) é uma biblioteca multimídia livre e de código aberto, multiplataforma, escrito em linguagem C que representa uma interface simples para gráficos, som e dispositivos de entrada de várias plataformas.
SDL tem a palavra "layer" (camada) no título porque é na verdade um wrapper de várias funções específicas do sistema operacional. O propósito principal do SDL é fornecer um framework comum para acessar essas funções. Para maior funcionalidade além desse objetivo, várias bibliotecas foram criadas para funcionar em conjunto com SDL.
Desenvolvedores de software usam-no para escrever jogos de computador e outras aplicações multimídia que funcionem em vários sistemas operacionais: Android, iOS, Linux, Mac OS X, Windows e outras plataformas não-suportadas oficialmente. A biblioteca manipula vídeo, eventos, áudio digital, CD-ROM, threads, carregamento de objetos compartilhados, rede e timers (temporizadores).

## Galeria

* Unknown Horizons
* 0 A.D.
* Hedgewars
* Frets on Fire
* OpenTTD
* The Battle for Wesnoth
* Oolite
* Secret Maryo Chronicles
* Trine

## Design

SDL age como um wrapper de camada fina e multiplataforma, fornecendo suporte a operações de pixel 2D, som, acesso à arquivos, manipulação de eventos, temporizadores, threading, e mais. É frequentemente usado para complementar o OpenGL estabelecendo saída gráfica e fornecendo entrada de mouse e teclado, que vão além do escopo do OpenGL.
A biblioteca é dividida em vários subsistemas, a saber, vídeo (controla ambas as funções de superfície e OpenGL), áudio, CD-ROM, joysticks, e subsistemas de timer. Além desse suporte básico de mais baixo nível, também há algumas bibliotecas oficiais separadas que fornecem mais funções. Essas compreendem a "biblioteca padrão", e são disponibilizadas no site oficial e incluídas na documentação oficial:
* SDL_image — suporte para vários formatos de imagem
* SDL_mixer — funções de áudio complexas, principalmente para mixagem de som
* SDL_net — suporte a networking (rede)
* SDL_ttf — suporte a renderização de fontes TrueType
* SDL_rtf — renderização de textos em RTF simples
Existem também outras bibliotecas não-oficiais. Por exemplo: SDL_Collide no Sourceforge criada por Amir Taaki.
A biblioteca SDL possui bindings de linguagem para muitas linguagens de programação, das populares (C, C++, Pascal, Perl, Python (via Pygame), etc.) até as menos conhecidas como Ch (via ChSDL), Euphoria e Pliant. Isso torna SDL uma biblioteca de código aberto comumente utilizada para muitas aplicações multimídia.

## História

Sam Lantinga criou a biblioteca, inicialmente lançando-a 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 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. Ele também fundou a Galaxy Gameworks em 2008 para apoiar comercialmente o SDL, embora os planos da companhia estejam em espera devido a restrições de tempo.
SDL 2.0 é uma grande atualização ao código-base com uma API diferente, sem retrocompatibilidade. Ela substitui várias partes da API 2.3 com maior suporte genérico para múltiplas opções de entrada e saída.
Algumas adições funcionais incluem suporte a múltiplas janelas, gráficos 2D acelerados por hardware, e melhor suporte a Unicode.
SDL 2.0 possui licença zlib, e portanto é livremente disponível para linkagem estática em projetos comerciais de código fechado, ao contrário do SDL 1.2. No mesmo dia que Sam Lantinga anunciou que estaria indo para a Valve Software, ele também anunciou que "era hora de disponibilizar o SDL 2.0 para as massas".

## Portas

Devido ao modo como SDL foi projetado, muito do seu código fonte é dividido em módulos separados para cada sistema operacional, para fazer chamadas ao sistema subjacente. Quando SDL é compilado, os módulos corretos são selecionados para o sistema alvo.
No Microsoft Windows, SDL usa um backend GDI por padrão. Um backend em DirectX também está disponível. Versões antigas do SDL usavam DirectX 5, mas SDL 1.2 (a versão estável atual) requer DirectX 7 por padrão. Sam Lantinga mencionou que planeja usar DirectX 8 nas versões futuras do SDL.
Nas plataformas X Window System, incluindo Linux e OpenVMS, SDL usa Xlib para se comunicar com o sistema X11 para gráficos e eventos.
No Mac OS X, SDL usa Quartz.

## Sintaxe e subsistemas

A sintaxe de SDL é baseada em funções: todas as operações feitas em SDL são executadas passando parâmetros para funções. Estruturas especiais também são usadas para armazenar informações específicas que o SDL precisa controlar. Há alguns subsistemas diferentes sob os quais o SDL categoriza suas funções:
* Subsistema de vídeo, eventos e threads: esse fornece funções de vídeo, multi-threading, e manipulação de eventos
* Subsistema de áudio: fornece funções comuns de áudio
* Subsistema de tempo
* Subsistema de joystick
* Subsistema de CD-ROM

## 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.
A versão 2.0, que ainda está sob testes, pode ser obtida pelo Mercurial e clonado diretamente para seu computador onde é possível usar os projetos prontos (como Visual Studio no Windows) para compilar as dlls e libs necessárias para o desenvolvimento; mais informações sobre isso podem ser encontradas nesse endereço: www.libsdl.org/hg.php.