Diff for /np2/sdl/scrnmng.c between versions 1.1 and 1.2

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);

Removed from v.1.1  
changed lines
  Added in v.1.2


RetroPC.NET-CVS <cvs@retropc.net>