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 . [4]
Autor (es) original (es) | Sam Lantinga |
---|---|
Desarrollador (es) | Comunidad SDL |
Versión inicial | 1998 |
Lanzamiento estable | |
Repositorio | |
Escrito en | C |
Sistema operativo | Linux , Windows, AmigaOS , macOS 10.4+ , iOS 3.1.3+ , tvOS , [3] Android 2.3.3+ , FreeBSD 8.4+ , Haiku Adicionalmente antes de v2.0.0 (obsoleto): RISC OS [4] |
Tipo | API |
Licencia | Licencia zlib anterior a 2.0.0: GNU LGPL [5] |
Sitio web | www |
SDL administra video , audio , dispositivos de entrada , CD-ROM , hilos , 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 de Direct3D anterior). Un error común es que SDL es un motor de juego , pero esto no es cierto. Sin embargo, la biblioteca es adecuada para construir juegos directamente, o puede usarse indirectamente por motores construidos sobre ella.
La biblioteca está escrita internamente en C y posiblemente, dependiendo de la plataforma de destino, C ++ o Objective-C , y proporciona la interfaz de programación de aplicaciones en C, con enlaces a otros lenguajes disponibles. [8] Es un 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 . [5] 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] SDL 2.0, lanzado en 2013, fue una desviación importante de 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. Se han publicado más de 700 juegos, 180 aplicaciones y 120 demostraciones en el sitio web de la biblioteca. [ cita requerida ]
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 al portar una aplicación de Windows a Macintosh. Luego usó SDL para portar Doom a BeOS (ver Puertos de origen 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 dar soporte comercial a SDL, aunque los planes de la compañía están actualmente en suspenso debido a limitaciones de tiempo. [10]
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 . [11] 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. [12] Lantinga anunció la versión estable de SDL 2.0.0 el 13 de agosto de 2013. [13]
SDL 2.0 es una actualización importante de la base de código SDL 1.2 con una API diferente, no compatible con versiones anteriores [14] . Reemplaza varias partes de la API 1.2 con un 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 . [15]
La compatibilidad con Mir y Wayland se agregó en SDL 2.0.2 [16] y se habilitó de forma predeterminada en SDL 2.0.4. [17] La versión 2.0.4 también proporcionó un mejor soporte para Android. [18]
Arquitectura de software
SDL es un envoltorio 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). [19] SDL proporciona soporte para operaciones de píxeles 2D, sonido, acceso a archivos, manejo de eventos, sincronizació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 solo comprende renderizado.
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 SDL necesita manejar. Las funciones de SDL se clasifican en varios subsistemas diferentes.
Subsistemas
SDL se divide en varios subsistemas: [20]
- Lo esencial
- Inicialización y apagado, variables de configuración, manejo de errores, manejo de registros
- Video
- Gestión de pantallas 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
- Force Feedback
- 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 hay 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:
- SDL_image : compatibilidad con varios formatos de imagen [21]
- SDL_mixer : funciones de audio complejas, principalmente para la mezcla de sonido [22]
- SDL_net : compatibilidad con redes [23]
- SDL_ttf : compatibilidad con la representación de fuentes TrueType [24]
- SDL_rtf - sencillo formato de texto enriquecido de representación [25]
También existen otras bibliotecas no estándar. Por ejemplo: SDL_Collide en Sourceforge creado por Amir Taaki .
Enlaces de idioma
La biblioteca SDL 2.0 tiene enlaces de idioma para:
- Ada [8]
- Carne de vaca
- C
- C ++
- C # [8]
- D [8]
- Fortran [26]
- Genio
- Ir [8] [27]
- Haskell [28] [29]
- Julia [30] [31] [32] [27]
- Lua [8]
- Nim
- OCaml [8]
- Pascal [8]
- Perl (a través de SDL) [33]
- PHP [34]
- Python (varios, por ejemplo, pygame_sdl2 y sdl2hl) [8]
- Raku [35]
- Óxido [8]
- Vala
- Lisp común [36]
Back-end compatibles
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 adecuados para el sistema de destino. Los siguientes back-end están disponibles: [4]
- Back-end de GDI para Microsoft Windows .
- Back-end de DirectX ; SDL 1.2 anterior usa DirectX 7 de forma predeterminada, mientras que 2.0 se establece de manera predeterminada en DirectX 9 y puede acceder hasta DirectX 11.
- Back-end de cuarzo para macOS (incluido en la versión 2.0).
- Back-end de metal para macOS / iOS / tvOS desde 2.0.8; las versiones anteriores usan OpenGL de forma predeterminada. [37] [38]
- Back-end de Xlib para el sistema de ventanas basado en X11 en varios sistemas operativos. [39]
- Contextos OpenGL en varias plataformas. [40]
- EGL back-end cuando se utiliza junto con el sistema de ventanas basado en Wayland., [41] Raspberry Pi [42] y otros sistemas.
- Contextos Vulkan en plataformas que lo soportan. [7]
- sceGu back-end, un backend tipo Sony OpenGL nativo de la PSP .
SDL 1.2 tiene soporte para RISC OS (eliminado en 2.0).
Hay disponible un back-end de Sixel no oficial para SDL 1.2. [43]
El firmware del reproductor MP3 Rockbox también distribuye una versión de SDL 1.2, que se utiliza para ejecutar juegos como Quake . [44]
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 utilizan SDL en 2013, [45] y el sitio web de SDL enumeró alrededor de 700 juegos en 2012. [46] Ejemplos comerciales importantes son Angry Birds [47] y Unreal Tournament ; los del dominio de código abierto son OpenTTD , [48] The Battle for Wesnoth [49] o Freeciv . [50]
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 fue portado a la computadora de mano Pandora [51] y Jagged Alliance 2 para Android [52] a través de SDL.
Además, varios programas que no son de 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 que enseñan multimedia e informática , por ejemplo, en un taller sobre programación de juegos utilizando 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 con SDL
Horizontes desconocidos [53]
Hedgewars [54]
3D quemado [55]
Trastes en llamas
Oolite , un juego espacial en 3D
La batalla por Wesnoth [56]
OpenTTD
0 d.C.
Crónicas secretas de Maryo [57]
Trígono
Trígono 2 [58]
Ver también
- Alegro
- ClanLib
- CreateJS
- Middleware de soporte multiplataforma
- DirectFB
- Interfaz gráfica general
- GLFW
- OpenML
- Pygame
- Raylib
- Ren'Py
- SFML
- SVGALib
Referencias
- ^ "Simple DirectMedia Layer - SDL versión 2.0.14 (estable)" . Libsdl.org . Consultado el 23 de diciembre de 2020 .
- ^ "Índice de / lanzamiento" . Libsdl.org . Consultado el 23 de diciembre de 2020 .
- ^ "¡Oh, mira, tendremos soporte oficial de tvOS en SDL 2.0.5, para las personas que quieren sus juegos basados en SDL en Apple TV!" . 15 de septiembre de 2016.
- ^ a b c "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 .
- ^ a b "Licencia SDL" . Consultado el 3 de marzo de 2014 .
- ^ "Sitio web oficial de SDL" . Libsdl.org . Consultado el 19 de marzo de 2010 .
- ^ a b "CategoryVulkan - SDL Wiki ' " . wiki.libsdl.org . Consultado el 5 de mayo de 2019 .
- ^ a b c d e f g h yo j "Enlaces de lenguaje SDL" . libsdl.org . Capa de DirectMedia simple . Consultado el 13 de agosto de 2014 .
- ^ "Licencia de la biblioteca Simple DirectMedia Layer" . Consultado el 30 de enero de 2012 .
- ^ "Explorando la Galaxia" . 6 de abril de 2011 . Consultado el 30 de enero de 2012 .
- ^ SDL 1.3 tendrá licencia zLib , lista de distribución 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 distribución 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 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 .
- ^ https://wiki.libsdl.org/SDL_SysWMinfo
- ^ "Introducción a SDL" . Consultado el 3 de marzo de 2014 .
- ^ https://wiki.libsdl.org/APIByCategory
- ^ "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 .
- ^ "f03sdl2" . GitHub . Consultado el 28 de octubre de 2019 .
- ^ a b Robison, Arch D. (9 de noviembre de 2015). "Ir + Julia + Fourier = invasores de Frequon de código abierto" . software.intel.com . Consultado el 2 de agosto de 2019 .
- ^ "SDL en piratería" .
- ^ "SDL2 en Hackage" .
- ^ Bieler, Jonathan (30 de julio de 2020). "jonathanBieler / SimpleDirectMediaLayer.jl" . Consultado el 8 de agosto de 2020 .
- ^ SquidSinker (2 de agosto de 2020). "Juegos de ejemplo para GameZero.jl" . Consultado el 8 de agosto de 2020 .
- ^ Daly, Nathan (31 de julio de 2019). "Ejemplo de juego escrito en julia usando SDL2" . Consultado el 2 de agosto de 2019 .
- ^ "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 .
- ^ "cl-sdl2" . GitHub . Consultado el 23 de noviembre de 2017 .
- ^ "WhatsNew.txt" . Consultado el 28 de septiembre de 2020 .
- ^ "[Confirma] SDL: habilita la compilación del renderizador Metal de forma predeterminada y lin débil ..." 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 agregada a la biblioteca SDL2" .
- ^ "SDL 1.2 Sixel" . Consultado el 9 de abril de 2016 .
- ^ "SDLPluginPort" . Consultado el 11 de agosto de 2019 .
- ^ "Middleware: descripción del grupo SDL" . MobyGames . 27 de septiembre de 2013 . Consultado el 18 de mayo de 2012 .
Juegos que utilizan la capa DirectMedia simple 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 .
- ^ "Compilación de Wesnoth" . 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 .
[...] liberado puerto de HomeworldSDL. El miembro del foro Edglex permite que Pandora experimente el excelente trabajo realizado por los chicos de HomeworldSDL.
- ^ Comentarios de JA2 Stracciatella »Lanzamiento de Jagged Alliance 2 Android Stracciatella Port RC2: prueba Archivado el 23 de octubre de 2012 en Wayback Machine en el Bear's Pit Forum, 3 de octubre de 2011
- ^ "Funciones · Fifengine / Fifengine Wiki · 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 ...
- ^ "Hoja de ruta - Wesnoth" . www.wesnoth.org . Consultado el 9 de marzo de 2015 .
- ^ "Crónicas secretas de Maryo" . sourceforge.net . Consultado el 3 de octubre de 2014 .
... basado en SDL ...
- ^ "Soporte Frozenbyte" . trine2.com . Consultado el 1 de septiembre de 2020 .
Otras lecturas
- Alberto García Serrano: Programación de videojuegos en SDL , Ediversitas, ISBN 84-95836-08-4 (español)
- Ernest Pazera: enfoque en SDL , Muska y 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: Programación de juegos Linux , sin almidón, ISBN 1-886411-49-2 ( Primer libro de SDL, de Loki Games , versión en línea archivada: PDF en Wayback Machine (archivado el 22 de enero de 2003), Fuentes de LaTex en Wayback Machine (archivado el 14 de febrero de 2003))
- Desarrollo de juegos SDL por Shaun Mitchell
- Tutoriales de SDL
- Desarrollo de juegos con SDL 2.0 en YouTube : vídeo del 11 de febrero de 2014 de Ryan C. Gordon
enlaces externos
- Página web oficial