GRY-Online.pl --> Archiwum Forum

Podstawy SDL

04.01.2009
13:05
smile
[1]

Filevandrel [ czlowiek o trudnym nicku ]

Podstawy SDL

Problem- narysowanie fraktala za pomocą SDL w Windowsowym środowisku tak, żeby działał pod Linuksem. Czy ktoś mógłby mi udzielić rad na co mam szczególnie zwracać uwagę podczas pisania kodu? Czego specyficznie wymaga ode mnie linuks? Będę wdzięczny.

04.01.2009
18:25
smile
[2]

Filevandrel [ czlowiek o trudnym nicku ]

ok jakiekolwiek pomysly czemu to nie rysuje pikseli? wyswietla tylko ekran. Z gory thx


#include <SDL/SDL.h>
#include <stdlib.h>
#define MAX 10000




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;



void rysuj(SDL_Surface *surface)
‹ float x[MAX],y[MAX],r;
int i;
for(i=0;i<MAX-1;i++)‹
‹y=0; x=0;› ›
for(i=0;i<MAX-1;i++)

r=(rand()%100)/100;
if (r<=0.01) ‹
x[i+1]=0;
y[i+1]=0.16*y; ›
if (r<=0.08) ‹
x[i+1]=0.2*x-0.26*y;
y[i+1]=0.23*x+0.22*y+1.6; ›
if (r<=0.15) ‹
x[i+1]=-0.15*x+0.28*y;
y[i+1]=0.26*x+0.24*y+0.44; ›
else ‹
x[i+1]= 0.85*x+0.04*y;
y[i+1] =-0.04*x+ 0.85*y+1.6; ›

putPixel(surface,x,y, 100, 100, 100);





/* Używamy pełnej postaci funkcji mian, przyjmującej argumenty z lini poleceń. */
int main(int argc, char *argv[])‹
int i;
/* Wskaźnik do structury przechowującej zawartość ekranu. */
SDL_Surface *ekran;

/* Informujemy program, co należy zrobić, wrazie nieprzewidywanych działań aplikacji. */
atexit(SDL_Quit);
srand(10000);
/* 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(800, //szerokość
600, //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 );


/* Usypiamy program na 1000ms, aby zobaczyć okno */
//rysuj(ekran);
for(i=1;i<400;i++)

putPixel(ekran,i,300, 255, 0, 0);

SDL_Delay(5000);

return 0;

© 2000-2024 GRY-OnLine S.A.