Programowanie w systemie UNIX/c grafika/SDL

Z Wikibooks, biblioteki wolnych podręczników.
Skocz do: nawigacja, szukaj

Przykład[edytuj]

przykład wykorzystujący SDL:

  #include <SDL.h>
 
  #define DIM 400.0
 
  int main() {
       SDL_Surface *screen = SDL_SetVideoMode(DIM, DIM, 0, 0);
       SDL_Surface *surface = SDL_CreateRGBSurface(SDL_SWSURFACE, DIM, DIM, 24, 0xFF, 0xFF00, 0xFF0000, 0);
 
       double fact = 2;
       double cx = -0.74364500005891;
       double cy = 0.13182700000109;
 
       while (fact > 1e-18) {
            double xa = cx - fact;
            double ya = cy - fact;
            int y;
 
            for (y = 0; y < DIM; y++) {
                 Uint8 *pixline = surface->pixels + y*surface->pitch;
                 double y0 = ya + y/DIM*2*fact;
                 int x;
                 for (x = 0; x < DIM; x++) {
                      double x0 = xa + x/DIM*2*fact;
                      double xn = 0, yn = 0, tmpxn;
                      int i;
                      for (i = 0; i<512; i++) {
                           tmpxn = xn*xn - yn*yn + x0;
                           yn = 2*xn*yn + y0;
                           xn = tmpxn;
                           if (xn*xn + yn*yn > 4)
                                break;  // approximate infinity
                      }
                      if (i == 512) {
                           // in Mandelbrot set
                           pixline[x*3] = pixline[x*3+1] = pixline[x*3+2] = 0;
                      } else {
                           // not in Mandelbrot set; use escape iteration value to set color (grades of blue then white)
                           pixline[x*3] = pixline[x*3+1] = i < 256 ? 0 : i - 256;
                           pixline[x*3+2] = i < 256 ? i : 255;
                      }
                 }
            }
 
            SDL_BlitSurface(surface, NULL, screen, NULL);
            SDL_Flip(screen);
            fact /= 2;
       }
 
       SDL_Quit();
       return(0);
  }

Plik zapisujemy jako: mandelbrot.c

Kompilujemy za pomocą komendy:

gcc `sdl-config --cflags --libs` -O3 mandelbrot.c && ./a.out

Instalacja[edytuj]

Jeśli nie mamy SDL to instalujemy ją, np.:

sudo apt-get install libsdl1.2-dev libsdl-image1.2-dev libsdl-mixer1.2-dev libsdl-ttf2.0-dev