X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=sdlpixels.c;fp=sdlpixels.c;h=46d075d90e45e1b7557972e4c3f4ef3ed4e7eaf9;hb=e1c0a3963cd5ce16b614e9e060bd0468f3aa01f1;hp=0000000000000000000000000000000000000000;hpb=fcb01b3da1a4bc51482e67b88b7c59dc5c8b7578;p=glpixels diff --git a/sdlpixels.c b/sdlpixels.c new file mode 100644 index 0000000..46d075d --- /dev/null +++ b/sdlpixels.c @@ -0,0 +1,126 @@ +#include +#include +#include +#include +#include + +int init(void); +void display(void); + +int win_width, win_height; +int max_xscroll, max_yscroll; + +#define IMG_W 1400 +#define IMG_H 1200 +unsigned int img[IMG_W * IMG_H]; + +unsigned int start_tm; +unsigned int num_frames; + +int quit; +SDL_Surface *fbsurf; + + +int main(int argc, char **argv) +{ + SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER); + if(!(fbsurf = SDL_SetVideoMode(800, 600, 32, SDL_SWSURFACE))) { + fprintf(stderr, "failed to set video mode\n"); + return 1; + } + SDL_WM_SetCaption("SDL pixel drawing benchmark", 0); + + if(init() == -1) { + return 1; + } + + start_tm = SDL_GetTicks(); + while(!quit) { + SDL_Event ev; + while(SDL_PollEvent(&ev)) { + switch(ev.type) { + case SDL_QUIT: + goto done; + + case SDL_KEYDOWN: + if(ev.key.keysym.sym == 27) goto done; + break; + + default: + break; + } + if(quit) goto done; + } + + display(); + } + +done: + SDL_Quit(); + return 0; +} + + +int init(void) +{ + int i, j, xor, r, g, b; + unsigned int *ptr; + + ptr = img; + for(i=0; i> 1) & 0xff; + g = xor & 0xff; + b = (xor << 1) & 0xff; + *ptr++ = b | (g << 8) | (r << 16); + } + } + + win_width = 800; + win_height = 600; + + max_xscroll = IMG_W - win_width; + max_yscroll = IMG_H - win_height; + return 0; +} + +void display(void) +{ + int i, j; + unsigned int tm = SDL_GetTicks() - start_tm; + unsigned int interv; + float t = tm / 256.0f; + int xoffs = (int)((sin(t) * 0.5f + 0.5f) * max_xscroll); + int yoffs = (int)((cos(t) * 0.5f + 0.5f) * max_yscroll); + unsigned int *start = img + yoffs * IMG_W + xoffs; + unsigned int *dest; + + if(SDL_MUSTLOCK(fbsurf)) { + SDL_LockSurface(fbsurf); + } + dest = fbsurf->pixels; + + for(i=0; i= 4000) { + unsigned int fps = 100000 * num_frames / interv; + printf("SDL: %.2f fps\n", fps / 100.0f); + num_frames = 0; + start_tm = tm; + quit = 1; + } +}