Articulo de referencia

Capa DirectMedia simple

2.32.0 / {{Start date and age|2025|02|08|df=yes}}"},"operating system":{"wt":"Version 3 supports same (current) platforms as {{nowrap|version 2}}, such as 32- and 64-bit Windows...

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 de computadora . Los desarrolladores de software pueden usarla para escribir juegos de computadora de alto rendimiento y otras aplicaciones multimedia que pueden ejecutarse en muchos sistemas operativos como AmigaOS , Android , iOS , Linux , MorphOS , macOS y Windows . [ 9 ]

SDL gestiona vídeo , audio , dispositivos de entrada , subprocesos , carga de objetos compartidos , redes informáticas y temporizadores. [ 10 ] Para gráficos 3D, puede manejar un contexto OpenGL , Vulkan , [ 11 ] Metal o Direct3D12 [ 12 ] (también se admiten versiones anteriores de Direct3D, 11 y 9). Una idea errónea común es que SDL es un motor de juegos . Sin embargo, la biblioteca es adecuada para construir juegos directamente, o puede ser utilizada indirectamente por motores construidos 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 disponibles a otros lenguajes. [ 13 ] Es 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 sujeto a la Licencia Pública General Reducida de GNU . [ 8 ] Bajo la Licencia zlib, SDL 2.0 está disponible libremente para el enlace estático en proyectos de código cerrado , a diferencia de SDL 1.2, [ 14 ] aunque es posible que el usuario reemplace la biblioteca enlazada estáticamente con una proporcionada por él. [ 15 ] 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 retrocompatibilidad; posteriormente se puso a disposición una biblioteca de envoltura hecha para traducir las llamadas de 1.2 a 2.0. [ 16 ]

SDL se utiliza ampliamente en la industria tanto en proyectos grandes como pequeños. Para 2010, se habían publicado más de 700 juegos, 180 aplicaciones y 120 demos en el sitio web de la biblioteca. [ 17 ]

SDL es compatible con Emscripten (es decir, programas que se ejecutan en una página web).

SDL 3 se lanzó como versión estable en enero de 2025. Incluye una guía de migración y soporte para la herramienta Coccinelle para facilitar la migración a la nueva versión principal. SDL 3 ofrece una nueva forma de controlar el punto de entrada del programa [ 18 ] y permite controlar la ejecución de forma independiente del framework.

Historia

Sam Lantinga creó la biblioteca, lanzándola por primera vez a principios de 1998, mientras trabajaba para Loki Software . La idea surgió mientras adaptaba una aplicación de Windows a Macintosh. Luego usó SDL para adaptar Doom a BeOS (ver adaptaciones de código fuente de Doom ). [ 19 ] En el momento de su creación, SDL era considerada una alternativa sencilla a DirectX. [ 20 ] Se desarrollaron varias otras bibliotecas gratuitas para funcionar junto con SDL, como SMPEG y OpenAL . También fundó Galaxy Gameworks en 2008 para ayudar a dar soporte comercial a SDL, aunque los planes de la empresa están actualmente en suspenso debido a limitaciones de tiempo. [ 21 ]

Poco después de suspender Galaxy Gameworks, Lantinga anunció que SDL 1.3 (que luego se convertiría en SDL 2.0) se licenciaría bajo la licencia zlib . [ 22 ] Lantinga anunció SDL 2.0 el 14 de julio de 2012, al mismo tiempo que anunciaba que se unía a Valve , cuya primera versión se anunció el mismo día que se unió a la compañía. [ 23 ] Lantinga anunció el lanzamiento estable de SDL 2.0.0 el 13 de agosto de 2013. [ 24 ]

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 [ 25 ] . Reemplaza varias partes de la API 1.2 con soporte más general para múltiples opciones de entrada y salida. Algunas de las características añadidas incluyen soporte para múltiples ventanas, gráficos 2D acelerados por hardware y mejor soporte para Unicode . [ 26 ]

Se agregó soporte para Mir y Wayland en SDL 2.0.2 [ 27 ] y se habilitó por defecto en SDL 2.0.4. [ 28 ] La versión 2.0.4 también proporcionó un mejor soporte para Android. [ 29 ]

En 2024, se lanzó la versión preliminar estable de SDL 3.1.3 (y en enero de 2025 se lanzó la versión estable 3.2.0). Esto hace que la API sea más consistente y permite el acceso a más partes del dispositivo, junto con otras características. [ 30 ]

Arquitectura de software

SDL es una capa de abstracción que envuelve las funciones específicas del sistema operativo a las que el programa necesita acceder. Su único propósito es proporcionar un marco común para acceder a estas funciones en múltiples sistemas operativos (multiplataforma). [ 31 ] SDL ofrece soporte para operaciones con píxeles 2D, sonido, acceso a archivos, gestión de eventos, sincronización e hilos. Se suele utilizar para complementar OpenGL , configurando la salida gráfica y proporcionando entrada de ratón y teclado, ya que OpenGL solo se encarga de la renderización.

Un juego que utiliza la capa Simple DirectMedia Layer (SDL) no se ejecutará automáticamente en todos los sistemas operativos; se requieren adaptaciones adicionales. Estas se reducen al mínimo, ya que SDL también incluye algunas API de abstracción para las funciones más comunes que ofrece el sistema operativo.

La sintaxis de SDL se basa en funciones: todas las operaciones se realizan pasando parámetros a subrutinas (funciones). También se utilizan estructuras especiales para almacenar la información específica que SDL necesita procesar. Las funciones de SDL se clasifican en varios subsistemas diferentes.

Subsistemas

SDL se divide en varios subsistemas: [ 32 ]

Lo esencial
Inicialización y apagado, variables de configuración, manejo de errores, manejo de registros.
Video
Gestión de pantalla y ventanas, funciones de superficie, aceleración de renderizado, etc.
Eventos de entrada
Gestión de eventos , compatibilidad con teclado, ratón, joystick y mando de juegos.
Retroalimentación de fuerza
SDL_haptic.h implementa la compatibilidad con "Retroalimentación de fuerza".
Audio
SDL_audio.h implementa la gestión, reproducción y grabación de dispositivos de audio.
Trapos
Multiprocesamiento : Gestión de hilos, Primitivas de sincronización de hilos, 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 sobre la plataforma y la CPU
Detección de plataforma, detección de características de la 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 funciones adicionales. Estas conforman la "biblioteca estándar" y se encuentran disponibles en el sitio web oficial y se incluyen en la documentación oficial.

  • SDL_image — soporte para múltiples formatos de imagen [ 33 ]
  • SDL_mixer : funciones de audio complejas, principalmente para la mezcla de sonido [ 34 ].
  • SDL_net — soporte de red [ 35 ]
  • SDL_ttf — Compatibilidad con la representación de fuentes TrueType [ 36 ]
  • SDL_shadercross : traducción de formato de sombreador (como de SPIR-V a HLSL ); destinado a ser utilizado con la API de GPU de SDL. [ 37 ]
  • SDL_rtf — renderizado simple de formato de texto enriquecido [ 38 ]
  • SDL_native_midi — soporte para reproducción MIDI [ 39 ]
  • SDL_gesture — Reconocimiento de gestos '$1 Unistroke' [ 40 ]

También existen otras bibliotecas no estándar. Por ejemplo: SDL_Collide en SourceForge, creada por Amir Taaki .

Enlaces de lenguaje

La biblioteca SDL 2.0 tiene enlaces de lenguaje para:

Sistemas backend compatibles

Capas de abstracción de varias plataformas SDL

Debido a su diseño, gran parte del código fuente de SDL se divide en módulos separados para cada sistema operativo, con el fin de realizar llamadas al sistema subyacente. Al compilar SDL, se seleccionan los módulos adecuados para el sistema de destino. Los siguientes back-ends están disponibles: [ 9 ]

Existe un backend no oficial de Sixel disponible para SDL 1.2. [ 60 ]

El firmware del reproductor MP3 Rockbox también distribuye una versión de SDL 1.2, que se utiliza para ejecutar juegos como Quake . [ 61 ]

Recepción y adopción

Taller sobre SDL, Universidad de Cádiz (2010)

A lo largo de los años, SDL se ha utilizado en numerosos proyectos de videojuegos, tanto comerciales como no comerciales. Por ejemplo, MobyGames enumeró 120 juegos que utilizaban SDL en 2013, [ 62 ] y el propio sitio web de SDL enumeró alrededor de 700 juegos en 2012. [ 63 ] Ejemplos comerciales importantes son Angry Birds , [ 64 ] Unreal Tournament y juegos desarrollados con el motor Source de Valve , que utiliza SDL de forma extensiva para la compatibilidad multiplataforma; entre los ejemplos de código abierto se encuentran OpenTTD , [ 65 ] The Battle for Wesnoth [ 66 ] o Freeciv . [ 67 ]

Los lanzamientos 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 adaptaciones posteriores a nuevas plataformas con código heredado. Por ejemplo, el juego para PC Homeworld se adaptó a la consola portátil Pandora [ 68 ] y Jagged Alliance 2 para Android [ 69 ] mediante SDL.

Además, varios programas que no son videojuegos utilizan SDL; ejemplos de ello son los emuladores , como DOSBox , el emulador FUSE ZX Spectrum y VisualBoyAdvance .

Se han escrito varios libros sobre desarrollo con SDL (véase la bibliografía recomendada).

SDL se utiliza en cursos universitarios de multimedia e informática , por ejemplo, en un taller sobre programación de videojuegos con libSDL en la Universidad de Cádiz en 2010, o en una asignatura de Diseño de Videojuegos en la UTFPR (campus de Ponta Grossa) en 2015.

Ejemplos de videojuegos que utilizan SDL

Véase también

Referencias

  1. "Versión 3.4.12" . 1 de julio de 2026. Consultado el 2 de julio de 2026 .
  2. "winrt: Se eliminó la compatibilidad con WinRT/Windows Phone/UWP. por icculus · Solicitud de extracción n.° 10731 · libsdl-org/SDL" . GitHub . Consultado el 9 de febrero de 2025 .
  3. "SDL/docs/README-platforms.md en main · libsdl-org/SDL" . GitHub . Consultado el 9 de febrero de 2025 .
  4. "¡Miren, tendremos soporte oficial para tvOS en SDL 2.0.5, para quienes quieran jugar sus juegos basados ​​en SDL en Apple TV!" 15 de septiembre de 2016.
  5. "SDL/docs/README-riscos.md en 9d83c0a65d969a902c91f4f94fd5a904c0828a33 · libsdl-org/SDL" . GitHub . Consultado el 17 de marzo de 2024 .
  6. "Gran juego de estilo Galaga con colores reales para MorphOS (usa SDL)" .
  7. "Bibliotecas SDL 2.30.7" . Consultado el 6 de noviembre de 2024 .
  8. 1 2 "Licencia SDL" . Consultado el 3 de marzo de 2014 .
  9. 1 2 "una lista de las plataformas compatibles con SDL" . Libsdl.org. Archivado del original el 1 de abril de 2016. Recuperado el 9 de abril de 2016 .
  10. "Sitio web oficial de SDL" . Libsdl.org . Consultado el 19 de marzo de 2010 .
  11. 1 2 "Categoría Vulkan - Wiki de SDL"" . wiki.libsdl.org . Consultado el 9 de febrero de 2025 .
  12. "SDL3/CategoryGPU - SDL Wiki" . wiki.libsdl.org . Consultado el 16 de junio de 2026 .
  13. 1 2 3 4 5 6 7 8 9 10 "Enlaces de lenguaje SDL" . libsdl.org . Capa Simple DirectMedia . Consultado el 13 de agosto de 2014 .
  14. "Licencia de la biblioteca Simple DirectMedia Layer" . Consultado el 30 de enero de 2012 .
  15. "SDL/docs/README-dynapi.md en main · libsdl-org/SDL" . GitHub . Consultado el 25 de junio de 2024 .
  16. libsdl-org/sdl12-compat , Capa Simple Directmedia, 1 de junio de 2024 , consultado el 25 de junio de 2024
  17. "Capa DirectMedia simple" . 29 de junio de 2010. Archivado del original el 29 de junio de 2010. Consultado el 7 de agosto de 2021 .
  18. "SDL3/README/main-functions" . wiki.libsdl.org . Consultado el 9 de febrero de 2025 .
  19. Lantinga, Sam (1 de septiembre de 1999). "SDL: Haciendo que Linux sea divertido" . IBM . Archivado del original el 11 de mayo de 2003. Recuperado el 15 de diciembre de 2023 .
  20. "Artículos relacionados con SDL" . Simple DirectMedia Layer . Archivado del original el 9 de octubre de 2003. Consultado el 22 de enero de 2025 .Busque en la página utilizando las palabras clave "alternative", "simple" o "DirectX".
  21. "Explorando la galaxia" . 6 de abril de 2011. Consultado el 30 de enero de 2012 .
  22. SDL 1.3 tendrá licencia zLib , Lista de correo de SDL, 7 de abril de 2011
  23. "SDL 2.0 llegará muy pronto con nuevas funciones" . Consultado el 17 de agosto de 2012 .
  24. Anuncio de SDL 2.0.0 , Lista de correo de SDL, 13 de agosto de 2013
  25. MigrationGuide - SDL Wiki' Archivado el 27 de enero de 2013 en Wayback Machine . Wiki.libsdl.org (21 de noviembre de 2013). Recuperado el 8 de diciembre de 2013.
  26. "Hoja de ruta de SDL 1.3" . 14 de junio de 2011. Archivado del original el 23 de octubre de 2011. Consultado el 25 de julio de 2011 .
  27. 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" . Recuperado el 19 de marzo de 2014 .
  28. Lantinga, Sam (2 de enero de 2016). "Registro de cambios de SDL 2.0.4" . Archivado del original el 4 de marzo de 2016. Recuperado el 6 de enero de 2016 .
  29. "SDL_SysWMinfo" . Archivado del original el 22 de junio de 2015. Consultado el 23 de marzo de 2015 .
  30. "SDL 3.1.3 Versión preliminar estable de la ABI" . Phoronix . Consultado el 13 de noviembre de 2024 .
  31. "Introducción a SDL" . Archivado del original el 28 de febrero de 2014. Consultado el 3 de marzo de 2014 .
  32. "APIByCategory" .
  33. "SDL_image 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  34. "SDL_mixer 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  35. "SDL_net 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  36. "SDL_ttf 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  37. "SDL_shadercross 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  38. "SDL_rtf 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  39. "SDL_native_midi 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  40. "SDL_gesture 3.0" . GitHub . Consultado el 31 de marzo de 2026 .
  41. "cl-sdl2" . GitHub . Consultado el 23 de noviembre de 2017 .
  42. "f03sdl2" . GitHub . Consultado el 28 de octubre de 2019 .
  43. «gb.sdl2» . Wiki Gambas . Consultado el 2 de febrero de 2023 .
  44. 1 2 Robison, Arch D. (9 de noviembre de 2015). "Go + Julia + Fourier = Invasores Frequon de código abierto" . software.intel.com . Recuperado el 2 de agosto de 2019 .
  45. "SDL en Hackage" .
  46. "SDL2 en Hackage" .
  47. Bieler, Jonathan (30 de julio de 2020). "jonathanBieler/SimpleDirectMediaLayer.jl" . GitHub . Consultado el 8 de agosto de 2020 .
  48. SquidSinker (2 de agosto de 2020). "Ejemplos de juegos para GameZero.jl" . GitHub . Consultado el 8 de agosto de 2020 .
  49. Daly, Nathan (31 de julio de 2019). "Ejemplo de juego escrito en Julia usando SDL2" . GitHub . Recuperado el 2 de agosto de 2019 .
  50. "SDL2 para Nim" . GitHub . Consultado el 31 de mayo de 2022 .
  51. "PerlGameDev/SDL" . GitHub . Consultado el 20 de febrero de 2019 .
  52. "PHP-SDL" . GitHub . Consultado el 28 de octubre de 2019 .
  53. "SDL2::Raw" . modules.raku.org . Consultado el 15 de mayo de 2020 .
  54. "WhatsNew.txt" . Archivado del original el 11 de noviembre de 2020. Consultado el 28 de septiembre de 2020 .
  55. " [ Commits ] SDL: Habilitar la compilación del renderizador Metal por defecto y línea débil..." 7 de diciembre de 2017.
  56. "SDL: README-platforms.txt@3e2f230a6d62" . Hg.libsdl.org . libsdl.org. Archivado del original el 15 de diciembre de 2013. Recuperado el 8 de diciembre de 2013 .
  57. "Uso de OpenGL con SDL" . Consultado el 9 de julio de 2015 .
  58. "SDL y Wayland" .
  59. Larabel, Michael (30 de septiembre de 2013). "Se agregó soporte para Raspberry Pi a la biblioteca SDL2" .
  60. "SDL 1.2 Sixel" . GitHub . Consultado el 9 de abril de 2016 .
  61. "SDLPluginPort" . Consultado el 11 de agosto de 2019 .
  62. "Middleware: Descripción del grupo SDL" . MobyGames . 27 de septiembre de 2013. Consultado el 18 de mayo de 2012. Juegos que utilizan la muy portátil Simple DirectMedia Layer.{{cite web}}: CS1 maint: servicio de archivado obsoleto ( enlace )
  63. "Juegos" . libsdl.org. 18 de mayo de 2012. Archivado del original el 29 de junio de 2010. Consultado el 18 de mayo de 2012 .
  64. "Testimonios de SDL" . Galaxygameworks.com. Archivado del original el 16 de julio de 2011. Consultado el 1 de febrero de 2012 .
  65. "Desarrollo" . OpenTTD. Archivado del original el 10 de julio de 2014. Recuperado el 19 de marzo de 2010 .
  66. "CompilingWesnoth" . Wesnoth. 27 de febrero de 2010. Archivado del original el 6 de abril de 2009. Consultado el 19 de marzo de 2010 .
  67. "SDLClient - Freeciv.org" . Freeciv.wikia.com . Consultado el 19 de marzo de 2010 .
  68. may88 (23 de junio de 2011). "Juego de la semana n.° 3: Homeworld SDL" . pandorapress.net. Archivado del original el 26 de junio de 2011. Recuperado el 8 de mayo de 2012. [...] se publicó la versión para PC de HomeworldSDL . El miembro del foro Edglex permite que tu Pandora experimente el excelente trabajo realizado por los chicos de HomeworldSDL.
  69. Comentarios sobre JA2 Stracciatella  » Versión RC2 del puerto de Stracciatella para Android de Jagged Alliance 2: por favor, pruébalo. Archivado el 23 de octubre de 2012 en Wayback Machine en el foro Bear's Pit, 3 de octubre de 2011.
  70. "Características · fifengine/fifengine Wiki · GitHub" . GitHub . Consultado el 9 de marzo de 2015 .
  71. "Preguntas frecuentes sobre Hedgewars" . hedgewars.org . Consultado el 3 de octubre de 2014. ...SDL >= 1.2.5...
  72. "Detalles de desarrollo" . scorched3d.co.uk . Archivado del original el 6 de octubre de 2014. Consultado el 3 de octubre de 2014. ... Simple DirectMedia Layer - SDL para la gestión de ventanas de juegos multiplataforma...
  73. "Acerca del juego" . Consultado el 20 de septiembre de 2021 .
  74. "Dependencias SDL de OOlite" . GitHub . 29 de mayo de 2016. Consultado el 21 de septiembre de 2021 .
  75. "Hoja de ruta - Wesnoth" . www.wesnoth.org . Archivado del original el 6 de marzo de 2015. Consultado el 9 de marzo de 2015 .
  76. "Nueva versión: 0 AD Alpha 19 Syllepsis" . 26 de noviembre de 2015. Consultado el 20 de septiembre de 2021. Se informa a los usuarios de Linux que SDL2 ahora está habilitado de forma predeterminada en Linux.
  77. "Crónicas secretas de Maryo" . sourceforge.net . 28 de agosto de 2014. Consultado el 3 de octubre de 2014. ... basado en SDL ...  
  78. "Soporte para Frozenbyte" . trined2.com . Consultado el 1 de septiembre de 2020 .
  79. " [ Cómo ] Compilar 0.7 en Windows (Página 1) — Desarrollo — Foro de Teeworlds" .

Lecturas adicionales

  • 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 videojuegos , Muska & Lipman/Premier-Trade, ISBN 1-931841-94-2( ejemplos de programación de juegos con SDL )
  • John R. Hall: Programación de juegos para Linux , No Starch, ISBN 1-886411-49-2( Primer libro sobre SDL, de Loki Games , versión archivada en línea: PDF en Wayback Machine (archivado el 22 de enero de 2003) , código fuente de LaTeX en Wayback Machine (archivado el 14 de febrero de 2003) )
  • Sitio web oficialEdita esto en Wikidata