Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Przed kompilacjπ dodaj do opcji kompilatora "-mwindows -lmingw32 -lSDLmain -lSDL"
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <SDL/SDL.h>
- /*
- Autor: Konrad SzymaÒski
- Date: 26-12-2005
- Mail: kosz85@anty_spam@o2.pl
- */
- /* Funkcja ustawiajπca pixel na okreúlony kolor RGB */
- void putPixel(SDL_Surface *surface, int x, int y, Uint8 R, Uint8 G, Uint8 B)
- {
- /* Zamieniamy poszczegÛlne sk≥adowe koloru na format koloru pixela */
- Uint32 pixel = SDL_MapRGB(surface->format, R, G, B);
- /* Pobieramy informacji ile bajtÛw zajmuje jeden pixel */
- int bpp = surface->format->BytesPerPixel;
- /* Obliczamy adres pixela */
- Uint8 *p = (Uint8 *)surface->pixels + y * surface->pitch + x * bpp;
- /* Ustawiamy wartoúÊ pixela, w zaleønoúci od formatu powierzchni*/
- switch(bpp)
- {
- case 1: //8-bit
- *p = pixel;
- break;
- case 2: //16-bit
- *(Uint16 *)p = pixel;
- break;
- case 3: //24-bit
- if(SDL_BYTEORDER == SDL_BIG_ENDIAN) {
- p[0] = (pixel >> 16) & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = pixel & 0xff;
- } else {
- p[0] = pixel & 0xff;
- p[1] = (pixel >> 8) & 0xff;
- p[2] = (pixel >> 16) & 0xff;
- }
- break;
- case 4: //32-bit
- *(Uint32 *)p = pixel;
- break;
- }
- }
- /* Funkcja renderujπca obraz */
- void drawScene(SDL_Surface *surface)
- {
- int x,y;
- /* NiektÛre powierzchnie wymagajπ zablokowania, aby coú na nich narysowaÊ i do tego s≥uøy ten kawa≥ek kodu. */
- if ( SDL_MUSTLOCK(surface) )
- if ( SDL_LockSurface(surface) < 0 )
- return;
- /* Wype≥niamy ca≥y ekran dwoma kolorami */
- for(x=0;x<640;x++)
- for(y=0;y<480;y++)
- if(x+y<560)
- putPixel(surface, x,y,0,0,0);
- else
- putPixel(surface, x,y,255,255,255);
- /* Odblokowujemy po rysowaniu */
- if ( SDL_MUSTLOCK(surface) )
- SDL_UnlockSurface(surface);
- /* Podmieniamy obszar rysowania */
- SDL_Flip(surface);
- }
- int main(int argc, char *argv[])
- {
- /* Wskaünik na obszar rysowania */
- SDL_Surface *ekran;
- /* Obiekt potrzebny do przetwarzania zdarzeÒ */
- SDL_Event event;
- /* Flaga g≥Ûwnej pÍtli programu, odpowiedzialna za jego zakoÒczenie */
- int done=1;
- /* Informujemy program, co naleøy zrobiÊ, wrazie nieprzewidywanych dzia≥aÒ aplikacji. */
- atexit(SDL_Quit);
- /* Inicjujemy komponenty SDL'a, z ktÛrych bÍdziemy korzystaÊ. */
- if(SDL_Init( SDL_INIT_VIDEO )<0){
- /* Zwracamy b≥πd, nie uda≥o siÍ zainicjowaÊ komponentÛw. */
- fprintf( stderr, "Unable to init SDL: %s\n", SDL_GetError());
- exit(1);
- }
- /* Uzyskujemy wskaünik do obszaru graficznego, s≥owem tego co wyúwietli siÍ na ekranie. */
- ekran = SDL_SetVideoMode(640, //szerokoúÊ
- 480, //wysokoúÊ
- 0, //iloúÊ bitÛw koloru 8,16,32, dla 0 sam ustala.
- SDL_SWSURFACE); // flagi, o ktÛrych szerzej poniøej.
- /* Jeúli nasz wskaünik jest rÛwny NULL, to znaczy, øe nie uda≥o siÍ utworzyÊ obszaru graficznego */
- if(ekran == NULL){
- /* Informujemy o b≥Ídach. Warto sprawdzaÊ plik stderr, czÍsto dowiadujemy siÍ czemu wystπpi≥ b≥πd */
- fprintf( stderr, "Unable to set up video: %s\n", SDL_GetError());
- exit(1);
- }
- /* G≥Ûwna pÍtla programu, odpowiada za wszystko co dzieje siÍ po zainicjowaniu obszaru rysowania i rÛønych bibliotek. Wykonuje siÍ pÛki flaga done jest rÛøna od zera. */
- while(done)
- {
- /* PÍtla obs≥ugi zdarzeÒ i komunikatÛw. SDL_PollEvent zwraca nam poprzez parametr bieøπce zdarzenie i wartoúÊ 1 gdy jest coú do obs≥uøenia, lub 0 gdy nie ma. */
- while(SDL_PollEvent(&event))
- {
- /* Sprawdzamy, czy uøytkownik nie wywo≥a≥ opcji zamkniÍcia programu. Jeúli tak zakaÒczamy wykonywanie g≥Ûwnej pÍtli. */
- if(event.type == SDL_QUIT)
- done=0;
- /* Zdarzenie jest zdarzeniem przyciúniÍcia przycisku klawiatury. */
- if(event.type == SDL_KEYDOWN)
- {
- /* Jeúli wciúniÍtym klawiszem jest Esc, koÒczymy program. */
- if(event.key.keysym.sym == SDLK_ESCAPE)
- done=0;
- }
- }
- /* Rysujemy scenÍ */
- drawScene(ekran);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement