Programmare con la Libreria Multipiattaforma SDL su Linux

La libreria multipiattaforma SDL ( Simple DirectMedia Layer ) è nata da parte di LokiGames per fare il porting dei videogiochi Windows anche su Linux, ma grazie ad altri programmatori è diventata disponibile per Windows, BeOS, MacOS e tanti altri. I pregi maggiori di questa libreria sono la portabilità e la composizione di vari moduli, anche esterni fatti da altri programmatori, tutti dediti alla creazione di un’applicazione multimediale come un videogioco. Per compilare i programmi scritti con la libreria SDL è necessario scaricare i pacchetti direttamente dalla propria distribuzione Linux ( in Ubuntu libsdlx.x-dev, metodo consigliato ), oppure è possibile reperirli anche per le altre piattaforme sul sito ufficiale di SDL; ecco i moduli base nei quali è suddivisa la libreria:

  • Video
  • Audio
  • Joystick
  • Timer
  • Thread
  • Eventi

A questi è possibile affiancare altre librerie per svolgere altri compiti come ad esempio per la gestione della rete o delle immagini. Per quanto concerne la grafica 3D, SDL permette di creare un contesto utilizzabile in OpenGL.
Al momento dell’inizializzazione è possibile attivare soltanto i moduli necessari oppure demandare ad altre librerie altri compiti, utilizzare FMOD per le funzioni audio ed SDL per la grafica ad esempio. La funzione che consente l’inizializzazione della libreria si chiama SDL_Init(), che accetta come unico parametro un insieme di flag unibili tramite OR, la funzione allora restituirà 0 ( zero ) in caso di successo, altrimenti -1.

  • SDL_INIT_TIMER per i timer
  • SDL_INIT_AUDIO per l’audio
  • SDL_INIT_VIDEO per il video
  • SDL_INIT_CDROM per il cdrom
  • SDL_INIT_JOYSTICK per il joysyick
  • SDL_INIT_EVERYTHING per tutti i sottinsiemi precedenti

Ricordo che questa funzione deve essere invocata prima di ogni altra chiamata alla libreria ed al termine va chiusa con SDL_Quit(), in modo da liberare le risorse occupate. La libreria SDL permette anche di aggiungere o eliminare determinati sistemi tramite la funzione SDL_InitSubSystem() e SDL_QuitSubSystem(), funzioni che accettano gli stessi flag di SDL_Init(). Ogni volta che si richiama una funzione è bene sempre controllare il valore restituito in modo da rilevare possibili errori, mentre tramite la funzione SDL_GetError() si può conoscere l’errore attraverso un indirizzo alla stringa contenente appunto l’errore verificatosi in formato testuale. Vediamo quindi un piccolo esempio di codice per inizializzare la libreria ed utilizzare alcuni moduli, il tutto in ambiente Linux con il compilatore GCC.

/* File: test_sdl.c
   compilare con: gcc -o test_sdl test_sdl.c
         $(sdl-config --libs --cflags)
*/

#include <stdio.h>
#include <SDL.h>

int main(int argc, char** argv)
{
   int iRet = SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO);
   if (iRet == -1)
   {
      fprintf(stderr, "ERRORE: %s", SDL_GetError());
      return -1;
   }

   // Ora dobbiamo utilizzare anche il joystick
   iRet = SDL_InitSubSystem(SDL_INIT_JOYSTICK);
   if (iRet == -1)
   {
      fprintf(stderr, "ERRORE: %s", SDL_GetError());
      return -1;
   }

   // Ora non serve più l'audio ed il joystick
   SDL_QuitSubSystem(SDL_INIT_JOYSTICK|SDL_INIT_AUDIO);

   SDL_Quit();

   return 0;
}

In questo articolo abbiamo introdotto la programmazione attraverso la libreria SDL per creare applicazioni multimediali, per ora termino qui, ma in futuro tratteremo della gestione del video, quindi continuate a seguirmi.

Informazioni su Giampaolo Rossi

Sviluppatore di software gestionale da oltre 28 anni.
Questa voce è stata pubblicata in Linux, Programmazione e contrassegnata con , . Contrassegna il permalink.