¡Oh no! ¿Dónde está el JavaScript? El navegador Web no tiene JavaScript activado o no es compatible con JavaScript. Active JavaScript en su explorador Web para ver correctamente este sitio Web o actualizar a un navegador Web que admita JavaScript.
Sabías que...
Existe un periférico de Dreamcast que emula a una caña de pescar.
Artículos

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 )

AdminDC April 22 2008 3529 visto 1 comentarios 0 calificaciones Imprimir

1 comentarios

Deja un comentario

Debes iniciar sesión para publicar un comentario.
  • Hige2001
    muy bueno ojala me puedas explicar mas de este tema ya que soy novato pero seria bueno contribuir...bigsmile
    - November 25 2009 21:25:26

    La valoración sólo está disponible para miembros. Por favor Iniciar sesión o Registro para votar.
    ¡Excelente! (0)0 %
    Muy Bien (0)0 %
    Bien (0)0 %
    Normal (0)0 %
    Pobre (0)0 %
    Afiliados
    SEGA Saturno - Saturn, SEGA y Videojuegos