Changed sprite blitting to draw them directly on GPU_screen instead of a separate buffer.

We'll now be able to do proper sprite blending.
This commit is contained in:
luigi__ 2009-01-17 13:48:58 +00:00
parent f538364e3b
commit 17f285d455
2 changed files with 84 additions and 25 deletions

View File

@ -266,6 +266,8 @@ void GPU_Reset(GPU *g, u8 l)
g->spriteRender = sprite1D; g->spriteRender = sprite1D;
g->bgPrio[4] = 4;
if(g->core == GPU_SUB) if(g->core == GPU_SUB)
{ {
g->oam = (OAM *)(ARM9Mem.ARM9_OAM + ADDRESS_STEP_1KB); g->oam = (OAM *)(ARM9Mem.ARM9_OAM + ADDRESS_STEP_1KB);
@ -478,6 +480,8 @@ void GPU_setBGProp(GPU * gpu, u16 num, u16 p)
mode = mode2type[dispCnt->BG_Mode][num]; mode = mode2type[dispCnt->BG_Mode][num];
gpu->BGSize[num][0] = sizeTab[mode][cnt->ScreenSize][0]; gpu->BGSize[num][0] = sizeTab[mode][cnt->ScreenSize][0];
gpu->BGSize[num][1] = sizeTab[mode][cnt->ScreenSize][1]; gpu->BGSize[num][1] = sizeTab[mode][cnt->ScreenSize][1];
gpu->bgPrio[num] = (p & 0x3);
} }
/*****************************************************************************/ /*****************************************************************************/
@ -593,6 +597,7 @@ static BOOL setFinalBGColorSpecialNone (GPU *gpu, u32 passing, u8 bgnum, u8 *dst
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
return 1; return 1;
} }
@ -628,11 +633,13 @@ static BOOL setFinalBGColorSpecialBlend (GPU *gpu, u32 passing, u8 bgnum, u8 *ds
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
return 1; return 1;
@ -659,11 +666,13 @@ static BOOL setFinalBGColorSpecialIncrease (GPU *gpu, u32 passing, u8 bgnum, u8
T2WriteWord(dst, passing, color) ; T2WriteWord(dst, passing, color) ;
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
return 1; return 1;
@ -689,11 +698,13 @@ static BOOL setFinalBGColorSpecialDecrease (GPU *gpu, u32 passing, u8 bgnum, u8
} }
T2WriteWord(dst, passing, color) ; T2WriteWord(dst, passing, color) ;
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
return 1; return 1;
@ -709,6 +720,7 @@ static BOOL setFinalBGColorSpecialNoneWnd (GPU *gpu, u32 passing, u8 bgnum, u8 *
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
@ -716,6 +728,7 @@ static BOOL setFinalBGColorSpecialNoneWnd (GPU *gpu, u32 passing, u8 bgnum, u8 *
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
} }
@ -759,6 +772,7 @@ static BOOL setFinalBGColorSpecialBlendWnd (GPU *gpu, u32 passing, u8 bgnum, u8
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
@ -766,6 +780,7 @@ static BOOL setFinalBGColorSpecialBlendWnd (GPU *gpu, u32 passing, u8 bgnum, u8
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
} }
@ -797,6 +812,7 @@ static BOOL setFinalBGColorSpecialIncreaseWnd (GPU *gpu, u32 passing, u8 bgnum,
T2WriteWord(dst, passing, color) ; T2WriteWord(dst, passing, color) ;
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
@ -804,6 +820,7 @@ static BOOL setFinalBGColorSpecialIncreaseWnd (GPU *gpu, u32 passing, u8 bgnum,
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
} }
@ -834,6 +851,7 @@ static BOOL setFinalBGColorSpecialDecreaseWnd (GPU *gpu, u32 passing, u8 bgnum,
} }
T2WriteWord(dst, passing, color) ; T2WriteWord(dst, passing, color) ;
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
else else
{ {
@ -841,6 +859,7 @@ static BOOL setFinalBGColorSpecialDecreaseWnd (GPU *gpu, u32 passing, u8 bgnum,
{ {
T2WriteWord(dst, passing, color); T2WriteWord(dst, passing, color);
gpu->bgPixels[x] = bgnum; gpu->bgPixels[x] = bgnum;
gpu->bgPxPrio[x] = gpu->bgPrio[bgnum];
} }
} }
@ -855,6 +874,7 @@ static BOOL setFinal3DColorSpecialNone(GPU *gpu, u32 passing, u8 *dst, u16 color
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
return 1; return 1;
} }
@ -896,11 +916,13 @@ static BOOL setFinal3DColorSpecialBlend(GPU *gpu, u32 passing, u8 *dst, u16 colo
T2WriteWord(dst, passing, (final | 0x8000)); T2WriteWord(dst, passing, (final | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
return 1; return 1;
@ -917,11 +939,13 @@ static BOOL setFinal3DColorSpecialIncrease(GPU *gpu, u32 passing, u8 *dst, u16 c
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
return 1; return 1;
@ -938,11 +962,13 @@ static BOOL setFinal3DColorSpecialDecrease(GPU *gpu, u32 passing, u8 *dst, u16 c
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
return 1; return 1;
@ -958,6 +984,7 @@ static BOOL setFinal3DColorSpecialNoneWnd(GPU *gpu, u32 passing, u8 *dst, u16 co
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
return windowDraw; return windowDraw;
@ -1007,11 +1034,13 @@ static BOOL setFinal3DColorSpecialBlendWnd(GPU *gpu, u32 passing, u8 *dst, u16 c
T2WriteWord(dst, passing, (final | 0x8000)); T2WriteWord(dst, passing, (final | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
} }
@ -1035,11 +1064,13 @@ static BOOL setFinal3DColorSpecialIncreaseWnd(GPU *gpu, u32 passing, u8 *dst, u1
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
} }
@ -1063,11 +1094,13 @@ static BOOL setFinal3DColorSpecialDecreaseWnd(GPU *gpu, u32 passing, u8 *dst, u1
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
else else
{ {
T2WriteWord(dst, passing, (color | 0x8000)); T2WriteWord(dst, passing, (color | 0x8000));
gpu->bgPixels[x] = 0; gpu->bgPixels[x] = 0;
gpu->bgPxPrio[x] = gpu->bgPrio[0];
} }
} }
@ -1534,12 +1567,14 @@ INLINE void render_sprite_BMP (GPU * gpu, u16 l, u8 * dst, u16 * src, u8 * prioT
color = LE_TO_LOCAL_16(src[x]); color = LE_TO_LOCAL_16(src[x]);
// alpha bit = invisible // alpha bit = invisible
if ((color&0x8000)&&(prio<=prioTab[sprX])) /*if ((color&0x8000)&&(prio<=prioTab[sprX]))
{ {
/* if we don't draw, do not set prio, or else */ /* if we don't draw, do not set prio, or else *-/
if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX)) if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((color&0x8000) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX);
} }
} }
@ -1556,12 +1591,14 @@ INLINE void render_sprite_256 ( GPU * gpu, u16 l, u8 * dst, u8 * src, u16 * pal,
color = LE_TO_LOCAL_16(pal[palette_entry]); color = LE_TO_LOCAL_16(pal[palette_entry]);
// palette entry = 0 means backdrop // palette entry = 0 means backdrop
if ((palette_entry>0)&&(prio<=prioTab[sprX])) /*if ((palette_entry>0)&&(prio<=prioTab[sprX]))
{ {
/* if we don't draw, do not set prio, or else */ /* if we don't draw, do not set prio, or else *-/
if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX)) if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((palette_entry>0) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX);
} }
} }
@ -1581,12 +1618,14 @@ INLINE void render_sprite_16 ( GPU * gpu, u16 l, u8 * dst, u8 * src, u16 * pal,
color = LE_TO_LOCAL_16(pal[palette_entry]); color = LE_TO_LOCAL_16(pal[palette_entry]);
// palette entry = 0 means backdrop // palette entry = 0 means backdrop
if ((palette_entry>0)&&(prio<=prioTab[sprX])) /*if ((palette_entry>0)&&(prio<=prioTab[sprX]))
{ {
/* if we don't draw, do not set prio, or else */ /* if we don't draw, do not set prio, or else *-/
if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX )) if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX ))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((palette_entry>0) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, color, sprX);
} }
} }
@ -1790,11 +1829,13 @@ void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
offset = (auxX&0x7) + ((auxX&0xFFF8)<<3) + ((auxY>>3)*sprSize.x*8) + ((auxY&0x7)*8); offset = (auxX&0x7) + ((auxX&0xFFF8)<<3) + ((auxY>>3)*sprSize.x*8) + ((auxY&0x7)*8);
colour = src[offset]; colour = src[offset];
if (colour && (prioTab[sprX]>=prio)) /* if (colour && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX )) if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX ))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord(pal, colour<<1), sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -1825,11 +1866,13 @@ void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
offset = (auxX) + (auxY<<5); offset = (auxX) + (auxY<<5);
colour = T1ReadWord (src, offset<<1); colour = T1ReadWord (src, offset<<1);
if((colour&0x8000) && (prioTab[sprX]>=prio)) /*if((colour&0x8000) && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, colour, sprX)) if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, colour, sprX))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour&0x8000) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, colour, sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -1862,11 +1905,13 @@ void sprite1D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
if (auxX&1) colour >>= 4; if (auxX&1) colour >>= 4;
else colour &= 0xF; else colour &= 0xF;
if(colour && (prioTab[sprX]>=prio)) /* if(colour && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX )) if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX ))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord(pal, colour<<1), sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -2076,11 +2121,13 @@ void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
offset = (auxX&0x7) + ((auxX&0xFFF8)<<3) + ((auxY>>3)<<10) + ((auxY&0x7)*8); offset = (auxX&0x7) + ((auxX&0xFFF8)<<3) + ((auxY>>3)<<10) + ((auxY&0x7)*8);
colour = src[offset]; colour = src[offset];
if (colour && (prioTab[sprX]>=prio)) /* if (colour && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX )) if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, T1ReadWord(pal, colour<<1), sprX ))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord(pal, colour<<1), sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -2111,11 +2158,13 @@ void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
offset = auxX + (auxY<<8); offset = auxX + (auxY<<8);
colour = T1ReadWord(src, offset<<1); colour = T1ReadWord(src, offset<<1);
if((colour&0x8000) && (prioTab[sprX]>=prio)) /* if((colour&0x8000) && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, colour, sprX )) if (gpu->setFinalColorSpr(gpu, sprX << 1, 4, dst, colour, sprX ))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour&0x8000) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, colour, sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -2147,11 +2196,13 @@ void sprite2D(GPU * gpu, u16 l, u8 * dst, u8 * prioTab)
if (auxX&1) colour >>= 4; if (auxX&1) colour >>= 4;
else colour &= 0xF; else colour &= 0xF;
if(colour && (prioTab[sprX]>=prio)) /* if(colour && (prioTab[sprX]>=prio))
{ {
if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord (pal, colour<<1), sprX)) if (gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord (pal, colour<<1), sprX))
prioTab[sprX] = prio; prioTab[sprX] = prio;
} }*/
if ((colour) && (prio <= gpu->bgPxPrio[sprX]))
gpu->setFinalColorSpr(gpu, sprX << 1,4,dst, T1ReadWord(pal, colour<<1), sprX);
} }
// Add the rotation/scale coeficients, here the rotation/scaling // Add the rotation/scale coeficients, here the rotation/scaling
@ -2436,6 +2487,8 @@ static void GPU_ligne_layer(NDS_Screen * screen, u16 l)
/* reset them to backdrop */ /* reset them to backdrop */
memset(gpu->bgPixels, 5, 256); memset(gpu->bgPixels, 5, 256);
memset(gpu->bgPxPrio, 0xFF, 256);
if (!gpu->LayersEnable[0] && !gpu->LayersEnable[1] && if (!gpu->LayersEnable[0] && !gpu->LayersEnable[1] &&
!gpu->LayersEnable[2] && !gpu->LayersEnable[3] && !gpu->LayersEnable[2] && !gpu->LayersEnable[3] &&
!gpu->LayersEnable[4]) return; !gpu->LayersEnable[4]) return;
@ -2450,7 +2503,7 @@ static void GPU_ligne_layer(NDS_Screen * screen, u16 l)
} }
// for all the pixels in the line // for all the pixels in the line
if (gpu->LayersEnable[4]) /*if (gpu->LayersEnable[4])
{ {
for(int i = 0; i< 256; ++i) T2WriteWord(spr, i << 1, c); for(int i = 0; i< 256; ++i) T2WriteWord(spr, i << 1, c);
gpu->spriteRender(gpu, l, spr, sprPrio); gpu->spriteRender(gpu, l, spr, sprPrio);
@ -2465,7 +2518,7 @@ static void GPU_ligne_layer(NDS_Screen * screen, u16 l)
item->PixelsX[item->nbPixelsX]=i; item->PixelsX[item->nbPixelsX]=i;
item->nbPixelsX++; item->nbPixelsX++;
} }
} }*/
if (!gpu->LayersEnable[0] && !gpu->LayersEnable[1] && !gpu->LayersEnable[2] && !gpu->LayersEnable[3]) if (!gpu->LayersEnable[0] && !gpu->LayersEnable[1] && !gpu->LayersEnable[2] && !gpu->LayersEnable[3])
@ -2516,15 +2569,18 @@ static void GPU_ligne_layer(NDS_Screen * screen, u16 l)
} }
} }
// render sprite Pixels // render sprite Pixels
if (gpu->LayersEnable[4]) /* if (gpu->LayersEnable[4])
{ {
for (int i=0; i < item->nbPixelsX; i++) for (int i=0; i < item->nbPixelsX; i++)
{ {
i16=item->PixelsX[i]; i16=item->PixelsX[i];
T2WriteWord(dst, i16 << 1, T2ReadWord(spr, i16 << 1)); T2WriteWord(dst, i16 << 1, T2ReadWord(spr, i16 << 1));
} }
} }*/
} }
if(gpu->LayersEnable[4])
gpu->spriteRender(gpu, l, dst, sprPrio);
} }
// TODO: capture emulated not fully // TODO: capture emulated not fully

View File

@ -622,6 +622,8 @@ struct _GPU
BOOL dispBG[4]; BOOL dispBG[4];
BOOL dispOBJ; BOOL dispOBJ;
u8 bgPrio[5];
OAM * oam; OAM * oam;
u32 sprMem; u32 sprMem;
u8 sprBoundary; u8 sprBoundary;
@ -662,6 +664,7 @@ struct _GPU
u32 MasterBrightFactor; u32 MasterBrightFactor;
u8 bgPixels[256]; u8 bgPixels[256];
u8 bgPxPrio[256];
u8 currLine; u8 currLine;
BOOL (*setFinalColorSpr)(GPU *gpu, u32 passing, u8 bgnum, u8 *dst, u16 color, u16 x); BOOL (*setFinalColorSpr)(GPU *gpu, u32 passing, u8 bgnum, u8 *dst, u16 color, u16 x);