X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Frbench.c;h=8b9e23ffd7da2817c8a669465a9587909e46f905;hb=80662def0bf707ae09de2d48d50156ccd84a24e3;hp=c72dca4d069e7b3459770688c7a6ccf131e68225;hpb=baf481c2dc52bc0b5f54acb555ddd7701daf05cc;p=retrobench diff --git a/src/rbench.c b/src/rbench.c index c72dca4..8b9e23f 100644 --- a/src/rbench.c +++ b/src/rbench.c @@ -1,7 +1,9 @@ #include #include +#include #include "rbench.h" #include "treestor.h" +#include "util.h" #define DEF_WIDTH 640 #define DEF_HEIGHT 480 @@ -11,8 +13,84 @@ struct options opt = { DEF_WIDTH, DEF_HEIGHT, DEF_BPP }; +int fb_width, fb_height, fb_bpp, fb_pitch; +int fb_rshift, fb_gshift, fb_bshift; +unsigned int fb_rmask, fb_gmask, fb_bmask; +void *framebuf; +unsigned int time_msec; + +int init(void) +{ + printf("initialized graphics %dx%d %dbpp\n", fb_width, fb_height, fb_bpp); + printf(" rgb mask: %x %x %x\n", fb_rmask, fb_gmask, fb_bmask); + printf(" rgb shift: %d %d %d\n", fb_rshift, fb_gshift, fb_bshift); + return 0; +} + +void cleanup(void) +{ +} + +#define XORRGB(x, y, zoom, r, g, b) \ + do { \ + int xor = (((x) - fb_width/2) * (zoom) >> 16) ^ (((y) - fb_height/2) * (zoom) >> 16); \ + (r) = xor >> 2; \ + (g) = xor >> 1; \ + (b) = xor; \ + } while(0) + void redraw(void) { + int i, j, r, g, b, xoffs, yoffs, zoom; + unsigned char *fbptr; + uint16_t *fbptr16; + uint32_t *fbptr32; + + xoffs = COS(time_msec >> 3) * fb_width >> 15; + yoffs = SIN(time_msec >> 2) * fb_height >> 16; + zoom = (SIN(time_msec >> 5) >> 1) + 65536; + + switch(fb_bpp) { + case 15: + case 16: + fbptr16 = framebuf; + for(i=0; i> 3) << fb_rshift) & fb_rmask) | + (((g >> 2) << fb_gshift) & fb_gmask) | + (((b >> 3) << fb_bshift) & fb_bmask); + } + fbptr16 += (fb_pitch >> 1) - fb_width; + } + break; + + case 24: + fbptr = framebuf; + for(i=0; i> 2) - fb_width; + } + break; + } } void key_event(int key, int press)