|
|
| version 1.1, 2003/11/21 06:51:12 | version 1.2, 2003/12/24 02:54:52 |
|---|---|
| Line 224 const BYTE *a; | Line 224 const BYTE *a; |
| } | } |
| SDL_LockSurface(surface); | SDL_LockSurface(surface); |
| if (calcdrawrect(surface, &dr, menuvram, &rt) == SUCCESS) { | if (calcdrawrect(surface, &dr, menuvram, &rt) == SUCCESS) { |
| if (scrnmng.bpp == 16) { | switch(scrnmng.bpp) { |
| p = scrnmng.vram->ptr + (dr.srcpos * 2); | #if defined(SUPPORT_16BPP) |
| q = (BYTE *)surface->pixels + dr.dstpos; | case 16: |
| a = menuvram->alpha + dr.srcpos; | p = scrnmng.vram->ptr + (dr.srcpos * 2); |
| salign = menuvram->width; | q = (BYTE *)surface->pixels + dr.dstpos; |
| dalign = dr.yalign - (dr.width * dr.xalign); | a = menuvram->alpha + dr.srcpos; |
| do { | salign = menuvram->width; |
| x = 0; | dalign = dr.yalign - (dr.width * dr.xalign); |
| do { | do { |
| if (a[x] == 0) { | x = 0; |
| *(UINT16 *)q = *(UINT16 *)(p + (x * 2)); | do { |
| } | if (a[x] == 0) { |
| q += dr.xalign; | *(UINT16 *)q = *(UINT16 *)(p + (x * 2)); |
| } while(++x < dr.width); | } |
| p += salign * 2; | q += dr.xalign; |
| q += dalign; | } while(++x < dr.width); |
| a += salign; | p += salign * 2; |
| } while(--dr.height); | q += dalign; |
| a += salign; | |
| } while(--dr.height); | |
| break; | |
| #endif | |
| #if defined(SUPPORT_24BPP) | |
| case 24: | |
| p = scrnmng.vram->ptr + (dr.srcpos * 3); | |
| 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) { | |
| 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 = (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) { | |
| *(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_UnlockSurface(surface); |
| Line 274 void scrnmng_surfunlock(const SCRNSURF * | Line 322 void scrnmng_surfunlock(const SCRNSURF * |
| BOOL scrnmng_entermenu(SCRNMENU *smenu) { | BOOL scrnmng_entermenu(SCRNMENU *smenu) { |
| int bpp; | |
| if (smenu == NULL) { | if (smenu == NULL) { |
| goto smem_err; | goto smem_err; |
| } | } |
| bpp = scrnmng.bpp; | |
| if (bpp == 32) { | |
| bpp = 24; | |
| } | |
| vram_destroy(scrnmng.vram); | vram_destroy(scrnmng.vram); |
| scrnmng.vram = vram_create(scrnmng.width, scrnmng.height, FALSE, bpp); | scrnmng.vram = vram_create(scrnmng.width, scrnmng.height, FALSE, |
| scrnmng.bpp); | |
| if (scrnmng.vram == NULL) { | if (scrnmng.vram == NULL) { |
| goto smem_err; | goto smem_err; |
| } | } |
| scrndraw_redraw(); | scrndraw_redraw(); |
| smenu->width = scrnmng.width; | smenu->width = scrnmng.width; |
| smenu->height = scrnmng.height; | smenu->height = scrnmng.height; |
| smenu->bpp = bpp; | smenu->bpp = (scrnmng.bpp == 32)?24:scrnmng.bpp; |
| return(SUCCESS); | return(SUCCESS); |
| smem_err: | smem_err: |
| Line 324 const BYTE *q; | Line 367 const BYTE *q; |
| } | } |
| SDL_LockSurface(surface); | SDL_LockSurface(surface); |
| if (calcdrawrect(surface, &dr, menuvram, rct) == SUCCESS) { | if (calcdrawrect(surface, &dr, menuvram, rct) == SUCCESS) { |
| if (scrnmng.bpp == 16) { | switch(scrnmng.bpp) { |
| p = scrnmng.vram->ptr + (dr.srcpos * 2); | #if defined(SUPPORT_16BPP) |
| q = menuvram->ptr + (dr.srcpos * 2); | case 16: |
| r = (BYTE *)surface->pixels + dr.dstpos; | p = scrnmng.vram->ptr + (dr.srcpos * 2); |
| a = menuvram->alpha + dr.srcpos; | q = menuvram->ptr + (dr.srcpos * 2); |
| salign = menuvram->width; | r = (BYTE *)surface->pixels + dr.dstpos; |
| dalign = dr.yalign - (dr.width * dr.xalign); | a = menuvram->alpha + dr.srcpos; |
| do { | salign = menuvram->width; |
| x = 0; | dalign = dr.yalign - (dr.width * dr.xalign); |
| do { | do { |
| if (a[x]) { | x = 0; |
| if (a[x] & 2) { | do { |
| *(UINT16 *)r = *(UINT16 *)(q + (x * 2)); | if (a[x]) { |
| } | if (a[x] & 2) { |
| else { | *(UINT16 *)r = *(UINT16 *)(q + (x * 2)); |
| a[x] = 0; | } |
| *(UINT16 *)r = *(UINT16 *)(p + (x * 2)); | else { |
| } | a[x] = 0; |
| } | *(UINT16 *)r = *(UINT16 *)(p + (x * 2)); |
| r += dr.xalign; | } |
| } while(++x < dr.width); | } |
| p += salign * 2; | r += dr.xalign; |
| q += salign * 2; | } while(++x < dr.width); |
| r += dalign; | p += salign * 2; |
| a += salign; | q += salign * 2; |
| } while(--dr.height); | 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 = (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) { | |
| 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 = (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) { | |
| ((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_UnlockSurface(surface); |