SDL administra video , audio , dispositivos de entrada , subprocesos , carga de objetos compartidos , redes y temporizadores. [6] Para gráficos 3D, puede manejar un contexto OpenGL , Vulkan , [7] Metal o Direct3D11 (también se admite la versión 9 anterior de Direct3D). Un error común es pensar que SDL es un motor de juegos . Sin embargo, la biblioteca es adecuada para crear juegos directamente o se puede utilizar indirectamente mediante motores creados sobre ella.
La biblioteca está escrita internamente en C y posiblemente, dependiendo de la plataforma de destino, en C++ u Objective-C , y proporciona la interfaz de programación de aplicaciones en C, con enlaces a otros lenguajes disponibles. [8] Es un software libre 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 Reducida de GNU . [4] 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, [9] aunque es posible que el usuario anule la biblioteca enlazada estáticamente con una proporcionada por ellos. [10] 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, una biblioteca contenedora hecha para traducir llamadas 1.2 a 2.0 se puso a disposición más tarde. [11]
El SDL se utiliza ampliamente en la industria, tanto en proyectos grandes como pequeños. En 2010, se habían publicado más de 700 juegos, 180 aplicaciones y 120 demostraciones en el sitio web de la biblioteca. [12]
Historia
Sam Lantinga creó la biblioteca, lanzándola por primera vez a principios de 1998, mientras trabajaba para Loki Software . Se le ocurrió la idea mientras portaba una aplicación de Windows a Macintosh. Luego utilizó SDL para portar Doom a BeOS (ver puertos de origen de Doom ). [13] 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 compañía están actualmente en suspenso debido a limitaciones de tiempo. [14]
Poco después de poner en pausa Galaxy Gameworks, Lantinga anunció que SDL 1.3 (que luego se convertiría en SDL 2.0) se licenciaría bajo la licencia zlib . [15] 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 en que se unió a la compañía. [16] Lantinga anunció el lanzamiento estable de SDL 2.0.0 el 13 de agosto de 2013. [17]
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 [18] . Reemplaza varias partes de la API 1.2 con un soporte más general para múltiples opciones de entrada y salida. Algunas características añadidas incluyen soporte para múltiples ventanas, gráficos 2D acelerados por hardware y mejor soporte Unicode . [19]
Se agregó soporte para Mir y Wayland en SDL 2.0.2 [20] y se habilitó de manera predeterminada en SDL 2.0.4. [21] La versión 2.0.4 también proporcionó un mejor soporte para Android. [22]
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). [23] SDL proporciona soporte para operaciones de píxeles 2D, sonido, acceso a archivos, manejo de eventos, sincronización y subprocesamiento. A menudo se utiliza para complementar OpenGL configurando la salida gráfica y proporcionando entrada de mouse y teclado, ya que OpenGL solo incluye renderizado.
Un juego que utilice la capa Simple DirectMedia Layer no se ejecutará automáticamente en todos los sistemas operativos; se deben realizar adaptaciones adicionales. Estas se reducen al mínimo, ya que SDL también contiene algunas API de abstracción para funciones frecuentes que ofrece un sistema operativo.
La sintaxis de SDL se basa en funciones: todas las operaciones que se realizan en SDL se realizan pasando parámetros a subrutinas (funciones). También se utilizan estructuras especiales para almacenar la información específica que SDL necesita manejar. Las funciones de SDL se clasifican en varios subsistemas diferentes.
Subsistemas
SDL se divide en varios subsistemas: [24]
Lo esencial
Inicialización y apagado, variables de configuración, manejo de errores, manejo de registros
Video
Gestión de visualización y ventanas, funciones de superficie, aceleración de renderizado, etc.
Eventos de entrada
Manejo de eventos , compatibilidad con teclado, mouse, joystick y controlador de juegos
Retroalimentación de fuerza
SDL_haptic.h implementa soporte para "Force Feedback"
Audio
SDL_audio.h implementa la gestión, reproducción y grabación de dispositivos de audio
Trapos
multi-threading : gestión de subprocesos, primitivas de sincronización de subprocesos, operaciones atómicas
Temporizadores
Soporte de temporizador
Abstracción de archivos
Rutas del sistema de archivos, abstracción de E/S de archivos
Compatibilidad con objetos compartidos
Carga de objetos compartidos y búsqueda de funciones
Información de la plataforma y la CPU
Detección de plataforma, detección de características de CPU, orden de bytes e intercambio de bytes, manipulación de bits
Gestión de energía
Estado de administración de energía
Adicional
Funcionalidad específica de la plataforma
Además de este soporte básico de bajo nivel, también existen algunas bibliotecas oficiales independientes que proporcionan algunas funciones adicionales. Estas comprenden la "biblioteca estándar" y se proporcionan en el sitio web oficial y se incluyen en la documentación oficial:
SDL_image : compatibilidad con múltiples formatos de imagen [25]
SDL_mixer : funciones de audio complejas, principalmente para mezclar sonido [26]
SDL_net : soporte de redes [27]
SDL_ttf : compatibilidad con la representación de fuentes TrueType [28]
Debido a la forma en que está diseñado SDL, 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 apropiados para el sistema de destino. Están disponibles los siguientes back-ends: [5]
Back-end de DirectX ; la versión anterior de SDL 1.2 usa DirectX 7 de manera predeterminada, mientras que la versión 2.0 usa DirectX 9 de manera predeterminada y puede acceder hasta DirectX 12.
back-end sceGu, un back-end similar a OpenGL de Sony nativo para la PSP .
Hay disponible un back-end no oficial de Sixel para SDL 1.2. [53]
El firmware del reproductor MP3 Rockbox también distribuye una versión de SDL 1.2, que se utiliza para ejecutar juegos como Quake . [54]
Recepción y adopción
A lo largo de los años, SDL se ha utilizado en muchos proyectos de videojuegos comerciales y no comerciales. Por ejemplo, MobyGames enumeró 120 juegos que utilizaban SDL en 2013, [55] y el propio sitio web de SDL enumeró alrededor de 700 juegos en 2012. [56] Algunos ejemplos comerciales importantes son Angry Birds , [57] Unreal Tournament y los juegos desarrollados con el Source Engine de Valve , que utiliza SDL ampliamente para lograr compatibilidad entre plataformas; los del dominio de código abierto son OpenTTD , [58] The Battle for Wesnoth [59] o Freeciv . [60]
Los lanzamientos de juegos multiplataforma de los populares Humble Indie Bundles para Linux, Mac y Android a menudo se basan en SDL.
SDL también se utiliza a menudo para versiones posteriores en nuevas plataformas con código heredado. Por ejemplo, el juego para PC Homeworld se adaptó a la consola portátil Pandora [61] y Jagged Alliance 2 para Android [62] a través de SDL.
^ "Versión 2.30.7". 1 de septiembre de 2024. Consultado el 26 de septiembre de 2024 .
^ "Oh, mira, tendremos soporte oficial para tvOS en SDL 2.0.5, ¡para las personas que quieran sus juegos basados en SDL en Apple TV!". 15 de septiembre de 2016.
^ "SDL/docs/README-riscos.md en 9d83c0a65d969a902c91f4f94fd5a904c0828a33 · libsdl-org/SDL". GitHub . Consultado el 17 de marzo de 2024 .
^ ab "Licencia SDL" . Consultado el 3 de marzo de 2014 .
^ ab "una lista de las plataformas compatibles con SDL". Libsdl.org. Archivado desde el original el 1 de abril de 2016. Consultado el 9 de abril de 2016 .
^ "Sitio web oficial de SDL". Libsdl.org . Consultado el 19 de marzo de 2010 .
^ ab "CategoryVulkan - SDL Wiki'". wiki.libsdl.org . Consultado el 5 de mayo de 2019 .
^ abcdefghij "Enlaces de lenguaje SDL". libsdl.org . Capa DirectMedia simple . Consultado el 13 de agosto de 2014 .
^ "Licencia de la biblioteca Simple DirectMedia Layer" . Consultado el 30 de enero de 2012 .
^ "SDL/docs/README-dynapi.md en main · libsdl-org/SDL". GitHub . Consultado el 25 de junio de 2024 .
^ libsdl-org/sdl12-compat, Simple Directmedia Layer, 1 de junio de 2024 , consultado el 25 de junio de 2024
^ "Capa DirectMedia simple". 29 de junio de 2010. Archivado desde el original el 29 de junio de 2010. Consultado el 7 de agosto de 2021 .
^ Lantinga, Sam (1 de septiembre de 1999). "SDL: Making Linux fun" (SDL: Hacer que Linux sea divertido). IBM . Archivado desde el original el 11 de mayo de 2003. Consultado el 15 de diciembre de 2023 .
^ "Explorando la galaxia". 6 de abril de 2011. Consultado el 30 de enero de 2012 .
^ SDL 1.3 tendrá licencia zLib, lista de correo de SDL, 7 de abril de 2011
^ "SDL 2.0 llegará muy pronto con nuevas funciones" . Consultado el 17 de agosto de 2012 .
^ Anuncio de SDL 2.0.0, lista de correo de SDL, 13 de agosto de 2013
^ MigrationGuide - SDL Wiki'. Wiki.libsdl.org (21 de noviembre de 2013). Consultado el 8 de diciembre de 2013.
^ "Hoja de ruta de SDL 1.3". 14 de junio de 2011. Consultado el 25 de julio de 2011 .
^ Sneddon, Joey-Elijah (5 de febrero de 2014). "Algunos de los juegos más populares de Linux se ejecutarán de forma nativa en Mir" . Consultado el 19 de marzo de 2014 .
^ Lantinga, Sam (2 de enero de 2016). «Registro de cambios de SDL 2.0.4» . Consultado el 6 de enero de 2016 .
^ "Informe SDL_SysWM".
^ "Introducción a SDL" . Consultado el 3 de marzo de 2014 .
^ "APIPorCategoría".
^ "SDL_image 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
^ "SDL_mixer 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
^ "SDL_net 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
^ "SDL_ttf 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
^ "SDL_rtf 0.1". libsdl.org . Consultado el 19 de julio de 2014 .
^ "cl-sdl2". GitHub . Consultado el 23 de noviembre de 2017 .
^ "f03sdl2". GitHub . Consultado el 28 de octubre de 2019 .
^ "gb.sdl2". Wiki Gambas . Consultado el 2 de febrero de 2023 .
^ ab Robison, Arch D. (9 de noviembre de 2015). "Go + Julia + Fourier = Open Source Frequon Invaders". software.intel.com . Consultado el 2 de agosto de 2019 .
^ "SDL en Hackage".
^ "SDL2 en Hackage".
^ Bieler, Jonathan (30 de julio de 2020). «jonathanBieler/SimpleDirectMediaLayer.jl». GitHub . Consultado el 8 de agosto de 2020 .
^ SquidSinker (2 de agosto de 2020). «Juegos de ejemplo para GameZero.jl». GitHub . Consultado el 8 de agosto de 2020 .
^ Daly, Nathan (31 de julio de 2019). "Juego de ejemplo escrito en Julia con SDL2". GitHub . Consultado el 2 de agosto de 2019 .
^ "SDL2 para Nim". GitHub . Consultado el 31 de mayo de 2022 .
^ "Colección de la biblioteca de proveedores de Odin".
^ "Repositorio de Odin en GitHub".
^ "PerlGameDev/SDL". GitHub . Consultado el 20 de febrero de 2019 .
^ "PHP-SDL". GitHub . Consultado el 28 de octubre de 2019 .
^ "SDL2::Raw". modules.raku.org . Consultado el 15 de mayo de 2020 .
^ Introducción a la programación en anillo: de principiante a profesional | Mansour Ayouni | Apress.
^ "Uso de RingLibSDL — Documentación de Ring 1.16".
^ "WhatsNew.txt" . Consultado el 28 de septiembre de 2020 .
^ "[Commits] SDL: Habilitar la construcción del renderizador de Metal de forma predeterminada y líneas débiles..." 7 de diciembre de 2017.
^ "SDL: README-platforms.txt@3e2f230a6d62". Hg.libsdl.org . libsdl.org. Archivado desde el original el 15 de diciembre de 2013 . Consultado el 8 de diciembre de 2013 .
^ "Uso de OpenGL con SDL" . Consultado el 9 de julio de 2015 .
^ "SDL y Wayland".
^ Larabel, Michael (30 de septiembre de 2013). "Compatibilidad con Raspberry Pi añadida a la biblioteca SDL2".
^ "SDL 1.2 Sixel". GitHub . Consultado el 9 de abril de 2016 .
^ "SDLPluginPort" . Consultado el 11 de agosto de 2019 .
^ "Middleware: SDL Group Description". MobyGames . 27 de septiembre de 2013 . Consultado el 18 de mayo de 2012 . Juegos que utilizan la capa Simple DirectMedia Layer, muy portátil.
^ "Juegos". libsdl.org. 18 de mayo de 2012. Archivado desde el original el 29 de junio de 2010. Consultado el 18 de mayo de 2012 .
^ "Testimonios de SDL". Galaxygameworks.com. Archivado desde el original el 16 de julio de 2011. Consultado el 1 de febrero de 2012 .
^ "Desarrollo". OpenTTD . Consultado el 19 de marzo de 2010 .
^ "CompilingWesnoth". Wesnoth. 27 de febrero de 2010. Consultado el 19 de marzo de 2010 .
^ "SDLClient - Freeciv.org". Freeciv.wikia.com . Consultado el 19 de marzo de 2010 .
^ may88 (23 de junio de 2011). "Juego de la semana n.º 3: Homeworld SDL". pandorapress.net . Consultado el 8 de mayo de 2012 . [...] versión publicada de HomeworldSDL. El miembro del foro Edglex permite que tu Pandora experimente el excelente trabajo realizado por los chicos de HomeworldSDL.{{cite web}}: CS1 maint: nombres numéricos: lista de autores ( enlace )
^ Comentarios sobre JA2 Stracciatella » Versión RC2 del puerto Stracciatella para Android de Jagged Alliance 2: prueba la versión Archivado el 23 de octubre de 2012 en Wayback Machine en el foro Bear's Pit, 3 de octubre de 2011
^ "Características · fifengine/fifengine Wiki · GitHub". GitHub . Consultado el 9 de marzo de 2015 .
^ "Preguntas frecuentes sobre Hedgewars". hedgewars.org . Consultado el 3 de octubre de 2014. ...SDL >= 1.2.5...
^ "Detalles de desarrollo". scorched3d.co.uk . Archivado desde el original el 6 de octubre de 2014 . Consultado el 3 de octubre de 2014 . ...Simple DirectMedia Layer - SDL para ventanas de juegos multiplataforma...
^ "Acerca del juego" . Consultado el 20 de septiembre de 2021 .
^ "Dependencias de OOlite SDL". GitHub . 29 de mayo de 2016 . Consultado el 21 de septiembre de 2021 .
^ "Hoja de ruta - Wesnoth". www.wesnoth.org . Consultado el 9 de marzo de 2015 .
^ "Nueva versión: 0 AD Alpha 19 Syllepsis". 26 de noviembre de 2015. Consultado el 20 de septiembre de 2021. Usuarios de Linux, tengan en cuenta que SDL2 ahora está habilitado de forma predeterminada en Linux .
^ "Secret Maryo Chronicles". sourceforge.net . 28 de agosto de 2014 . Consultado el 3 de octubre de 2014 . ... basado en SDL ...
^ "Soporte de Frozenbyte". trine2.com . Consultado el 1 de septiembre de 2020 .
^ "[Cómo] Compilar 0.7 en Windows (Página 1) — Desarrollo — Foro Teeworlds".
Lectura adicional
Alberto García Serrano: Programación de videojuegos en SDL , Ediversitas, ISBN 84-95836-08-4 (español)
Ernest Pazera: Enfoque en SDL , Muska & Lipman/Premier-Trade, ISBN 1-59200-030-4
Ron Penton: Estructuras de datos para programadores de juegos , Muska & Lipman/Premier-Trade, ISBN 1-931841-94-2 ( ejemplos de programación de juegos con SDL )
John R. Hall: Programming Linux Games , No Starch, ISBN 1-886411-49-2 ( primer libro de SDL, de Loki Games , versión archivada en línea: PDF en Wayback Machine (archivado el 22 de enero de 2003), fuentes LaTex en Wayback Machine (archivado el 14 de febrero de 2003))