Temario/Conociendo SDL

De Tutorial LibSDL

[editar] Conociendo libSDL

Tabla de contenidos


[editar] Introducción

Tal vez te pase como a mí y cuando lleves unos años programando sientas que te faltan herramientas para darle un aspecto visual a tus programas. Has probado varios videojuegos y no te sientes capaz de desarrollar uno con los conocimientos que tienes de programación. Un buen día me propuse a desarrollar un pequeño videojuego con el fin de adornar el resultado presentado por un autómata para una asignatura de la facultad y se abrió ante mí un mundo desconocido.

En ese momento comenzó mi aventura. Dediqué algún tiempo a buscar una buena biblioteca de desarrollo que me permitiese, sin invertir años de sacrificio, dar rienda suelta a mi imaginación. Era fundamental que no me limitase en temas como la licencia o la capacidad de la misma. Necesitaba que esta herramienta fuese gratuita y libre. Como principiante quería saber como funcionaba todo y no quería que mi trabajo en el mundo de los videojuegos comenzase teniendo que piratear esto o aquello. Una de las grandes aportaciones de mis profesores en los años de facultad fue una filosofía de trabajo legal enfrentada a "lo que se lleva" en el mundo de la informática de no prestar atención a los términos de las licencias.

Por esto, y muchos más motivos que conocerás a continuación, decidí elegir libSDL. SDL nos va a ahorrar una gran cantidad de trabajo y dolores de cabeza. Cada una de las partes que componen SDL necesitarían un tutorial para explicarlas con detalle. Nuestro objetivo es una visión más general que te permita adentrarte en el mundo del desarrollo de videojuegos.

[editar] Objetivos

El objetivo principal de este capítulo es que conozcas la librería SDL y las posibilidades que nos ofrece. Así mismo debes conocer por qué se ha elegido esta librería y no otra.

Otro aspecto fundamental, incluso más importante que el primero, es conocer las desventajas de SDL ya que serán las limitaciones que tengamos a la hora de trabajar con esta librería. Debes saber hasta dónde puedes llegar.

[editar] ¿Qué es libSDL?

libSDL es el acrónimo de library Simple Directmedia Layer. libSDL fue creada por Sam Lantinga y su grupo, programadores de Loki Entertaiment Software, para portar juegos a Linux principalmente. Sam Lantinga es un programador de amplía experiencia en el mundo de videojuegos lo que le ha permitido tener una visión específica de las necesidades de los creadores de videojuegos.

De aquí en adelante, y por economía lingüística, llamaremos a esta librería o biblioteca SDL que es como se la conoce. Del mismo modo utilizaremos el término librería como sinónimo de biblioteca aunque algunos puristas del lenguaje no estén de acuerdo con esta terminología.

SDL es una librería multimedia multiplataforma, es decir, todas las aplicaciones que desarrollemos con esta librería pueden ser compiladas, sin cambiar nada en el código, en varios sistemas diferentes como Windows, Linux, BeOS... Está diseñada para proporcionar acceso de bajo nivel al audio, teclado, ratón, joystick y a los dispositivos de video 2D. Es una librería muy utilizada en diferentes tipos de aplicaciones entre ellas se encuentra software para reproducir video MPG, emuladores y un gran número juegos y adaptaciones de juegos entre plataformas.

Podemos marcar el comienzo de los ordenadores personales allá por 1982 cuando IBM comercializó la primeras computadoras equipados con PC-DOS, versión del MS-DOS de Microsoft. En los tiempos de este sistema operativo la programación de videojuegos era muy compleja. Había que conocer en profundidad el lenguaje ensamblador y la estructura interna de la máquina, así como los elementos multimedia que pudieran poseer, como la tarjeta de video o de sonido. La principal complejidad es que la programación se hacía casi directamente sobre el hardware con todos los inconvenientes de abstracción, complejidad y portabilidad que supone esto. Resumiendo, para hacer un videojuego, fuese lo simple que fuese, hacía falta un grandísimo esfuerzo.

La aparición del sistema operativo Windows y sus versiones no terminaron de mejorar el panorama debido a un rendimiento gráfico pobre y la imposibilidad de tener un acceso directo al hardware en mucha de sus versiones. Además el acceso a los recursos del sistema varía de una versión a otra, de un sistema operativo a otro. Necesitamos una interfaz común para el desarrollo de videojuegos que nos permita establecernos en un entorno más "estandarizado" y con una interfaz común a los recursos del sistema. En definitiva se hizo fundamental tener una herramienta que nos proporcionase una capa de abstracción que nos permitiese dedicarnos al desarrollo del videojuego en sí liberándonos hasta cierto punto de los aspectos concretos del sistema donde fuese a ejecutarse dicha aplicación.

La empresa Loki Games salió al rescate, más concretamente un experimentado programador llamado Sam Lantinga. Ante la necesidad de realizar juegos que fuesen portables entre distintos sistemas crearon una librería multiplataforma llamada SDL, que nos proporciona acceso a los recursos del sistema donde se haga correr la aplicación mediante una interfaz independiente del sistema para el que vayamos a realizar la aplicación.

SDL soporta Linux, Windows, Windows CE, BeOS, MacOS, MacOS X, FreeBSD, NetBSD, OpenBSD, BSD/OS, Solaris, IRIX, and QNX. El código de la librería nos permite trabajar en aplicaciones para AmigaOS, Dreamcast, Atari, AIX, OSF/Tru64, RISC OS, SymbianOS y OS/2 pero estos sistemas no son sosportados oficialmente.

Logotipo SimpleMediaLayer
Logotipo SimpleMediaLayer

SDL está escrita en C pero trabaja nativamente con C++. Se puede utilizar en otros muchos lenguajes ya que existen adaptaciones que permiten hacerlo. Alguno de los lenguajes en los que se puede utilizar son Ada, C#, Eiffel, ERlang, Euphoria, Guile, Haskell, Java, Lisp, Lua, ML, Objetive C, Pascal, Perl, PHP, Pije, Pliant, Python, Ruby y Smalltalk.

Es importante conocer que SDL es distribuido bajo licencia GNU LGPL en su versión 2. Esta licencia permite usar SDL libremente, en programas comerciales, siempre que utilicemos un enlace dinámico a esta librería y cumplamos todos los requisitos de dicha licencia.

[editar] ¿Qué nos proporiciona SDL?

SDL nos proporciona una capa de abstracción con todo lo necesario para crear aplicaciones multimedia y videojuegos. Está compuesta por subsistemas como veremos en el transcurso del tutorial. Estos subsistemas son sostenidos por diferentes APIs que nos proporcionan acceso a las diferentes partes hardware.

Composición de SDL
Composición de SDL

Vamos a presentar ahora algunos aspectos relevantes de los subsistemas necesarios para desarrollar un videojuego y su relación con SDL.

[editar] Vídeo y Gráficos

SDL proporciona una API que nos permite trabajar con los gráficos de una manera muy versátil. Podemos trabajar con píxeles en crudo, directamente, construyendo líneas y polígonos y hacer lo que queramos con ellos o bien cargar imágenes que rellenen píxeles facilitando así el trabajo de crear figuras o personajes en nuestra aplicación

SDL se encarga de configurar los modos de video que demandemos, el modo de acceso a memoria de video... nos proporciona modos aventanados o a pantalla completa... Podemos escribir directamente en la memoria de video en su framebuffer. Crear superficies con canales alpha y colores clave. Volcar las superficies convirtiendo los formatos automáticamente al de destino. Permite realizar acciones aceleradas por hardware siempre que estén soportadas por nuestro sistema y muchas otras posibilidades que te presentaremos en el capítulo dedicado al subsistema de video.

No te preocupes si no entiendes ahora alguno de estos conceptos, tendremos un capítulo entero para estudiar el subsistema de vídeo.

[editar] Eventos de Entrada

SDL proporciona entrada por teclado, ratón y joystick usando un modelo de entrada basado en eventos parecido al utilizado en el desarrollo de aplicaciones X11, Windows o Mac OS. La ventaja es que SDL nos proporciona una abstracción de éstos podiéndolos utilizar sin preocuparnos de en qué sistema operativo estemos desarrollando nuestra aplicación. Podremos olvidarnos de los eventos específicos producidos por cada sistema operativo que complican la tarea de escribir el código de la aplicación y anulan la posibilidad de portabilidad.

Para la gestión de la entrada de usuario SDL también nos proporciona la posibilidad de conocer el estado de un dispositivo de entrada en un momento dado sin que éste tenga que haber realizado ninguna acción. Por ejemplo podemos consultar el estado de una determinada tecla o de cierto botón del ratón cuando creamos conveniente. Este método de consulta de estados puede sernos útil a la hora de desarrollar nuestra aplicación ya que nos permite dictaminar cuándo queremos consultar el estado de los dispositivos de entrada en contraposición a la gestión de la cola de eventos.

Existe en el tutorial un extenso capítulo dedicado a la gestión de entrada en SDL.

[editar] Sonido

Este es el aspecto más débil de SDL. La librería proporciona un API simple para averiguar las capacidades que nos proporciona la tarjeta de sonido y lo que se necesita saber pera reproducir un sonido. Podemos iniciar el subsistema de sonido a 8 o 16 bits, mono o estéreo. El soporte para reproducir un sonido real es ínfimo. Para la tarea de reproducir sonidos deberemos de utilizar librerías auxiliares que nos proporcionen una manera más comoda de trabajar sino queremos que este aspecto ocupe la mayor parte del tiempo de desarrollo de nuestro videojuego.

El motivo de que nativamente no se proporcione un API completo para el manejo de sonidos será estudiado en profundidad en el capítulo dedicado al estudio del subsistema de sonido.

[editar] Manejo del CDROM

SDL provee un completo API para leer y reproducir pistas en un CD-ROM. Es muy completo y no echarás en falta ninguna función para hacer uso del mismo.

[editar] Timers

Depende de la máquina en que ejecutemos nuestra aplicación irá, a priorio, más rápida o más lenta. Esto en aplicaciones de gestión no es algo que debamos controlar explícitamente, ya que cuanto más rápido se ejecute mejor respuesta tiene el usuario en los casos más comunes. En la programación de videojuegos la cosa cambia. El tiempo es un aspecto crítico que deberemos controlar en todo momento.

Los timers son un tipo de variable que nos permiten conocer una marca de tiempo dentro de una aplicación. Nos servirán de ayudara para realizar esta tarea de control. Debemos de conseguir que no por ejecutar el videojuego en una máquina mas potente o más moderna el videojuego se convierta en un corre-calles sin sentido. Para esto sirven los timers. Con ellos podemos controlar los tiempos en el videojuego y así poder independizar el comportamiento de la aplicación de la máquina en la que se esté ejecutando.

SDL proporciona una API sencilla, limpia y confiable que es independiente de la máquina y del sistema operativo. Los timers de SDL trabajan a una resolución de 10 milisegundos, resolución más que suficiente para controlar los tiempos de un videojuego.

[editar] Gestióń de dispositivos

Normalmente los sistemas operativos necesitan que el programador configure aspectos sobre los dispositivos que se van a utilizar e inicializar dicho dispositivo antes de su uso. Primero deberá de consultar al sistema sobre que puede hacer con el hardware, en qué te limita el sistema operativo y qué te permite el hardware en cuestión.

Una vez utilizado el dispositivo tenemos que decirle al sistema operativo que hemos terminado de utilizarlo para dejarlo libre por si otra aplicación quiere utilizarlo. Todo este proceso y su codificación es casi igual para todos los proyectos que vayamos a realizar.

SDL nos proporciona una manera simple de descubrir que es lo que el hardware puede hacer y luego, con un par de líneas de código, podemos dejarlo todo listo para utilizar el dispositivo. Para liberar o cerrar el dispositivo las funciones que proporciona SDL son aún más simples. Además como estas líneas de código suelen ser comunes de un proyecto a otro podremos reutilizarlas.

En resumen, SDL facilita la tarea de tomar un dispositivo para poder utilizarlo y simplifica la tarea de liberarlo.

[editar] Red

SDL proporciona una API no nativa para trabajar con redes a bajo nivel. Esta librería adicional nos permite enviar paquetes de distinto tipo sobre el protocolo IP. Permite iniciar y controlar sockets de los tipos TCP y UDP. Esta API sólo permite controlar los aspectos que son comunes a la implementación de estos sockets en los distintos sistemas operativos que soporta. Lo mejor de esta API es que SDL se ocupa de muchas tareas, consideradas molestas, de bajo nivel que hacen preparar y manejar las conexiones sea tedioso.

El soporte de red está catalogado dentro de las librerías conocidas como adicionales en SDL. Éstas, normalmente, no son desarrolladas originalmente por Loki Games y son fruto del código abierto de SDL. En el tutorial podrás disfrutar de un capítulo dedicado exclusivamente a las librerías adicionales más importantes de SDL.

[editar] ¿Por qué SDL?

El principal motivo para elegir SDL es que es la mejor API para desarrollo de videojuegos disponible para Linux además de ser multiplataforma.

Uno de los aspectos importantes por los que hemos dirigido nuestras miradas a esta librería es su lincencia. Nos permite desarrollar aplicaciones sin tener que estar pendientes de los aspectos legales que envuelven a la biblioteca. Ésta es una librería libre y tenemos la oportunidad de saber como se han implementado los diferentes aspectos de la misma lo que le proporciona, además, un valor añadido sobre nuestro aprendizaje. Así mismo, el ser libre y por su licencia, propicia un crecimiento en comunidad lo que se refleja en las características que esta librería posee.

Que la licencia sea un tema importante no quiere decir que no sea una librería potente. En los últimos años ha sido premiada varias veces como la mejor librería libre para el desarrollo de videojuegos lo que pone de manifiesto la importancia de esta librería en el mundo ``libre.

La librería SDL es multiplataforma. El fabricante nos garantiza que las aplicaciones que desarrollemos con ella funcionarán perfectamente bajo Linux, Microsoft Windows (C), BeOS... y una larga lista que ya conoces. Para que esto sea cierto tenemos que tener en cuenta algunas peculiaridades y mantener una metodología de la programación que no incurra en crear un software dependiente del sistema en el que estemos implementando dicha aplicación. De nada vale que SDL sea multiplataforma si a la hora de implementar la aplicación usamos técnicas, funciones o constantes que dependen del sistema.

En la actualidad podemos utilizar SDL para programar videojuegos en distintos tipos de dispositivos, con diferentes arquitecturas. Como puedes ver esto aumenta nuestro rango de acción. No sería lógico centrarnos en una sóla plataforma cuando el mundo actual cada vez se difersifica más el universo multimedia. Podemos desarrollar aplicaciones que se ejecuten en un PC con Linux exactamente como en un MacOS si esfuerzo alguno.

Resumiendo, utilizando esta librería conseguimos no atar el desarrollo de nuestra aplicación a ningún sistema. Nos permite coger un programa que desarrollamos para Linux y compilarlo para Mac, Palms... y viceversa.

Juego portado mediante SDL: Descent 2
Juego portado mediante SDL: Descent 2

Esta librería nos provee de lo necesario para trabajar con los diferentes subsistemas "ocultándonos" cientos de detalles que sólo conseguirían complicar el desarrollo de nuestra aplicación. Depende del sistema operativo que estemos corriendo en nuestro ordenador SDL se sustentará sobre una parte del mismo u otro. Por ejemplo en Microsoft Windows (C) SDL se apoya sobre DirectX, en Linux sobre X y bibliotecas auxiliares... y así en cada uno de los sistemas. Este proceso es totalmente transparente al usuario de la librería, que en este caso somos nosotros.

SDL, a diferencia de otras librerías libres para el desarrollo de videojuegos que navegan por la red, fue diseñanda e implementada por un grupo de programadores de juegos experimentados y altamente cualificados. Es decir, SDL fue escrita por programadores de videojuegos para programadores de videojuegos. Una de las cualidades de SDL es su, relativamente, poca complejidad. Qué quiero decir con esto... ¿Acaso SDL lo hará todo? Ni eso, ni todo lo contrario. SDL nos proporciona las herramientas básicas sobre todo lo que tiene que hacer la librería para funcionar en cualquier máquina para programar un videojuego. Lo demás lo define uno de los autores de la biblioteca como "libre albedrío". Tenemos las herramientas ahora el límite lo ponemos nosotros. Este razonamiento no excluye el compromiso de ser una librería suficentemente completa.

Logo OpenGL
Logo OpenGL

En la red podemos encontrar baterías impresionantes de grupos de pruebas que han intentado encontrar bugs en esta librería sin obtener, normalmente, un resultado satisfactorio. Es una librería realmente estable. Claro está, como ya hemos comentado, una de las principales ventajas que proporciona el que sea libre es que los usuarios de la misma pueden informar de los fallos y proponer soluciones a estos fallos.

Logo Directx
Logo Directx

Dos de las grandes alternativas a SDL para realizar tareas parecidas son DirectX y OpenGL. No son soluciones definitivas ya que presentan diferentes problemas.

OpenGL está especializada en gráficos 3D y no proporciona acceso a otros recursos del sistema, como puede ser el teclado o el joystick, fundamentales en la programación de videojuegos. DirectX es bastante más completo ya que proporciona gráficos en 2D y 3D, entrada y salida, comunicación entre redes... el problema es que sólo es compatible con sistemas Windows además de que su uso en la programación de videojuegos es algo engorrosa si nunca se ha trabajado con las APIs de Microsoft Windows(c).

Por todo esto ninguna de estas dos opciones son válidas para introducirnos en el mundo de los videojuegos. Existen otras alternativas libres para iniciarse en la programación gráfica pero nos decantamos por SDL por ser la mejor de estas alternativas.

Las ventajas de SDL pueden agruparse en:

  • Estabilidad: Una de las condiciones de la licencia de SDL es que no puede ser utilizado por empresas o particulares sin dar soporte al desarrollo de la API. Con esto se consigue la corrección de errores y la aportación de mejoras que favorecen la robustez de la API. El desarrollo de SDL es incremental de forma que se congela una versión estable mientras que se crea una versión nueva con todas las características aportadas con el fin de ser testeadas y aprobadas para una versión posterior que será considerada estable.
  • Simplicidad SDL ha sido diseñanda para tener un API simple, que permita que haya la menor cantidad de código entre lo que quieres hacer y el resultado final. A continuación tienes un ejemplo de esta simplicidad. Este código es de una migración de código de demos comerciales del grupo Optimum de X11 a código SDL. Este es el código de X11:

<cpp> // Código X11

int init_x (int X, int Y, int W, int H, int bpp, const char *Name) {

   XPixmapFormatValues *formatList;
   int            formatCount;
   int            i;
   int            formatOk;
   int            scanlineLength;
   XGCValues        gcVal;
   unsigned long     gcMask;
   dis   = XOpenDisplay ( NULL );
   if ( dis == NULL) {

fprintf ( stderr , "Error :\n" ); fprintf ( stderr , " Cannot connect to Display.\n"); exit (1); }

   screen = DefaultScreen ( dis );
   depth = DefaultDepth ( dis , screen );
   width = DisplayWidth ( dis , screen );
   height = DisplayHeight ( dis , screen );
   
   winRoot            = DefaultRootWindow ( dis );
   winAttr.border_pixel   = BlackPixel ( dis , screen );
   winAttr.background_pixel = BlackPixel ( dis , screen );
   winMask            = CWBackPixel | CWBorderPixel;
   
   formatList = XListPixmapFormats( dis, &formatCount);
   if (formatList == NULL){

fprintf ( stderr , " Cannot get pixmap list\n"); exit (1); }

   formatOk=-1;
   for (i=0; i<formatCount; i++)

if ( formatList[i].depth == depth) formatOk=i;


   if (formatOk == -1){

fprintf ( stderr , " PROUT\n"); exit(1); }

   memcpy(&pixmapFormat,&formatList[formatOk], sizeof (pixmapFormat));
   XFree(formatList);
     
   /* taille utile */
   scanlineLength = pixmapFormat.bits_per_pixel * W /8;
   /* padding eventuel */
   if ( (scanlineLength & (pixmapFormat.scanline_pad/8 -1)) != 0){

scanlineLength&=~(pixmapFormat.scanline_pad/8 -1); scanlineLength+=pixmapFormat.scanline_pad/8; }

   win = XCreateWindow ( dis , winRoot , X , Y , W , H , 0 , depth ,

InputOutput , CopyFromParent , winMask , &winAttr );

   XStoreName ( dis , win , Name );
   XSelectInput ( dis , win , KeyPressMask );
   winHint.flags                  = PPosition | PMinSize | PMaxSize ;
   winHint.x                     = X;
   winHint.y                     = Y;
   winHint.max_width = winHint.min_width = W;
   winHint.max_height = winHint.min_height = H;
   XSetWMNormalHints ( dis , win , &winHint );
   XClearWindow ( dis , win );
   XMapRaised ( dis , win );
   XFlush ( dis );
   
   depth = DefaultDepth ( dis , screen );
   width = W;
   height = H;
  1. ifdef USE_SHM
   /* SHM */
   xim = XShmCreateImage(dis,CopyFromParent,depth,ZPixmap,0,&SHMInfo,W,H);
   if (xim == NULL){

fprintf(stderr, " Couldnt create Ximage..\n"); exit(-1); }

   SHMInfo.shmid = shmget(IPC_PRIVATE, xim->bytes_per_line*xim->height,

IPC_CREAT|0777);

   xim->data = SHMInfo.shmaddr = (char *)shmat(SHMInfo.shmid, 0, 0);
   SHMInfo.readOnly = False;
   XShmAttach(dis, &SHMInfo);
   XSync(dis, False);
   buffer=(unsigned char *)xim->data;
  1. else
   buffer = (unsigned char *)calloc(W*H, pixmapFormat.bits_per_pixel/8); 
   xim = XCreateImage ( dis , CopyFromParent , depth , ZPixmap , 0 ,

(char *) buffer , W , H , pixmapFormat.scanline_pad, scanlineLength);

   if (xim == NULL){

fprintf(stderr, " Couldnt create Ximage..\n"); exit(-1); }

  1. endif
   gcVal.foreground = 0;
   gcVal.background = 0;
   gcMask       = GCForeground | GCBackground;
   gc = XCreateGC ( dis , win , gcMask , &gcVal );
   if (depth==24)

depth = pixmapFormat.bits_per_pixel;

   return (depth);

} </cpp>

Este es el código migrado a SDL:

<cpp> // Códig de X11 migrado a SDL


int init_x (int X, int Y, int W, int H, int bpp, const char *Name) {

   int i;
   if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {

fprintf ( stderr , "Erreur :\n" ); fprintf ( stderr , " Impossible de se connecter au Display\n"); exit (1); }

   screen = SDL_SetVideoMode(W, H, bpp, SDL_SWSURFACE|SDL_HWPALETTE);
   if ( screen == NULL ) {

fprintf ( stderr , "Erreur :\n" ); fprintf ( stderr , " Impossible de se connecter au Display\n"); exit (1); }

   SDL_WM_SetCaption ( Name, Name );
   for ( i=SDL_NOEVENT; i<SDL_NUMEVENTS; ++i )

if ( (i != SDL_KEYDOWN) && (i != SDL_QUIT) ) SDL_EventState(i, SDL_IGNORE);

   depth = screen->format->BitsPerPixel;
   width = screen->w;
   height = screen->h;
   buffer = (unsigned char *)screen->pixels;
   return (depth);

} </cpp>

Como puedes ver el código SDL es mucho mas simple de escribir y de entender.

  • Flexibilidad La librería es multiplataforma. Las aplicaciones que creamos van a correr en Win32, BeOS y Linux sin tener que cambiar ni una sóla línea de código. Otro aspecto de la flexibilidad es que aparte de que el código es totalmente multiplataforma no tienes puedes consultar cualquier aspecto de la implementación por si te puede aportar alguna idea o quieres mejorar algo. Nada está bloqueado, puedes ver como está implementada cada una de las partes de SDL.

Resumiendo, libSDL es portable, intuitiva y estable como una roca (así la define su creador). Podemos confiar en ella y las restricciones son mínimas. Comparada con sus rivales del mundo de la programación de videojuegos es mucho más asequible en todo los sentidos para adentrarnos en el mundo de la programación de videojuegos. Su potencial ha conseguido que hoy en día puedan ejecutarse juegos como Civilization o Descent 2 en máquinas Linux.

Tenemos una herramienta profesional asequible que nos va a permitir dar mucha guerra en el mundo del videojuego.

[editar] Desventajas de SDL

Uno de los principales problemas de esta librería, y una de los principales aspectos por los que creamos este tutorial, es la escasa documentación existente. Tendremos que tener cierta habilidad para leer cientos de líneas de código en programas de ejemplo para buscar aquello que nos hace falta. Uno de los objetivos de este tutorial es que establezcas un punto de partida de conocimiento y no navegues a la deriva en tus inicios. Actualmente existen proyectos de ampliación y traducción de la documentación. Una vez te hagas con la experiencia necesaria puedes aportar tus conocimientos a los grupos encargados de realizar estas tareas.

Algunos programadores consideran la licencia LGPL como un obstáculo para la creación de videojuegos con esta librería. Desde nuestra tribuna lo consideramos como una ventaja que va a permitir que todo el mundo que quiera pueda tener acceso libre a SDL.

Esta biblioteca tampoco nos permite realizar juegos en tres dimensiones. Esta afirmación no es del todo cierta ya que se complementa con OpenGL para crear este tipo de videojuegos que serían temario de otro tutorial. De todas formas al no posibilitarlo intrínsecamente podemos considerarlo como desventaja ante aquellos que quieran realizar videojuegos de este tipo.

[editar] El futuro de SDL

SDL no termina aquí. Existen numerosos proyectos para mejorar esta librería a los que también puedes contribuir. En la actualidad se trabaja en conceptos menos comunes como el rediseñado de la arquitectura para permitir múltiples pantallas y entradas.

El desarrollo, sin eliminar la característica que la hace portable, está actualmente orientado a dotar a sistemas Linux de una mayor potencia en el mundo del videojuego. En la página oficial de SDL puedes seguir el estado actual de los proyectos que se llevan a cabo siendo esta página una fuente casi inagotable de información.

[editar] Recopilando

Si eres un programador experimentado SDL proporciona una biblioteca clara que puede ahorrarnos mucho tiempo en el desarrollo de nuestra aplicación sin perder estabilidad y que además es portable entre varias máquinas y sistemas operativos.

Si no eres un programador experimentado la librería SDL también tiene mucho que aportarte. SDL te permite centrarte en la tarea de desarrollo del juego, obviando los detalles del sistema operativo, y además puedes empezar a utilizarla sin tener que gastar ni un sólo euro en licencias de software a cambio de tu aportación como programador al desarrollo de la librería.

Con SDL, una máquina corriendo tu distribución Linux favorita, el compilador GCC que vamos a usar en el tutorial y tu editor libre preferido puedes, perfectamente, desarrollar un videojuego que no necesitaremos portar luego a diferentes sistemas operativos, ya que será compatible desde su creación. Podremos compartir nuestro videojuego con los usuarios de los sistemas operativos más comunes sin ningún problema.

Resumiendo, en la actualidad SDL es la librería de mayor potencial para la programación de videojuegos multiplaforma. Nos permite ahorrar mucho tiempo permitiéndonos llegar a una gran audiencia gracias a su naturaleza multiplataforma.

Herramientas personales