X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2FDraw2.c;h=054cee972ebd2db88e3c99041c3184fbe664a040;hb=6a13ef3f56a80ac698d463f5d00235ea2a090f52;hp=3a511b2512cf5710b81f78073b09753dfd66d36b;hpb=9112b6ce9fd42ee46adb7e8148e587a7f60e35f4;p=picodrive.git diff --git a/Pico/Draw2.c b/Pico/Draw2.c index 3a511b2..054cee9 100644 --- a/Pico/Draw2.c +++ b/Pico/Draw2.c @@ -27,8 +27,6 @@ #define LINE_WIDTH 328 #endif -int currpri = 0; - static int HighCache2A[41*(TILE_ROWS+1)+1+1]; // caches for high layers static int HighCache2B[41*(TILE_ROWS+1)+1+1]; @@ -284,12 +282,8 @@ static void DrawLayerFull(int plane, int *hcache, int planestart, int planeend) code=Pico.vram[nametab_row+(tilex&xmask)]; if (code==blank) continue; -#ifdef USE_CACHE if (code>>15) { // high priority tile *hcache++ = code|(dx<<16)|(trow<<27); // cache it -#else - if ((code>>15) != currpri) { -#endif continue; } @@ -485,8 +479,7 @@ static void DrawAllSpritesFull(int prio, int maxwidth) #ifndef _ASM_DRAW_C static void BackFillFull(int reg7) { - unsigned int back, i; - unsigned int *p=(unsigned int *)PicoDraw2FB; + unsigned int back; // Start with a background color: // back=PicoCramHigh[reg7&0x3f]; @@ -494,16 +487,11 @@ static void BackFillFull(int reg7) back|=back<<8; back|=back<<16; - for(i = LINE_WIDTH*(8+(END_ROW-START_ROW)*8)/16; i; i--) { - *p++ = back; // do 16 pixels per iteration - *p++ = back; - *p++ = back; - *p++ = back; - } + memset32((int *)PicoDraw2FB, back, LINE_WIDTH*(8+(END_ROW-START_ROW)*8)/4); } #endif -static void DrawDisplayFull() +static void DrawDisplayFull(void) { struct PicoVideo *pvid=&Pico.video; int win, edge=0, hvwin=0; // LSb->MSb: hwin&plane, vwin&plane, full @@ -518,7 +506,8 @@ static void DrawDisplayFull() } // horizontal window? - if((win=pvid->reg[0x12])) { + if ((win=pvid->reg[0x12])) + { hvwin=1; // hwindow shares display with plane A edge=win&0x1f; if(win == 0x80) { @@ -537,7 +526,8 @@ static void DrawDisplayFull() } // check for vertical window, but only if win is not fullscreen - if(hvwin != 4) { + if (hvwin != 4) + { win=pvid->reg[0x11]; edge=win&0x1f; if (win&0x80) { @@ -561,15 +551,16 @@ static void DrawDisplayFull() } } - if(hvwin==1) { winend|=maxcolc<<16; planeend|=maxcolc<<16; } + if (hvwin==1) { winend|=maxcolc<<16; planeend|=maxcolc<<16; } - currpri = 0; - DrawLayerFull(1, HighCache2B, START_ROW, (maxcolc<<16)|END_ROW); - switch(hvwin) { + HighCache2A[1] = HighCache2B[1] = 0; + if (PicoDrawMask & PDRAW_LAYERB_ON) + DrawLayerFull(1, HighCache2B, START_ROW, (maxcolc<<16)|END_ROW); + if (PicoDrawMask & PDRAW_LAYERA_ON) switch (hvwin) + { case 4: // fullscreen window DrawWindowFull(START_ROW, (maxcolc<<16)|END_ROW, 0); - HighCache2A[1] = 0; break; case 3: @@ -591,12 +582,13 @@ static void DrawDisplayFull() DrawLayerFull(0, HighCache2A, START_ROW, (maxcolc<<16)|END_ROW); break; } - DrawAllSpritesFull(0, maxw); + if (PicoDrawMask & PDRAW_SPRITES_LOW_ON) + DrawAllSpritesFull(0, maxw); -#ifdef USE_CACHE - if(HighCache2B[1]) DrawTilesFromCacheF(HighCache2B); - if(HighCache2A[1]) DrawTilesFromCacheF(HighCache2A); - switch(hvwin) { + if (HighCache2B[1]) DrawTilesFromCacheF(HighCache2B); + if (HighCache2A[1]) DrawTilesFromCacheF(HighCache2A); + if (PicoDrawMask & PDRAW_LAYERA_ON) switch (hvwin) + { case 4: // fullscreen window DrawWindowFull(START_ROW, (maxcolc<<16)|END_ROW, 1); @@ -614,18 +606,15 @@ static void DrawDisplayFull() DrawWindowFull(winstart, winend, 1); break; } -#else - currpri = 1; - // TODO -#endif - DrawAllSpritesFull(1, maxw); + if (PicoDrawMask & PDRAW_SPRITES_HI_ON) + DrawAllSpritesFull(1, maxw); } PICO_INTERNAL void PicoFrameFull() { // prepare cram? - if(PicoPrepareCram) PicoPrepareCram(); + if (PicoPrepareCram) PicoPrepareCram(); // Draw screen: BackFillFull(Pico.video.reg[7]);