Hola a todos! Esta es mi segunda lección de SDL 2. Todavía obtengo información 
de aquí .
Bienvenidos a la lección.
Principal no de goma
En la última lección, organicé todo en la función 
Main () , pero para programas grandes esto no es bueno. Por eso apareció la oportunidad de escribir funciones. Ahora lo usaremos.
Comenzaremos a escribir código conectando un SDL y declarando varias variables globales.
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; 
Aquí, fuera de la función 
Main () , declaramos objetos de ventana ( 
win ), superficies de pantalla ( 
scr ) y la imagen de este 
emoticon ( 
smile ).
Escribamos una función para inicializar el SDL, cree una ventana y una superficie para dibujar. Se ve así:
Init () int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } 
 Este código le resultará familiar de la lección anterior. Aquí inicializamos el sistema de video, creamos una ventana con el nombre “Main is not rubber”, con coordenadas indefinidas y con las dimensiones previamente establecidas, y también obtuvimos la superficie de la ventana, guardándola en 
scr . En caso de error, esta función devolverá 1, de lo contrario 0.
Ahora puede escribir una función para descargar los archivos multimedia necesarios. Aquí esta:
Carga () int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } 
 Esta función es extremadamente simple. 
Cargamos la imagen .bmp usando la función 
SDL_LoadBMP . Esta función toma la ruta al archivo de imagen (completo o relativo) y devuelve un objeto de la clase 
SDL_Surface . También debe verificar la corrección de la ejecución: si hubo problemas con la descarga (archivo no encontrado, archivo roto), la función 
SDL_LoadBMP devolverá 
NULL .
También escribimos un programa para completar la solicitud.
Salir () void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); } 
 Aquí apareció una nueva función 
SDL_FreeSurface , que simplemente limpia la superficie. Después de configurar la 
sonrisa variable a 
NULL . Todas las demás funciones se discutieron en la lección anterior.
Ahí es donde termina la escritura de las funciones y podemos pasar a 
Main () .
Principal () int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 
 Aquí llamamos primero a la función 
init () , escrita anteriormente, luego a la función 
load () , que también escribimos antes. A continuación, muestre 
smile in 
scr , utilizando la función 
SDL_BlitSurface . Esta función toma una superficie para dibujar, un rectángulo que se debe cortar de esta superficie (esto es necesario para la animación), si no se necesita cortar nada, se transmite 
NULL , la superficie en la que se dibuja el rectángulo, cuyas coordenadas se usan para dibujar. Si las coordenadas son cero, pasamos 
NULL .
Es hora de hablar sobre las coordenadas. SDL utiliza un sistema de coordenadas diferente, no al que todos están acostumbrados. Aquí el punto con coordenadas (0, 0) está en la esquina superior izquierda. Es importante tener esto en cuenta al mostrar para evitar situaciones desagradables.
Bueno, eso fue divertido, continuamos. A continuación, actualizamos la ventana con una función ya familiar, hacemos que el programa se congele durante 2 segundos, llame a la función 
quit () que escribimos y finalice el programa. En la salida, tenemos un programa que muestra una sonrisa genial durante 2 segundos. Todo el código se ve así:
 #include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } void quit() { SDL_FreeSurface(smile); SDL_DestroyWindow(win); SDL_Quit(); } int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 
Espero que todo esté claro. ¡Buena suerte a todos!
<< Lección anterior || Próxima lección 
>>