Saltar al contenido
56K

56K

Slow IT Notes – Just 4 Fun

Menú
Menú

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

Publicada el 24/10/202106/02/2023 por fanta

Si te has perdido el primer post de este grupo mira antes es bueno que lo mires antes: sdl-en-c-bajo-gnu-linux-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.
Con calma, sin prisa alguna ni presión. Vamos a probar las cosas poco a poco.

 

Disponer de lo base

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 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.56k.es 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í: 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ódigo 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

 

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 permita dar los primeros pasos.

Estos tutoriales son eso. 😉

 

Saludos cordiales.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

fanta de naranja
💾 QEMU
💾 SOLARIS
💾 ESXi
💾 FREEBSD
💾 DEBIAN
💾 AMIGA
💾 SYSADMIN
💾 JUNOS
💾 IMPRIMIR
💾 MSDOS
💾 WINDOWS
💾 FAIRPHONE
💾 GAMING
💾 STREAMING
💾 REDHAT
💾 GRÁFICOS
💾 CACHARROS
💾 SONIDO
💾 NETWORKING
💾 ROCKY
💾 SUSE
💾 TMP
©2025 56K | Construido utilizando WordPress y Responsive Blogily tema por Superb