void scrnmng_menudraw(const RECT_T *rct) { DRAWRECT dr; SDL_Surface *surface; const BYTE *p; const BYTE *q; BYTE *r; BYTE *a; int salign; int dalign; int x; if ((!scrnmng.enable) && (menuvram == NULL)) return; surface = SDL_GetVideoSurface(); if (surface == NULL) return; SDL_LockSurface(surface); if (calcdrawrect(surface, &dr, menuvram, rct) == SUCCESS) { if (scrnmng.sm.bpp == 16) { p = scrnmng.vram->ptr + (dr.srcpos * 2); q = menuvram->ptr + (dr.srcpos * 2); r = (BYTE *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x]) { if (a[x] & 2) { *(UINT16 *)r = *(UINT16 *)(q + (x * 2)); } else { a[x] = 0; *(UINT16 *)r = *(UINT16 *)(p + (x * 2)); } } r += dr.xalign; } while (++x < dr.width); p += salign * 2; q += salign * 2; r += dalign; a += salign; } while (--dr.height); } } SDL_UnlockSurface(surface); SDL_Flip(surface); }
static void draw_onmenu(void) { DRAWRECT dr; RECT_T rt; SDL_Surface *surface; const BYTE *p; BYTE *q; const BYTE *a; int salign; int dalign; int x; rt.left = 0; rt.top = 0; rt.right = min(scrnstat.width, 640); rt.bottom = min(scrnstat.height, 400); surface = SDL_GetVideoSurface(); if (surface == NULL) { return; } SDL_LockSurface(surface); if (calcdrawrect(surface, &dr, menuvram, &rt) == SUCCESS) { if (scrnmng.sm.bpp == 16) { p = scrnmng.vram->ptr + (dr.srcpos * 2); q = (BYTE *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x] == 0) { *(UINT16 *)q = *(UINT16 *)(p + (x * 2)); } q += dr.xalign; } while(++x < dr.width); p += salign * 2; q += dalign; a += salign; } while(--dr.height); } } SDL_UnlockSurface(surface); SDL_Flip(surface); }
void scrnmng_menudraw(const RECT_T *rct) { SDL_Surface *surface; DRAWRECT dr; const UINT8 *p; const UINT8 *q; UINT8 *r; UINT8 *a; int salign; int dalign; int x; if ((!scrnmng.enable) && (menuvram == NULL)) { return; } surface = SDL_GetVideoSurface(); if (surface == NULL) { return; } SDL_LockSurface(surface); if (calcdrawrect(surface, &dr, menuvram, rct) == SUCCESS) { switch(scrnmng.bpp) { #if defined(SUPPORT_16BPP) case 16: p = scrnmng.vram->ptr + (dr.srcpos * 2); q = menuvram->ptr + (dr.srcpos * 2); r = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x]) { if (a[x] & 2) { *(UINT16 *)r = *(UINT16 *)(q + (x * 2)); } else { a[x] = 0; *(UINT16 *)r = *(UINT16 *)(p + (x * 2)); } } r += dr.xalign; } while(++x < dr.width); p += salign * 2; q += salign * 2; r += dalign; a += salign; } while(--dr.height); break; #endif #if defined(SUPPORT_24BPP) case 24: p = scrnmng.vram->ptr + (dr.srcpos * 3); q = menuvram->ptr + (dr.srcpos * 3); r = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x]) { if (a[x] & 2) { r[RGB24_B] = q[x*3+0]; r[RGB24_G] = q[x*3+1]; r[RGB24_R] = q[x*3+2]; } else { a[x] = 0; r[0] = p[x*3+0]; r[1] = p[x*3+1]; r[2] = p[x*3+2]; } } r += dr.xalign; } while(++x < dr.width); p += salign * 3; q += salign * 3; r += dalign; a += salign; } while(--dr.height); break; #endif #if defined(SUPPORT_32BPP) case 32: p = scrnmng.vram->ptr + (dr.srcpos * 4); q = menuvram->ptr + (dr.srcpos * 3); r = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x]) { if (a[x] & 2) { ((RGB32 *)r)->p.b = q[x*3+0]; ((RGB32 *)r)->p.g = q[x*3+1]; ((RGB32 *)r)->p.r = q[x*3+2]; // ((RGB32 *)r)->p.e = 0; } else { a[x] = 0; *(UINT32 *)r = *(UINT32 *)(p + (x * 4)); } } r += dr.xalign; } while(++x < dr.width); p += salign * 4; q += salign * 3; r += dalign; a += salign; } while(--dr.height); break; #endif } } SDL_UnlockSurface(surface); SDL_Flip(surface); }
static void draw_onmenu(void) { RECT_T rt; SDL_Surface *surface; DRAWRECT dr; const UINT8 *p; UINT8 *q; const UINT8 *a; int salign; int dalign; int x; rt.left = 0; rt.top = 0; rt.right = min(scrnstat.width, 640); rt.bottom = min(scrnstat.height, 400); #if defined(SIZE_QVGA) rt.right >>= 1; rt.bottom >>= 1; #endif surface = SDL_GetVideoSurface(); if (surface == NULL) { return; } SDL_LockSurface(surface); if (calcdrawrect(surface, &dr, menuvram, &rt) == SUCCESS) { switch(scrnmng.bpp) { #if defined(SUPPORT_16BPP) case 16: p = scrnmng.vram->ptr + (dr.srcpos * 2); q = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x] == 0) { *(UINT16 *)q = *(UINT16 *)(p + (x * 2)); } q += dr.xalign; } while(++x < dr.width); p += salign * 2; q += dalign; a += salign; } while(--dr.height); break; #endif #if defined(SUPPORT_24BPP) case 24: p = scrnmng.vram->ptr + (dr.srcpos * 3); q = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x] == 0) { q[0] = p[x*3+0]; q[1] = p[x*3+1]; q[2] = p[x*3+2]; } q += dr.xalign; } while(++x < dr.width); p += salign * 3; q += dalign; a += salign; } while(--dr.height); break; #endif #if defined(SUPPORT_32BPP) case 32: p = scrnmng.vram->ptr + (dr.srcpos * 4); q = (UINT8 *)surface->pixels + dr.dstpos; a = menuvram->alpha + dr.srcpos; salign = menuvram->width; dalign = dr.yalign - (dr.width * dr.xalign); do { x = 0; do { if (a[x] == 0) { *(UINT32 *)q = *(UINT32 *)(p + (x * 4)); } q += dr.xalign; } while(++x < dr.width); p += salign * 4; q += dalign; a += salign; } while(--dr.height); break; #endif } } SDL_UnlockSurface(surface); SDL_Flip(surface); }