SDL en C bajo GNU/Linux 002 – Instalando la base

Si te has perdido el primer post de este grupo de posts mira antes: https://mierda.tv/2017/05/01/sdl-en-c-bajo-gnulinux-001-hola-mundo/
 
Existe mucho software creado con SDL. En esta entrada no vamos a mostrar ejemplos de software ya creado, ni a recopilar ni compilar juegos que se han creado (comerciales y libres) usando SDL. En esta entrada vamos a instalar lo básico para trabajar con SDL usando C puro.
 
 
No esperes aún muchas líneas de código. Ahora es tiempo de instalar dependencias.
 
 
El sistema operativo que utilizo es Debian (GNU/Linux) pero … podrás usar esto en otros sistemas operativos GNU/Linux sin problemas e incluso en Windows, Mac OS, iOS, Android, AmigaOS, …
 
 
No tengo nada en contra de otras distros de GNU/Linux pero leñes, tengo que usar algo para el tutorial y he decidido que sea Debian. No te costará mucho adaptarlo a otras distros.
 
 
De modo que vamos: Des-Pa-Cito
 
 
Con calma, sin prisa alguna ni presión. Vamos a probar las cosas poco a poco.
 
 

Lo que vamos a instalar inicialmente y para tener lo base es:
 
 
libsdl2-2.0 libsdl2-dev
 
 
Lo básico será instalar esto en una debian/ubuntu:
 
 

# apt-get install libsdl2-2.0 libsdl2-dev


 
 
Las librerías net, image, mixer, ttf y gfx ya las instalaremos después cuando las precisemos.
Por el momento NO es así.

 
 
Hemos de saber que para usar las librerías hemos de incluirlas con #include . Ejemplo de la Librería básica de SDL:
 
 

#include <SDL.h>

 
 
Nosotros/as incluiremos por el momento la básica y para ello aparte de saber incluir las librerías hemos de saber que parámetros meter a gcc para compilar.
 
 

Para compilar un programa en C que utiliza SDL encontrarás por internete muchas recetas. Lo ideal es usar:
 
 

sdl2-config --cflags --libs

 
 
y por tanto compilar por ejemplo así:
 
 

$ gcc -o ventana ventana.c `sdl2-config --cflags --libs`

 
 
Nuestro primer programa usando SDL: Una ventana con titulo
 
 

Veamos un ejemplo compilable (mirar mejor aquí que se ve entero https://pastebin.com/raw/pUEw9nqW ):
 
 

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

//int main(int argc, char* argv[]) {
int main(void) {

	SDL_Window *ventana;			// Declaramos ventana como un puntero
	SDL_Init(SDL_INIT_VIDEO);		// Inicializamos SDL2

	// Creamos una ventana con la siguiente configuración:
	ventana = SDL_CreateWindow(
	"Hola mundo SDL mierda.tv in the night with the stars in the sky",                  // window title
	//SDL_WINDOWPOS_UNDEFINED,		// Posición inicial x
	//SDL_WINDOWPOS_UNDEFINED,		// Posición inicial y
	0,					// Posición inicial x
	0,					// Posición inicial y
	640,					// El ancho en pixeles
	480,					// El alto en pixeles
	SDL_WINDOW_OPENGL			// flags de la ventana ( SDL_WINDOW_FULLSCREEN, SDL_WINDOW_FULLSCREEN_DESKTOP, SDL_WINDOW_OPENGL, SDL_WINDOW_HIDDEN ,SDL_WINDOW_BORDERLESS, SDL_WINDOW_RESIZABLE, SDL_WINDOW_MINIMIZED, SDL_WINDOW_MAXIMIZED, SDL_WINDOW_INPUT_GRABBED, SDL_WINDOW_ALLOW_HIGHDPI
        //SDL_WINDOW_FULLSCREEN

	);

	// Comprobamos si la ventana se ha creado
	if (ventana == NULL) {
		// En el caso de que la ventana no se ha creado ...
		printf("Lo siento amigo/a pero no se pudo crear la ventana: %s\n", SDL_GetError());
		return 1;
	}

	// La ventana está abierta ahora mismo. Aquí es cuando entramos en el loop de la ventana. (ver SDL_PollEvent())

	SDL_Delay(6000);  // Pausar 6 segundos

	// Cerrar y destruir ventana
	SDL_DestroyWindow(ventana);

	// Clean up - limpieza y cierre
	SDL_Quit();
	return 0;
}

 
 
En el ejemplo veremos algunas líneas comentadas. Podemos por ejemplo fácilmente poner esto a pantalla completa si comentamos SDL_WINDOW_OPENGL y descomentamos SDL_WINDOW_FULLSCREEEN .
Ver más flags aquí: https://wiki.libsdl.org/SDL_WindowFlags
 
 
También he comentado más código para que se vea que podemos posicionar la ventana donde nos de la gana o hacer que se posicione normalmente en el centro (por defecto).
 
 
Tardará 6 segundos y la ventana se destruirá y se cerrará el programa.
 
 

 
 
En fin. Un ejemplo bueno para iniciarse. Si la ventana se abre y se ve y podemos trastearle al códigio y compilar diferentes opciones es que todo va bien. Es que estamos usando SDL ya.

La vida es así supongo. Un poco de tutorial y a la carga luego.
 
 

El código sin comentarios podría quedar así e incluso más reducido, no obstante yo prefiero dejar los comentarios para enterarme meses después de que mierda estaba haciendo.

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

int main(void) {
        SDL_Window *ventana;
        SDL_Init(SDL_INIT_VIDEO);
        ventana = SDL_CreateWindow("Texto titulo",0,0,640,480,SDL_WINDOW_OPENGL);
        if (ventana == NULL) {
                printf("No se pudo crear la ventana: %s\n", SDL_GetError());
                return 1;
        }
        SDL_Delay(3000);
        SDL_DestroyWindow(ventana);
        SDL_Quit();
        return 0;
}

 
 
Y un makefile de ejemplo para compilar usando make puede ser este (le falta una sección install que copie el binario generado, no obstante para una tontería como esta mejor no añadirle esa sección).
 

CC := gcc
CFLAGS := -Wall
LINKER_FLAGS = `sdl2-config --cflags --libs`

test:
        make clean
        make build

build:
        $(CC) $(CFLAGS) -o ventana ventana.c $(LINKER_FLAGS)

run:
        ./ventana

clean:
        -rm ventana

 
 
Sobre los tutoriales de mierda
 
 
Los tutoriales de iniciación mucha gente los desprecia. Pero para mi son importantes. Si llegaste aquí y estás leyendo esto lo mismo estás iniciándote. En pocas horas ya serás pro y dejarás de leer estas mierdas pero … siempre recuerda que se precisa muchas veces de un algo que te incite a comenzar. Estos tutoriales son eso. 😉

Saludos cordiales.

Deja un comentario