Capa de DirectMedia simple
Simple DirectMedia Layer (SDL) es una biblioteca de desarrollo de software multiplataforma diseñada para proporcionar una capa de abstracción de hardware para componentes de hardware multimedia informáticos. Los desarrolladores de software pueden usarlo para escribir juegos de computadora de alto rendimiento y otras aplicaciones multimedia que pueden ejecutarse en muchos sistemas operativos, como Android, iOS, Linux, macOS y Windows.
SDL administra video, audio, dispositivos de entrada, CD-ROM, subprocesos, carga de objetos compartidos, redes y temporizadores. Para gráficos 3D, puede manejar un contexto OpenGL, Vulkan, Metal o Direct3D11 (también se admite la versión anterior de Direct3D 9). Una idea errónea común es que SDL es un motor de juegos. Sin embargo, la biblioteca es adecuada para crear juegos directamente o puede ser utilizada indirectamente por motores construidos encima de ella.
La biblioteca está escrita internamente en C y posiblemente, dependiendo de la plataforma de destino, C++ u Objective-C, y proporciona la interfaz de programación de aplicaciones en C, con enlaces a otros lenguajes disponibles. Es software gratuito y de código abierto sujeto a los requisitos de la Licencia zlib desde la versión 2.0, y con versiones anteriores sujetas a la Licencia Pública General Menor de GNU. Bajo la licencia zlib, SDL 2.0 está disponible gratuitamente para enlaces estáticos en proyectos de código cerrado, a diferencia de SDL 1.2. SDL 2.0, lanzado en 2013, fue un cambio importante con respecto a las versiones anteriores, ofreciendo más oportunidades para la aceleración de hardware 3D, pero rompiendo la compatibilidad con versiones anteriores.
SDL se usa mucho en la industria, tanto en proyectos grandes como pequeños. Se han publicado más de 700 juegos, 180 aplicaciones y 120 demostraciones en el sitio web de la biblioteca.
Historia
Sam Lantinga creó la biblioteca y la lanzó por primera vez a principios de 1998, mientras trabajaba para Loki Software. Se le ocurrió la idea mientras migraba una aplicación de Windows a Macintosh. Luego usó SDL para portar Doom a BeOS (ver Puertos fuente de Doom). Se desarrollaron varias otras bibliotecas gratuitas para trabajar junto con SDL, como SMPEG y OpenAL. También fundó Galaxy Gameworks en 2008 para ayudar a respaldar comercialmente a SDL, aunque los planes de la empresa están actualmente en suspenso debido a limitaciones de tiempo.
Poco después de suspender Galaxy Gameworks, Lantinga anunció que SDL 1.3 (que más tarde se convertiría en SDL 2.0) tendría la licencia zlib. Lantinga anunció SDL 2.0 el 14 de julio de 2012, al mismo tiempo que anunció que se uniría a Valve, cuya primera versión se anunció el mismo día que se unió a la empresa. Lantinga anunció el lanzamiento estable de SDL 2.0.0 el 13 de agosto de 2013.
SDL 2.0 es una actualización importante del código base de SDL 1.2 con una API diferente, no compatible con versiones anteriores. Reemplaza varias partes de la API 1.2 con soporte más general para múltiples opciones de entrada y salida. Algunas adiciones de características incluyen compatibilidad con múltiples ventanas, gráficos 2D acelerados por hardware y mejor compatibilidad con Unicode.
La compatibilidad con Mir y Wayland se agregó en SDL 2.0.2 y se activó de manera predeterminada en SDL 2.0.4. La versión 2.0.4 también proporcionó un mejor soporte para Android.
Arquitectura de software
SDL es un contenedor de las funciones específicas del sistema operativo a las que el juego necesita acceder. El único propósito de SDL es proporcionar un marco común para acceder a estas funciones para múltiples sistemas operativos (multiplataforma). SDL brinda soporte para operaciones de píxeles 2D, sonido, acceso a archivos, manejo de eventos, temporización y subprocesos. A menudo se usa para complementar OpenGL configurando la salida gráfica y proporcionando entrada de mouse y teclado, ya que OpenGL comprende solo la representación.
Un juego que utilice Simple DirectMedia Layer no se ejecutará automáticamente en todos los sistemas operativos; se deben aplicar más adaptaciones. Estos se reducen al mínimo, ya que SDL también contiene algunas API de abstracción para las funciones frecuentes que ofrece un sistema operativo.
La sintaxis de SDL se basa en funciones: todas las operaciones realizadas en SDL se realizan pasando parámetros a subrutinas (funciones). También se utilizan estructuras especiales para almacenar la información específica que debe manejar SDL. Las funciones SDL se clasifican en varios subsistemas diferentes.
Subsistemas
SDL se divide en varios subsistemas:
- Básicos
- Iniciación y cierre, Variables de configuración, Manejo de errores, Manejo de registros
- Video
- Manejo de pantalla y ventana, funciones de superficie, aceleración de renderizado, etc.
- Input Events
- Manejo de eventos, Soporte para teclado, ratón, joystick y controlador de juego
- Reacción de la fuerza
- SDL_haptic.h implementa soporte para "Force Feedback"
- Audio
- SDL_audio.h implementa Audio Device Management, Play and Recording
- Panes
- Multi-threading: Thread Management, Thread Synchronization Primitives, Atomic Operations
- Timers
- Timer Support
- Abstracción de archivos
- Filesystem Paths, Archivo I/O Abstracción
- Shared Object Support
- Buscar objetos y funciones compartidos
- Plataforma e información de la CPU
- Detección de plataformas, detección de características de CPU, conmutación de orden Byte y Byte, Manipulación de bits
- Power Management
- Situación de la gestión de poderes
- Adicional
- Función específica de la plataforma
Además de este soporte básico de bajo nivel, también hay algunas bibliotecas oficiales separadas que brindan algunas funciones más. Estos comprenden la "biblioteca estándar" y se proporcionan en el sitio web oficial y se incluyen en la documentación oficial:
- SDL_image — soporte para múltiples formatos de imagen
- SDL_mixer — funciones de audio complejas, principalmente para mezclar sonido
- SDL_net — Apoyo a las redes
- SDL_ttf — Soporte de renderizado de fuentes de TrueType
- SDL_rtf — formato simple de texto rico
También existen otras bibliotecas no estándar. Por ejemplo: SDL_Collide en SourceForge creado por Amir Taaki.
Conexiones de idioma
La biblioteca SDL 2.0 tiene enlaces de idioma para:
- Ada
- Beef
- C
- C++
- C#
- D
- Fortran
- Genie
- Vamos.
- Haskell
- Java (por ejemplo, JSDL)
- Julia
- Lua
- Nim
- OCaml
- Pascal
- Perl (vía SDL)
- PHP
- Python (several, pygame_sdl2 y sdl2hl)
- Raku
- Anillo
- Rust
- Vala
- Lisp común
Back-ends compatibles
Debido a la forma en que SDL está diseñado, gran parte de su código fuente se divide en módulos separados para cada sistema operativo, para realizar llamadas al sistema subyacente. Cuando se compila SDL, se seleccionan los módulos adecuados para el sistema de destino. Los siguientes back-ends están disponibles:
- GDI back-end para Microsoft Windows.
- DirectX back-end; SDL 1.2 antiguo utiliza DirectX 7 por defecto, mientras que 2.0 por defecto a DirectX 9 y puede acceder a DirectX 11.
- Quartz back-end para macOS (en 2.0).
- Metal back-end para macOS / iOS / tvOS desde 2.0.8; versiones anteriores usan OpenGL por defecto.
- Xlib back-end for X11-based windowing system on various operating systems.
- OpenGL contexts on various platforms.
- EGL back-end cuando se utiliza junto con el sistema de ventana basado en Wayland., Raspberry Pi y otros sistemas.
- Vulkan contexts on platforms that support it.
- sceGu back-end, un Sony OpenGL como backend nativo del PSP.
SDL 1.2 es compatible con RISC OS (incluido en 2.0).
Hay disponible un back-end no oficial de Sixel para SDL 1.2.
El firmware del reproductor de MP3 Rockbox también distribuye una versión de SDL 1.2, que se utiliza para ejecutar juegos como Quake.
Recepción y adopción
A lo largo de los años, SDL se utilizó para muchos proyectos de videojuegos comerciales y no comerciales. Por ejemplo, MobyGames enumeró 120 juegos que usaban SDL en 2013, y el sitio web de SDL enumeró alrededor de 700 juegos en 2012. Ejemplos comerciales importantes son Angry Birds, Unreal Tournament y juegos desarrollado usando Source Engine de Valve, que usa SDL extensivamente para compatibilidad multiplataforma; los del dominio de código abierto son OpenTTD, The Battle for Wesnoth o Freeciv.
Los lanzamientos de juegos multiplataforma de los populares Humble Indie Bundles para Linux, Mac y Android suelen estar basados en SDL.
SDL también se usa a menudo para puertos posteriores en nuevas plataformas con código heredado. Por ejemplo, el juego de PC Homeworld se transfirió a la computadora de mano Pandora y Jagged Alliance 2 para Android a través de SDL.
Además, varios programas que no son de videojuegos usan SDL; ejemplos son los emuladores, como DOSBox, el emulador FUSE ZX Spectrum y VisualBoyAdvance.
Se escribieron varios libros para el desarrollo con SDL (ver lecturas adicionales).
SDL se usa en cursos universitarios que enseñan multimedia e informática, por ejemplo, en un taller sobre programación de juegos usando libSDL en la Universidad de Cádiz en 2010, o una disciplina de Diseño de juegos en UTFPR (campus de Ponta Grossa) en 2015.
Ejemplos de videojuegos usando SDL
Contenido relacionado
Wikipedia:Lista completa de temas de enciclopedia (obsoleta)/C
Cronología de la computación
Lista de proyectos de inteligencia artificial