La librería SDL

SDL es lo más parecido que existe a un DirectX multiplataforma que podremos encontrar. En realidad la librería no persigue este objetivo sino que simplemente desea abstraer a las aplicaciones del uso de ciertos recursos independizándonos de la plataforma en la cual estemos trabajando. En este tutorial veremos como hacer uso de ella desde el lenguaje C++.

Si deseamos construir aplicaciones de alto desempeño en diversas plataformas el lenguaje C++ se suele postular como la opción ideal. Claro que la característica “multiplataforma” en estos tiempos hay que explicarla un poco, lenguajes como Java han redefinido este término porque realmente se puede ejecutar un programa escrito en él sin realizar cambios en diversas arquitecturas. C++ en cambio requiere ser recompilado. Pero ¿qué ocurre si deseamos crear un programa que posea ventanas o en el cual se manipulen gráficos, sonidos o dispositivos de entrada?, la definición del lenguaje C++ no llega tan lejos, no define ningún modo estándar de acceder a dispositivos de entrada como joysticks, por ejemplo, para esto deberíamos hacer uso de las librerías que se encuentren en la plataforma de interés, como DirectInput. El problema es que si tomamos esta decisión nuestro programa “multiplataforma” dejará de serlo, ya que en Linux no se encuentra disponible el API de Microsoft.

Por lo tanto, para que nuestro programa C++ pueda seguir siendo recompilado con cualquier compilador Ansi C++ deberemos utilizar librerías que se encuentren en todas las plataformas en las cuales deseamos que nuestro programa funcione.

¿DirectX en Linux?
Transgaming Technologies se encuentra realizando un esfuerzo por permitir que aplicaciones Windows que utilicen DirectX (juegos principalmente)puedan ser ejecutadas en Linux sin modificación alguna. Para esto, el código del programa es enlazado dinámicamente con una implementación del API Win32 (Wine) y DirectX (WineX) en Linux (Direct3D, DirectInput y DirectSound)
Enlace al sitio oficial: www.transgaming.com/

Y es precisamente aquí donde entra en escena la librería SDL (Simple DirectMedia Layer). Con SDL podremos acceder a diversas funciones del sistema sin por ello perder la condición de portabilidad, ya que SDL se encuentra disponible en una gran variedad de plataformas (principalmente Win32, Linux y BeOS).

La librería se encuentra creada en lenguaje C que, en función de la plataforma en cual sea compilada, hará uso de subsistemas específicos para acceder a las diversas características que implementa. Por ejemplo, en caso de querer consultar el estado de un joystick en Windows la librería hará uso de DirectInput, no así en Linux.

C++ en el mundo real
Difícilmente un programa C o C++ compile el mismo código en distintas plataformas. Sí, es cierto que se compila el mismo archivo de código fuente, pero dentro de él se suelen colocar directivas de preprocesador que modifican el flujo de compilación para que el compilador lea líneas de código específicas para una plataforma. Por lo general, estas directivas aplican a la inclusión de archivos cabeceras o enlace a librerías.

SDL se encuentra disponible bajo las condiciones de la licencia LGPL, lo cual es muy bueno. Las condiciones de la licencia podrán encontrarlos en www.libsdl.org/license.php.

¿Qué podremos hacer con SDL?

La librería se encuentra compuesta por un conjunto de funciones (todas con prefijo “SDL_”) agrupadas por el subsistema con el cual dialogan.

Video
Es el subsistema más completo de SDL y el más utilizado. Nos permite independizarnos de la creación de una ventana que contendrá nuestra aplicación. Cambiar la resolución del dispositivo de video, obtener un listado de modos compatibles, cargar mapas de bits como superficies SDL, etc.

Manejo de ventanas
Es un subsistema muy simple. Sólo nos permite modificar el título de la ventana, el icono que la representa, minimizar la aplicación y fijar la aplicación en modo pantalla completa.

Joystick
Permite gestionar dispositivos de entrada tipo joystick, consultar por la cantidad de dispositivos disponibles en el sistema y consultar el estado de sus diversos elementos (botones, ejes, etc).

Eventos
La gestión de eventos es la implementación de un mecanismo de comunicación por parte de la librería SDL hacia nuestra aplicación en función de lo que ocurre en el sistema. De este modo, novedades en los dispositivos de entrada (teclado, mouse, joystick) podrán ser recibidos y tratados por esta vía. Recordemos que nuestra aplicación nada sabrá de los mensajes tradicionales de Windows ya que estos son específicos del sistema operativo de Microsoft.

Audio
El subsistema de audio tal vez sea el menos popular, ya que existen diversas librerías que, también son multiplataforma y abordan este tema con una profundidad mayor (FMod, Bass, Audiere). De todos modos debemos tener en cuenta que la librería SDL pretende mantenerse pequeña y simple y brindar acceso multimedia de bajo nivel a las aplicaciones, luego, a partir de allí podremos utilizar librerías complementarias o implementar nuestras propias soluciones.

Por medio del subsistema de audio podremos cargar y reproducir un archivo del tipo WAV y operaciones de mezcla y conversión.

Cd-Rom
Por medio de este subconjunto de funciones podremos enumerar la cantidad de dispositivos cd-rom que se encuentren presentes en el sistema, obtener su identificación, expulsar, reproducir, pausar y detener el cd-rom que se encuentre dentro del dispositivo.

Threads
Si deseamos crear una aplicación multithreading (esto es una aplicación que posea múltiples hilos de ejecución) en C++, no podremos hacerlo de modo multiplataforma. Por lo tanto, SDL también nos ayuda en este aspecto permitiéndonos crear threads, pausarlos y destruirlos, así como también nos provee de diversos objetos de sincronización que son fundamentales para la programación de este tipo de aplicaciones.

Time
Subsistema sencillo compuesto sólo por cinco funciones que nos permite especificar un timer y una función callback que haga el manejo del mismo.

Pages: 1 2 3 4

Comments

  1. Master-Blaster
    August 13th, 2007 | 3:10

    interesante, buena intro

    pero en una parte hablas de una “siguiente revista”, se te chispoteo me parece! :P

  2. August 13th, 2007 | 10:10

    jeje, fixed! Gracias. ;)

Leave a reply