GBA Video: Fix regression when fixing sprite blending

This commit is contained in:
Jeffrey Pfau 2015-09-17 19:42:09 -07:00
parent f6e0239cd3
commit bafcee7b18
3 changed files with 7 additions and 6 deletions

View File

@ -42,7 +42,7 @@ static inline void _compositeBlendObjwin(struct GBAVideoSoftwareRenderer* render
if (current & FLAG_TARGET_1 && color & FLAG_TARGET_2) {
color = _mix(renderer->blda, current, renderer->bldb, color);
} else {
color = current & (0x00FFFFFF | FLAG_TARGET_1);
color = (current & 0x00FFFFFF) | ((current >> 1) & FLAG_REBLEND);
}
} else {
color = (color & ~FLAG_TARGET_2) | (current & FLAG_OBJWIN);
@ -55,7 +55,7 @@ static inline void _compositeBlendNoObjwin(struct GBAVideoSoftwareRenderer* rend
if (current & FLAG_TARGET_1 && color & FLAG_TARGET_2) {
color = _mix(renderer->blda, current, renderer->bldb, color);
} else {
color = current & (0x00FFFFFF | FLAG_TARGET_1);
color = (current & 0x00FFFFFF) | ((current >> 1) & FLAG_REBLEND);
}
} else {
color = color & ~FLAG_TARGET_2;
@ -69,7 +69,7 @@ static inline void _compositeNoBlendObjwin(struct GBAVideoSoftwareRenderer* rend
if (color < current) {
color |= (current & FLAG_OBJWIN);
} else {
color = current & (0x00FFFFFF | FLAG_TARGET_1);
color = (current & 0x00FFFFFF) | ((current >> 1) & FLAG_REBLEND);
}
*pixel = color;
}
@ -78,7 +78,7 @@ static inline void _compositeNoBlendNoObjwin(struct GBAVideoSoftwareRenderer* re
uint32_t current) {
UNUSED(renderer);
if (color >= current) {
color = current & (0x00FFFFFF | FLAG_TARGET_1);
color = (current & 0x00FFFFFF) | ((current >> 1) & FLAG_REBLEND);
}
*pixel = color;
}

View File

@ -548,14 +548,14 @@ static void GBAVideoSoftwareRendererDrawScanline(struct GBAVideoRenderer* render
if (softwareRenderer->blendEffect == BLEND_DARKEN) {
for (; x < end; ++x) {
uint32_t color = softwareRenderer->row[x];
if (color & FLAG_TARGET_1 && !(color & FLAG_UNWRITTEN)) {
if ((color & 0xFF000000) == FLAG_REBLEND) {
softwareRenderer->row[x] = _darken(color, softwareRenderer->bldy);
}
}
} else if (softwareRenderer->blendEffect == BLEND_BRIGHTEN) {
for (; x < end; ++x) {
uint32_t color = softwareRenderer->row[x];
if (color & FLAG_TARGET_1 && !(color & FLAG_UNWRITTEN)) {
if ((color & 0xFF000000) == FLAG_REBLEND) {
softwareRenderer->row[x] = _brighten(color, softwareRenderer->bldy);
}
}

View File

@ -74,6 +74,7 @@ enum {
#define FLAG_TARGET_1 0x02000000
#define FLAG_TARGET_2 0x01000000
#define FLAG_OBJWIN 0x01000000
#define FLAG_REBLEND 0x01000000
#define FLAG_ORDER_MASK 0xF8000000
#define IS_WRITABLE(PIXEL) ((PIXEL) & 0xFE000000)