stringtranslate.com

Capa 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 de computadora . 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 . [3]

SDL gestiona vídeo , audio , dispositivos de entrada , CD-ROM , subprocesos , carga de objetos compartidos , redes y temporizadores. [5] Para gráficos 3D, puede manejar un contexto OpenGL , Vulkan , [6] 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 juego . Sin embargo, la biblioteca es adecuada para crear juegos directamente o puede usarse indirectamente mediante motores creados sobre ella.

La biblioteca está escrita internamente en C y posiblemente, según 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. [7] 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 Reducida 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. [8] 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 utiliza ampliamente en la industria, tanto en proyectos grandes como pequeños. En el sitio web de la biblioteca se han publicado más de 700 juegos, 180 aplicaciones y 120 demostraciones. [9]

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 al trasladar una aplicación de Windows a Macintosh. Luego usó SDL para portar Doom a BeOS (consulte Puertos de origen de Doom ). [10] 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 respaldar comercialmente a SDL, aunque los planes de la compañía están actualmente en suspenso debido a limitaciones de tiempo. [11]

Poco después de suspender Galaxy Gameworks, Lantinga anunció que SDL 1.3 (que luego se convertiría en SDL 2.0) tendría la licencia zlib . [12] Lantinga anunció SDL 2.0 el 14 de julio de 2012, al mismo tiempo que anunciaba que se uniría a Valve , cuya primera versión se anunció el mismo día en que se unió a la empresa. [13] Lantinga anunció la versión estable de SDL 2.0.0 el 13 de agosto de 2013. [14]

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 [15] . Reemplaza varias partes de la API 1.2 con soporte más general para múltiples opciones de entrada y salida. Algunas funciones adicionales incluyen compatibilidad con múltiples ventanas, gráficos 2D acelerados por hardware y mejor compatibilidad con Unicode . [dieciséis]

La compatibilidad con Mir y Wayland se agregó en SDL 2.0.2 [17] y se habilitó de forma predeterminada en SDL 2.0.4. [18] La versión 2.0.4 también proporcionó un mejor soporte para Android. [19]

Arquitectura de software

SDL es un contenedor de 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). [20] 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 entradas de mouse y teclado, ya que OpenGL solo comprende renderizado.

Un juego que utilice Simple DirectMedia Layer no se ejecutará automáticamente en todos los sistemas operativos; deben aplicarse más adaptaciones. Estos 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 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 SDL necesita manejar. Las funciones SDL se clasifican en varios subsistemas diferentes.

Subsistemas

SDL se divide en varios subsistemas: [21]

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 , soporte para teclado, mouse, joystick y controlador de juegos
Forzar retroalimentación
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
Hilos
subprocesos múltiples : 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
Soporte de objetos compartidos
Carga de objetos compartidos y búsqueda de funciones
Información de plataforma y CPU
Detección de plataforma, detección de funciones 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 más. Estos comprenden la "biblioteca estándar" y se proporcionan en el sitio web oficial y se incluyen en la documentación oficial:

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

Enlaces de idiomas

La biblioteca SDL 2.0 tiene enlaces de idiomas para:

Back-ends soportados

Capas de abstracción de varias plataformas SDL.

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. Los siguientes backends están disponibles: [3]

SDL 1.2 es compatible con RISC OS (incluido en 2.0).

Un back-end de Sixel no oficial está disponible para SDL 1.2. [48]

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

Recepción y adopción

Taller sobre SDL, Universidad de Cádiz

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, [50] y el propio sitio web de SDL enumeró alrededor de 700 juegos en 2012. [ 51] Ejemplos comerciales importantes son Angry Birds , [52] Unreal Tournament y juegos desarrollados con Valve Source Engine , que utiliza SDL ampliamente para compatibilidad multiplataforma; los del dominio de código abierto son OpenTTD , [53] The Battle for Wesnoth [54] o Freeciv . [55]

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 utiliza a menudo para puertos posteriores en nuevas plataformas con código heredado. Por ejemplo, el juego para PC Homeworld se transfirió a la computadora de mano Pandora [56] y Jagged Alliance 2 para Android [57] a través de SDL.

Además, varios programas que no son videojuegos utilizan 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 utiliza en cursos universitarios de 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 en una disciplina de Diseño de Juegos en la UTFPR (campus de Ponta Grossa) en 2015.

Ejemplos de videojuegos usando SDL

Ver también

Referencias

  1. ^ "2.30.0". 2 de febrero de 2024 . Consultado el 3 de febrero de 2024 .
  2. ^ "¡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.
  3. ^ abc "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 .
  4. ^ ab "Licencia SDL" . Consultado el 3 de marzo de 2014 .
  5. ^ "Sitio web oficial de SDL". Libsdl.org . Consultado el 19 de marzo de 2010 .
  6. ^ ab "CategoríaVulkan - SDL Wiki'". wiki.libsdl.org . Consultado el 5 de mayo de 2019 .
  7. ^ abcdefghij "Enlaces de lenguaje SDL". libsdl.org . Capa DirectMedia simple . Consultado el 13 de agosto de 2014 .
  8. ^ "Licencia de la biblioteca Simple DirectMedia Layer" . Consultado el 30 de enero de 2012 .
  9. ^ "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 .
  10. ^ Lantinga, Sam (1 de septiembre de 1999). "SDL: hacer que Linux sea divertido". IBM . Archivado desde el original el 11 de mayo de 2003 . Consultado el 15 de diciembre de 2023 .
  11. ^ "Explorando la galaxia". 6 de abril de 2011 . Consultado el 30 de enero de 2012 .
  12. ^ SDL 1.3 tendrá licencia zLib, Lista de correo de SDL, 7 de abril de 2011
  13. ^ "SDL 2.0 llegará muy pronto con nuevas funciones" . Consultado el 17 de agosto de 2012 .
  14. ^ Anuncio de SDL 2.0.0, Lista de correo de SDL, 13 de agosto de 2013
  15. ^ Guía de migración - SDL Wiki'. Wiki.libsdl.org (21 de noviembre de 2013). Recuperado el 8 de diciembre de 2013.
  16. ^ "Hoja de ruta de SDL 1.3". 14 de junio de 2011 . Consultado el 25 de julio de 2011 .
  17. ^ 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 .
  18. ^ Lantinga, Sam (2 de enero de 2016). "Registro de cambios de SDL 2.0.4" . Consultado el 6 de enero de 2016 .
  19. ^ "SDL_SysWMinfo".
  20. ^ "Introducción a SDL" . Consultado el 3 de marzo de 2014 .
  21. ^ "APIByCategoría".
  22. ^ "SDL_imagen 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
  23. ^ "SDL_mixer 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
  24. ^ "SDL_net 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
  25. ^ "SDL_ttf 2.0". libsdl.org . Consultado el 19 de julio de 2014 .
  26. ^ "SDL_rtf 0,1". libsdl.org . Consultado el 19 de julio de 2014 .
  27. ^ "cl-sdl2". GitHub . Consultado el 23 de noviembre de 2017 .
  28. ^ "f03sdl2". GitHub . Consultado el 28 de octubre de 2019 .
  29. ^ "gb.sdl2". Wiki Gambas . Consultado el 2 de febrero de 2023 .
  30. ^ ab Robinson, Arch D. (9 de noviembre de 2015). "Go + Julia + Fourier = Frequon Invaders de código abierto". software.intel.com . Consultado el 2 de agosto de 2019 .
  31. ^ "SDL sobre piratería".
  32. ^ "SDL2 sobre piratería".
  33. ^ Bieler, Jonathan (30 de julio de 2020). "jonathanBieler/SimpleDirectMediaLayer.jl". GitHub . Consultado el 8 de agosto de 2020 .
  34. ^ SquidSinker (2 de agosto de 2020). "Juegos de ejemplo para GameZero.jl". GitHub . Consultado el 8 de agosto de 2020 .
  35. ^ Daly, Nathan (31 de julio de 2019). "Juego de ejemplo escrito en julia usando SDL2". GitHub . Consultado el 2 de agosto de 2019 .
  36. ^ "SDL2 para Nim". GitHub . Consultado el 31 de mayo de 2022 .
  37. ^ "PerlGameDev/SDL". GitHub . Consultado el 20 de febrero de 2019 .
  38. ^ "PHP-SDL". GitHub . Consultado el 28 de octubre de 2019 .
  39. ^ "SDL2 :: Sin procesar". módulos.raku.org . Consultado el 15 de mayo de 2020 .
  40. ^ Programación inicial en timbre: de principiante a profesional | Mansour Aaiuni | Presione.
  41. ^ "Uso de RingLibSDL - documentación de Ring 1.16".
  42. ^ "Qué hay de nuevo.txt" . Consultado el 28 de septiembre de 2020 .
  43. ^ "[Commits] SDL: habilite la creación del renderizador Metal de forma predeterminada y enlace débil ..." 7 de diciembre de 2017.
  44. ^ "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 .
  45. ^ "Uso de OpenGL con SDL" . Consultado el 9 de julio de 2015 .
  46. ^ "SDL y Wayland".
  47. ^ Larabel, Michael (30 de septiembre de 2013). "Se agregó compatibilidad con Raspberry Pi a la biblioteca SDL2".
  48. ^ "SDL 1.2 Sixel". GitHub . Consultado el 9 de abril de 2016 .
  49. ^ "Puerto SDLPlugin" . Consultado el 11 de agosto de 2019 .
  50. ^ "Middleware: descripción del grupo SDL". MobyJuegos . 27 de septiembre de 2013 . Consultado el 18 de mayo de 2012 . Juegos que utilizan la muy portátil Simple DirectMedia Layer.
  51. ^ "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 .
  52. ^ "Testimonios de SDL". Galaxygameworks.com. Archivado desde el original el 16 de julio de 2011 . Consultado el 1 de febrero de 2012 .
  53. ^ "Desarrollo". OpenTTD . Consultado el 19 de marzo de 2010 .
  54. ^ "Compilando Wesnoth". Wesnoth. 27 de febrero de 2010 . Consultado el 19 de marzo de 2010 .
  55. ^ "SDLClient - Freeciv.org". Freeciv.wikia.com . Consultado el 19 de marzo de 2010 .
  56. ^ mayo88 (23 de junio de 2011). "Juego de la semana n.º 3: Homeworld SDL". pandorapress.net . Consultado el 8 de mayo de 2012 . [...] puerto liberado de HomeworldSDL. Edglex, miembro del foro, permite que Pandora experimente el excelente trabajo realizado por los chicos de HomeworldSDL.{{cite web}}: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )
  57. ^ Comentarios de JA2 Stracciatella » Lanzamiento de Jagged Alliance 2 Android Stracciatella Port RC2: pruebe Archivado el 23 de octubre de 2012 en Wayback Machine en el Bear's Pit Forum, 3 de octubre de 2011
  58. ^ "Características · fifengine/fifengine Wiki · GitHub". GitHub . Consultado el 9 de marzo de 2015 .
  59. ^ "Preguntas frecuentes sobre Hedgewars". hedgewars.org . Consultado el 3 de octubre de 2014 . ...SDL >= 1.2.5...
  60. ^ "Detalles del 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...
  61. ^ "Acerca del juego" . Consultado el 20 de septiembre de 2021 .
  62. ^ "Dependencias de OOlite SDL". GitHub . 29 de mayo de 2016 . Consultado el 21 de septiembre de 2021 .
  63. ^ "Hoja de ruta: Wesnoth". www.wesnoth.org . Consultado el 9 de marzo de 2015 .
  64. ^ "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.
  65. ^ "Crónicas secretas de Maryo". fuenteforge.net . 28 de agosto de 2014 . Consultado el 3 de octubre de 2014 . ... basado en SDL ...
  66. ^ "Soporte de Frozenbyte". trine2.com . Consultado el 1 de septiembre de 2020 .
  67. ^ "[Cómo] Compilar 0.7 en Windows (Página 1) - Desarrollo - Foro Teeworlds".

Otras lecturas

enlaces externos