# SFML

Simple and Fast Multimedia Library (SFML) es una biblioteca de desarrollo de software multiplataforma diseñada para proveer una simple interfaz de programación para diversos elementos multimedia en computadoras. Está escrita en C++, con versiones homólogas disponibles en Ada, C, Crystal, D, Euphoria, Go, Java, Julia, .NET, Nim, OCaml, Python, Ruby y Rust. Se han desarrollado versiones experimentales para Android y iOS con el lanzamiento de SFML 2.2.
SFML maneja la creación e interacción con ventanas y contextos de OpenGL. También provee un módulo de gráficos que proporciona aceleración por hardware básica de gráficos en 2D, incluyendo renderizado de texto con FreeType; así como un módulo de audio que utiliza OpenAL y un módulo de red para comunicación básica con protocolos TCP y UDP.
SFML es software libre y de código abierto, provisto bajo los términos de la licencia zlib/png. Está disponible para Linux, MacOS, Windows y FreeBSD. La primera versión v1.0 fue lanzada el 9 de agosto de 2007 y la última versión v2.6.0 fue lanzada el 20 de junio de 2023.

## Arquitectura del software
### Módulos

SFML está compuesta por varios módulos:
* System: Clases de vectores y cadenas de texto Unicode, así como facilidades para el uso de temporizadores e hilos multiplataforma.
* Window: Manejo de ventanas y periféricos de entrada, incluyendo soporte para palancas de mando y manejo de contextos de OpenGL.
* Graphics: Aceleración por hardware de gráficos en 2D, incluyendo sprites, polígonos y renderizado de texto.
* Audio: Reproducción y grabación de audio espacial aceleradas por hardware.
* Network: Sockets de Internet TCP y UDP, facilidades para encapsulación de datos, así como clases HTTP y FTP.
Si bien el módulo de gráficos es una de las principales características de SFML, se puede programar directamente en un entorno OpenGL utilizando el módulo Window por sí solo sin la necesidad del módulo de gráficos. Asimismo, los demás módulos pueden ser utilizados de forma independiente, con la excepción del módulo System, del cual dependen todos los módulos.

### Versiones homólogas

SFML está escrito en C++ y provee una interfaz a C++ (así como una interfaz oficial a C a través de CSFML). Existen muchas otras interfaces que permiten el uso de SFML en otros lenguajes de programación.
En la tabla a continuación se muestran las interfaces disponibles para SFML en 2023.
| Lenguaje | Nombre | Versión de SFML |
| Ada | ASFML | 2.4 - 2.6 |
| Beef | BeefSFML | 2.5 |
| C | CSFML ¹ | 2.5 |
| .Net (C#, VB.Net...) | SFML.Net ¹ | 2.5 |
| Crystal | CrSFML | 2.3 - 2.6 |
| D | bindbc-sfml | 2.0 - 2.5 |
| D | DSFML | 2.1 |
| Euphoria | EuSFML2 | 2.4 |
| FPC | csfml-fpc | 2.5 |
| Go | go-sfml | 2.5.1 |
| Haskell | SFML-haskell | 2.3 |
| Java | JSFML | 2.2 |
| Julia | SFML.jl | 2.2 |
| mruby | mruby-sfml | 2.4 |
| Nim | nim-csfml | 2.3 |
| Node.js | sfml.js | 2.5.1 |
| OCaml | ocaml-sfml | 2.5.1 |
| Pascal | PasSFML | 2.4 |
| Plutonium | pltSFML | 2.5 |
| Nelua | csfml-nelua | 2.5.1 |
| Python | pySFML | 2.3.2 |
| Ruby | rbSFML | 2.3.2 |
| Rust | RSFML | 2.5.1 |
| Zig | zig-sfml-wrapper | 2.5.1 |
¹ interfaces oficiales

### Extensiones no oficiales

SFML proporciona funciones básicas por las cuales software de más alto nivel puede ser desarrollado. Existen librerías no oficiales que proveen soporte para interfaces gráficas de usuario, iluminación 2D, sistemas de partículas y animación, reproducción de video y teselaje.

## Recepción y adopción

SFML es utilizada principalmente por desarrolladores de videojuegos aficionados, pequeños desarrolladores de videojuegos independientes y empresas emergentes que consistan de pocos desarrolladores. Como SFML no requiere escribir grandes cantidades de código, ha sido utilizada por muchos participantes de la Ludum Dare. La comunidad de SFMl es relativamente pequeña comparada con librerías más antiguas como Simple DirectMedia Layer (SDL) y Allegro, aunque mantiene un crecimiento sostenido. Al día 12 de agosto de 2023, su repositorio de GitHub ha sido marcado con una estrella por más de 8900 usuarios.
SFML ha sido utilizada como recurso educativo en universidades y en proyectos científicos.