Tutorial SDL: Primeros pasos
Tutorial SDL: Primeros pasos
Tutorial SDL: Primeros pasos
Hola Pixel
Este ejemplo muestra lo maravillosa que es la SDL, solo unas cuantas lineas de código para mostrar una ventana y dibujar un pixel en ella.
#include "SDL.h"
#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480
#define SCREEN_DEPTH 16
int main(int argc, char *argv[]) {
SDL_Surface *screen;
Uint8 *p;
int x = 10; // coordenada X del pixel
int y = 20; // coordenada Y del pixel
/* Inicializamos SDL */
SDL_Init(SDL_INIT_VIDEO);
/* Inicializamos la pantalla / ventana */
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
/* Hacemos apuntar p al lugar donde queremos dibujar el pixel */
p = (Uint8 *)screen->pixels + y * screen->pitch + x * screen->format->BytesPerPixel?;
/* Dibujamos el pixel! */
*p=0xff;
/* Actualizamos la pantalla (doble buffering) */
SDL_Flip(screen);
while(1);
}
Para compilarlo ejecutarias un comando como:
gcc sdltest.c -I /usr/include/SDL -lSDL -o sdltest
Bueno, ahi está el ejemplo, pero seguro que a muchos no les deja las cosas claras, vamos a explicarlo un poco:
SDL_Init(SDL_INIT_VIDEO);
Esta linea inicializa la SDL para que podamos hacer cosillas con ella. El flag SDL_INIT_VIDEO hace a la SDL inicializar el video. Para reproducir audio necesitarias el flag SDL_INIT_AUDIO, y para responder a ventos de joystick el flag SDL_INIT_JOYSTICK.
screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_DEPTH, SDL_SWSURFACE);
Después inicializamos la pantalla. el primer argumento es SCREEN_WIDTH, definido a 640, la resolucion X de la pantalla. El segundo, SCREEN_HEIGHT es la resolucion Y de la pantalla, 480. El tercero es la profundidad de color, 16 bit. El ultimo flag es SDL_SWSURFACE, lo que creara la superficie por software, usando la memoria del sistema en lugar de la memoria de video (lo dejamos asi por compatibilidad).
p = (Uint8 *)screen->pixels + y * screen->pitch + x * screen->format->BytesPerPixel?;
Un poco de C básico, p es un puntero al al valor en el area de pixeles de la pantalla donde queremos dibujar el pixel. screen->pixels es la direccion de memoria del area de pixeles de la pantalla. Añadiendole el numero de linea donde queremos poner el pixel (la coordenada Y) multiplicado por el numero de pixeles de una linea, más la coordenada X, multiplicada por el numero de bytes en un pixel, obtenemos el puntero al pixel que queremos volver blanco.
*p=SDL_MapRGB(screen->format, 255, 255, 255);
Aqui está la acción. Cogemos el puntero y le damos el valor de la función SDL_MapRGB. Esta función devuelve un valor que seria el color RGB especificado por los argumentos segundo tercero y cuarto en el formato de pantalla especificado por el primer argumento, en este caso, el formato de pantalla actual. Asi que escribiendo eso en p, pondriamos el pixel en x,y de color blanco, ya que el color RGB 255,255,255 es blanco... facil eh?
SDL_Flip(screen);
while(1);
Finalmente mostramos nuestro duro trabajo. SDL_Flip(screen) vuelca la pantalla en el framebuffer, haciendo que la pantalla/ventana muestre lo que hemos dibujado en ella. Lo unico que hace el while(1) es no hacer nada mientras 1 sea verdadero, y 1 siempre lo es, asi que el programa permanecera asi... mostrando nuestro pixel... por siempre... (mientras no mates el proceso, apagues el ordenador, te corten el suministro electrico... wink )
- Hige2001- November 25 2009 21:25:26