# SFML

Simple and Fast Multimedia Library (SFML) é uma biblioteca multiplataforma, orientada a objetos e livre. É uma API multimédia escrita em C++ por Laurent Gomila, que tem como objetivo fornecer uma interface simples para vários componentes multimédia do computador.
Além disso, a biblioteca tem bindings para outras linguagens, como C, D, Java, Python, Ruby, .NET, Go, Rust, OCaml, Euphoria e Nim. Com o lançamento da versão 2.2, também foi introduzido suporte experimental para as plataformas Android e iOS.
A biblioteca lida com criação de janelas e gestão do input, assim como manutenção e criação dos contextos de OpenGL. Também fornece um módulo para renderização de gráficos em 2D, acelerado por hardware, que inclui renderização de texto através da biblioteca FreeType. O módulo de áudio utiliza o OpenAL como base para reprodução e gravação de audio e o módulo de rede que fornece uma API para comunicação de dados em rede, através de TCP ou UDP.
A biblioteca é livre e open-source, distribuída de acordo com os termos da licença zlib/png. Está disponível em Windows, Linux, OS X e FreeBSD.

## Arquitetura do software
### Módulos

A biblioteca SFML é composta por vários módulos. Dentre eles:

#### System

Classes para manipular vetores, strings de texto em Unicode, threads multiplataforma e temporizadores.

#### Window

Classes para abrir janelas com contextos de OpenGL ativos, com suporte para lidar com input, incluindo joysticks (comandos e outros dispositivos).

#### Graphics

Classes para renderização de gráficos com aceleração por hardware, incluindo texto, polígonos e sprites.

#### Áudio

Classes para reproduzir ou gravar áudio. Incluindo espacialização 3D dos sons e streaming de músicas, tudo com aceleração por hardware.

#### Network

Classes para transmissão de dados por UDP e TCP multiplataforma, utilitários para encapsular dados em pacotes para o seu transporte e uma camada alto nível para transmitir dados via HTTP ou FTP.
Apesar de o módulo gráfico ser um dos mais procurados na biblioteca, programadores com interesse em usar o ambiente SFML para programar diretamente com OpenGL podem fazer isso facilmente, ignorando o módulo gráfico e utilizando apenas o módulo Window. Todos os outros módulos são independentes, com excepção do System, do qual todos os outros módulos dependem.

### Bindings para outras linguagens

A biblioteca SFML é escrita nativamente em C++; contudo, existem vários bindings da biblioteca que permitem que a mesma seja utilizada com outras linguagens.
Esta tabela contém a lista de bindings existentes atualmente:
| Nome | Linguagem | Versão suportada |
| CSFML$^1$ | C | 2.2 |
| SFML.Net$^1$ | .NET | 2.2 |
| JSFML | Java | 2.2 |
| DSFML | D | 2.1 |
| pySFML | Python | 2.2 |
| rbSFML | Ruby | 2.0 |
| GoSFML2 | Go | 2.1 |
| rust-sfml | Rust | 2.1 |
| Ocsfml | OCaml | 2.2 |
| ocaml-sfml | OCaml | 2.0 |
| EuSFML2 | Euphoria | 2.0 |
| nim-csfml | Nim | 2.2 |
| SFML.jl | Julia | 2.2 |
$^1$ Bindings oficiais

### Extensões não oficiais

A biblioteca SFML forma uma base de software na qual outras bibliotecas ou aplicações podem ser construídas. Existem algumas extensões para vários fins como suportar GUIs (Graphical user interfaces), iluminação 2D, sistemas de partículas e animação, reprodução de vídeos e mapas de tiles.

## Recepção da biblioteca

A biblioteca é principalmente usada por desenvolvedores de jogos amadores e empresas de startup com poucos elementos. Como a biblioteca é bastante alto nivel e uma boa ferramenta para fazer rapidamente pequenos jogos, tem sido adotada por participantes da competição Ludum Dare. Comparativamente a outras bibliotecas concorrentes mais antigas, a base de utilizadores de SFML ainda é relativamente pequena, mas o seu crescimento tem sido consistente. Neste momento (4 de março de 2015), o repositório no GitHub já foi seguido por 1968 utilizadores.
A biblioteca também já foi usada recurrentemente para ensino nas universidades e para projetos científicos também.

### Videojogos que usam SFML

* Atom Zombie Smasher, real-time strategy;
* Chesster, puzzle;
* Cosmoscroll, shoot'em up;
* Crea, 2D sandbox;
* HolySpirit, 3D isometric hack and slash;
* Kroniax, side-scrolling;
* M.A.R.S., shoot 'em up multijogador;
* Moonman, sandbox e exploração;
* Ovid The Owl, puzzle platformer;
* Project Black Sun, retro 2D side-scrolling;
* The Duke, action platformer;
* Vagante, action RPG platformer;
* The Shooting of Isaac, vertical shooter;
* Open Hexagon, open-source Super Hexagon clone;
* Pirates Treasure;
* Enchanted Forest;
* Limit Theory, infinite, procedural space game;
* Postmortem: one must die, narrative-adventure game;
* Pioneers, turn based exploration game with some RPG elements;
* Zloxx, 2D action platformer;
* KeeperRL, dungeon simulator with rogue-like and RPG elements.
Outros exemplos de jogos que usam SFML podem ser encontrados no IndieDB, aqui.

### Outros softwares que usam SFML

* Aquila, biblioteca open-source de DSP para C++;
* Otter, framework para 2D em C#;
* GDevelop, software de criação de jogos open-source;
* Immersion Engine, ferramenta para visualizar arquitetura e ambientes de forma detalhada.

## Histórico de versões

* 1.0 (Julho de 2007)
** 1.1 (18 de setembro de 2007);
** 1.2 (16 de janeiro de 2008);
** 1.3 (22 de junho de 2008);
** 1.4 (7 de janeiro de 2009);
** 1.5 (4 de junho de 2009);
** 1.6 (6 de abril de 2010) : release para reparação de bugs.
* 2.0 (29 de abril de 2013)
** 2.1 (27 de julho de 2013);
** 2.2 (17 de dezembro de 2014);
** 2.3 (7 de maio de 2015);
** 2.4 (8 de agosto de 2016).