Support hflip on mode 0 edges

This commit is contained in:
Jeffrey Pfau 2013-05-02 21:51:00 -07:00
parent ebb1c08840
commit 1c6fc26bf7
1 changed files with 37 additions and 11 deletions

View File

@ -540,15 +540,28 @@ static void _drawBackgroundMode0(struct GBAVideoSoftwareRenderer* renderer, stru
uint32_t tileData; uint32_t tileData;
BACKGROUND_TEXT_SELECT_CHARACTER; BACKGROUND_TEXT_SELECT_CHARACTER;
charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY; charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY;
tileData = ((uint32_t*)renderer->d.vram)[charBase]; tileData = ((uint32_t*)renderer->d.vram)[charBase];
tileData >>= 4 * (inX & 0x7); if (!mapData.hflip) {
if (!variant) { tileData >>= 4 * (inX & 0x7);
for (outX = 0; outX < end; ++outX) { if (!variant) {
BACKGROUND_DRAW_PIXEL_16_NORMAL; for (outX = 0; outX < end; ++outX) {
BACKGROUND_DRAW_PIXEL_16_NORMAL;
}
} else {
for (outX = 0; outX < end; ++outX) {
BACKGROUND_DRAW_PIXEL_16_VARIANT;
}
} }
} else { } else {
for (outX = 0; outX < end; ++outX) { if (!variant) {
BACKGROUND_DRAW_PIXEL_16_VARIANT; for (outX = end; outX--;) {
BACKGROUND_DRAW_PIXEL_16_NORMAL;
}
} else {
for (outX = end; outX--;) {
BACKGROUND_DRAW_PIXEL_16_VARIANT;
}
} }
} }
@ -556,13 +569,26 @@ static void _drawBackgroundMode0(struct GBAVideoSoftwareRenderer* renderer, stru
BACKGROUND_TEXT_SELECT_CHARACTER; BACKGROUND_TEXT_SELECT_CHARACTER;
charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY; charBase = ((background->charBase + (mapData.tile << 5)) >> 2) + localY;
tileData = ((uint32_t*)renderer->d.vram)[charBase]; tileData = ((uint32_t*)renderer->d.vram)[charBase];
if (!variant) { if (!mapData.hflip) {
for (outX = VIDEO_HORIZONTAL_PIXELS - 8 + end; outX < VIDEO_HORIZONTAL_PIXELS; ++outX) { if (!variant) {
BACKGROUND_DRAW_PIXEL_16_NORMAL; for (outX = VIDEO_HORIZONTAL_PIXELS - 8 + end; outX < VIDEO_HORIZONTAL_PIXELS; ++outX) {
BACKGROUND_DRAW_PIXEL_16_NORMAL;
}
} else {
for (outX = VIDEO_HORIZONTAL_PIXELS - 8 + end; outX < VIDEO_HORIZONTAL_PIXELS; ++outX) {
BACKGROUND_DRAW_PIXEL_16_VARIANT;
}
} }
} else { } else {
for (outX = VIDEO_HORIZONTAL_PIXELS - 8 + end; outX < VIDEO_HORIZONTAL_PIXELS; ++outX) { tileData >>= 4 * end;
BACKGROUND_DRAW_PIXEL_16_VARIANT; if (!variant) {
for (outX = VIDEO_HORIZONTAL_PIXELS - 1; outX > VIDEO_HORIZONTAL_PIXELS - 8; --outX) {
BACKGROUND_DRAW_PIXEL_16_NORMAL;
}
} else {
for (outX = VIDEO_HORIZONTAL_PIXELS - 1; outX > VIDEO_HORIZONTAL_PIXELS - 8; --outX) {
BACKGROUND_DRAW_PIXEL_16_VARIANT;
}
} }
} }