mirror of https://github.com/mgba-emu/mgba.git
Move mode 0 loops out of macros
This commit is contained in:
parent
76f02be757
commit
76266a4ee7
|
@ -677,123 +677,6 @@ static void _composite(struct GBAVideoSoftwareRenderer* renderer, int offset, ui
|
||||||
localY = 7 - (inY & 0x7); \
|
localY = 7 - (inY & 0x7); \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define BACKGROUND_MODE_0_TILE_16_LOOP \
|
|
||||||
uint32_t tileData; \
|
|
||||||
uint32_t current; \
|
|
||||||
int paletteData, pixelData; \
|
|
||||||
for (; tileX < tileEnd; ++tileX) { \
|
|
||||||
BACKGROUND_TEXT_SELECT_CHARACTER; \
|
|
||||||
paletteData = mapData.palette << 4; \
|
|
||||||
charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY; \
|
|
||||||
tileData = ((uint32_t*)renderer->d.vram)[charBase]; \
|
|
||||||
if (tileData) { \
|
|
||||||
if (!mapData.hflip) { \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
++outX; \
|
|
||||||
} else { \
|
|
||||||
outX += 7; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_16; \
|
|
||||||
outX += 8; \
|
|
||||||
} \
|
|
||||||
} else { \
|
|
||||||
outX += 8; \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define BACKGROUND_MODE_0_TILE_256_LOOP \
|
|
||||||
uint32_t tileData; \
|
|
||||||
uint32_t current; \
|
|
||||||
int pixelData; \
|
|
||||||
for (; tileX < tileEnd; ++tileX) { \
|
|
||||||
BACKGROUND_TEXT_SELECT_CHARACTER; \
|
|
||||||
charBase = ((background->charBase + (mapData.tile << 6)) >> 2) + (localY << 1); \
|
|
||||||
if (!mapData.hflip) { \
|
|
||||||
tileData = ((uint32_t*)renderer->d.vram)[charBase]; \
|
|
||||||
if (tileData) { \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
} else { \
|
|
||||||
outX += 4; \
|
|
||||||
} \
|
|
||||||
tileData = ((uint32_t*)renderer->d.vram)[charBase + 1]; \
|
|
||||||
if (tileData) { \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
++outX; \
|
|
||||||
} else { \
|
|
||||||
outX += 4; \
|
|
||||||
} \
|
|
||||||
} else { \
|
|
||||||
uint32_t tileData = ((uint32_t*)renderer->d.vram)[charBase + 1]; \
|
|
||||||
if (tileData) { \
|
|
||||||
outX += 3; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
outX += 4; \
|
|
||||||
} else { \
|
|
||||||
outX += 4; \
|
|
||||||
} \
|
|
||||||
tileData = ((uint32_t*)renderer->d.vram)[charBase]; \
|
|
||||||
if (tileData) { \
|
|
||||||
outX += 3; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
--outX; \
|
|
||||||
BACKGROUND_DRAW_PIXEL_256; \
|
|
||||||
outX += 4; \
|
|
||||||
} else { \
|
|
||||||
outX += 4; \
|
|
||||||
} \
|
|
||||||
} \
|
|
||||||
}
|
|
||||||
|
|
||||||
#define PREPARE_OBJWIN \
|
#define PREPARE_OBJWIN \
|
||||||
int objwinSlowPath = renderer->dispcnt.objwinEnable; \
|
int objwinSlowPath = renderer->dispcnt.objwinEnable; \
|
||||||
int objwinOnly = 0; \
|
int objwinOnly = 0; \
|
||||||
|
@ -957,9 +840,120 @@ static void _drawBackgroundMode0(struct GBAVideoSoftwareRenderer* renderer, stru
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!background->multipalette) {
|
if (!background->multipalette) {
|
||||||
BACKGROUND_MODE_0_TILE_16_LOOP;
|
uint32_t tileData;
|
||||||
|
uint32_t current;
|
||||||
|
int paletteData, pixelData;
|
||||||
|
for (; tileX < tileEnd; ++tileX) {
|
||||||
|
BACKGROUND_TEXT_SELECT_CHARACTER;
|
||||||
|
paletteData = mapData.palette << 4;
|
||||||
|
charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY;
|
||||||
|
tileData = ((uint32_t*)renderer->d.vram)[charBase];
|
||||||
|
if (tileData) {
|
||||||
|
if (!mapData.hflip) {
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
++outX;
|
||||||
|
} else {
|
||||||
|
outX += 7;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_16;
|
||||||
|
outX += 8;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
outX += 8;
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
BACKGROUND_MODE_0_TILE_256_LOOP;
|
uint32_t tileData;
|
||||||
|
uint32_t current;
|
||||||
|
int pixelData;
|
||||||
|
for (; tileX < tileEnd; ++tileX) {
|
||||||
|
BACKGROUND_TEXT_SELECT_CHARACTER;
|
||||||
|
charBase = ((background->charBase + (mapData.tile << 6)) >> 2) + (localY << 1);
|
||||||
|
if (!mapData.hflip) {
|
||||||
|
tileData = ((uint32_t*)renderer->d.vram)[charBase];
|
||||||
|
if (tileData) {
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
} else {
|
||||||
|
outX += 4;
|
||||||
|
}
|
||||||
|
tileData = ((uint32_t*)renderer->d.vram)[charBase + 1];
|
||||||
|
if (tileData) {
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
++outX;
|
||||||
|
} else {
|
||||||
|
outX += 4;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
uint32_t tileData = ((uint32_t*)renderer->d.vram)[charBase + 1];
|
||||||
|
if (tileData) {
|
||||||
|
outX += 3;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
outX += 4;
|
||||||
|
} else {
|
||||||
|
outX += 4;
|
||||||
|
}
|
||||||
|
tileData = ((uint32_t*)renderer->d.vram)[charBase];
|
||||||
|
if (tileData) {
|
||||||
|
outX += 3;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
--outX;
|
||||||
|
BACKGROUND_DRAW_PIXEL_256;
|
||||||
|
outX += 4;
|
||||||
|
} else {
|
||||||
|
outX += 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue