Skip to content
56K

56K

La web de Fanta

Menu
  • Unix/Linux
  • Cacharreo
  • Games
  • Streaming
  • Notas
  • /dev/null
Menu

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

Posted on 24/10/202116/01/2023 by 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.

2 thoughts on “SDL en C bajo GNU/Linux – 002 – Instalando la base”

  1. Fernando Sancho dice:
    31/01/2021 a las 22:30

    Llevo tantos años sin programar que creo que voy a seguir este tutorial de iniciación para desoxidarme y ponerme de una vez al día con SDL.

  2. fanta dice:
    01/02/2021 a las 12:40

    Espero le sea de utilidad :). Un saludo

Deja una respuesta

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

Generic selectors
Exact matches only
Search in title
Search in content
Post Type Selectors

Comentarios recientes

  • fanta en i3wm en el ordenador del trabajo con 3 pantallas
  • Punk en i3wm en el ordenador del trabajo con 3 pantallas
  • Twicsy en Eliminar kernels viejos en redhat y liberar espacio en /boot
  • fanta en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • Jorge en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • fanta en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • Camilo en Capturar el audio de Firefox en archivos ogg en GNU+Linux
  • eovoltio en Mastodon.madrid se apaga el 12 de Octubre
  • fanta en Time Machine – Las Nuevas Aventuras de la Maquina del Tiempo sobre GNU+Linux
  • Alberto Salvia Novella en Time Machine – Las Nuevas Aventuras de la Maquina del Tiempo sobre GNU+Linux
©2023 56K | Built using WordPress and Responsive Blogily theme by Superb