mirror of https://github.com/mgba-emu/mgba.git
DS Video: Possibly fix 2D/3D blending alpha values, I really need to make tests
This commit is contained in:
parent
e472ca5b6c
commit
76b8916dfe
|
@ -407,9 +407,7 @@ static void DSVideoSoftwareRendererDrawGBAScanline(struct GBAVideoRenderer* rend
|
||||||
if (DSRegisterDISPCNTIs3D(softwareRenderer->dispcnt) && gx) {
|
if (DSRegisterDISPCNTIs3D(softwareRenderer->dispcnt) && gx) {
|
||||||
const color_t* scanline;
|
const color_t* scanline;
|
||||||
gx->renderer->getScanline(gx->renderer, y, &scanline);
|
gx->renderer->getScanline(gx->renderer, y, &scanline);
|
||||||
uint32_t flags = (softwareRenderer->bg[0].priority << OFFSET_PRIORITY) | FLAG_IS_BACKGROUND;
|
uint32_t flags = (softwareRenderer->bg[0].priority << OFFSET_PRIORITY) | FLAG_IS_BACKGROUND | FLAG_TARGET_1 | FLAG_TARGET_2;
|
||||||
flags |= FLAG_TARGET_2 * softwareRenderer->bg[0].target2;
|
|
||||||
flags |= FLAG_TARGET_1 * (softwareRenderer->bg[0].target1 && softwareRenderer->blendEffect == BLEND_ALPHA && GBAWindowControlIsBlendEnable(softwareRenderer->currentWindow.packed));
|
|
||||||
int x;
|
int x;
|
||||||
for (x = softwareRenderer->start; x < softwareRenderer->end; ++x) {
|
for (x = softwareRenderer->start; x < softwareRenderer->end; ++x) {
|
||||||
color_t color = scanline[x];
|
color_t color = scanline[x];
|
||||||
|
@ -425,12 +423,11 @@ static void DSVideoSoftwareRendererDrawGBAScanline(struct GBAVideoRenderer* rend
|
||||||
// TODO: More precise values
|
// TODO: More precise values
|
||||||
softwareRenderer->alphaA[x] = (color >> 28) + 1;
|
softwareRenderer->alphaA[x] = (color >> 28) + 1;
|
||||||
softwareRenderer->alphaB[x] = 0xF - (color >> 28);
|
softwareRenderer->alphaB[x] = 0xF - (color >> 28);
|
||||||
_compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags | FLAG_TARGET_1, softwareRenderer->row[x]);
|
_compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]);
|
||||||
} else {
|
} else {
|
||||||
if (!(flags & FLAG_TARGET_2) || !(softwareRenderer->row[x] & FLAG_TARGET_1)) {
|
if (!(softwareRenderer->row[x] & FLAG_TARGET_1)) {
|
||||||
_compositeNoBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]);
|
_compositeNoBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]);
|
||||||
} else if (softwareRenderer->row[x] & FLAG_TARGET_1) {
|
} else {
|
||||||
softwareRenderer->alphaB[x] = 0x10;
|
|
||||||
_compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]);
|
_compositeBlendNoObjwin(softwareRenderer, x, (color & 0x00FFFFFF) | flags, softwareRenderer->row[x]);
|
||||||
}
|
}
|
||||||
softwareRenderer->alphaA[x] = 0x10;
|
softwareRenderer->alphaA[x] = 0x10;
|
||||||
|
|
Loading…
Reference in New Issue