fix behavior for rotscale BG reference points
This commit is contained in:
parent
5c3b7b5c30
commit
a7e7af4b47
36
GPU2D.cpp
36
GPU2D.cpp
|
@ -26,6 +26,7 @@
|
||||||
//
|
//
|
||||||
// * BLDCNT special effects are applied on 18bit colors
|
// * BLDCNT special effects are applied on 18bit colors
|
||||||
// -> layers are converted to 18bit before being composited
|
// -> layers are converted to 18bit before being composited
|
||||||
|
// -> 'brightness up' effect does: x = x + (63-x)*factor
|
||||||
// * colors are converted as follows: 18bit = 15bit * 2
|
// * colors are converted as follows: 18bit = 15bit * 2
|
||||||
// -> white comes out as 62,62,62 and not 63,63,63
|
// -> white comes out as 62,62,62 and not 63,63,63
|
||||||
// * VRAM/FIFO display modes convert colors the same way
|
// * VRAM/FIFO display modes convert colors the same way
|
||||||
|
@ -76,8 +77,10 @@ void GPU2D::Reset()
|
||||||
memset(BGCnt, 0, 4*2);
|
memset(BGCnt, 0, 4*2);
|
||||||
memset(BGXPos, 0, 4*2);
|
memset(BGXPos, 0, 4*2);
|
||||||
memset(BGYPos, 0, 4*2);
|
memset(BGYPos, 0, 4*2);
|
||||||
memset(BGXCenter, 0, 2*4);
|
memset(BGXRef, 0, 2*4);
|
||||||
memset(BGYCenter, 0, 2*4);
|
memset(BGYRef, 0, 2*4);
|
||||||
|
memset(BGXRefInternal, 0, 2*4);
|
||||||
|
memset(BGYRefInternal, 0, 2*4);
|
||||||
memset(BGRotA, 0, 2*2);
|
memset(BGRotA, 0, 2*2);
|
||||||
memset(BGRotB, 0, 2*2);
|
memset(BGRotB, 0, 2*2);
|
||||||
memset(BGRotC, 0, 2*2);
|
memset(BGRotC, 0, 2*2);
|
||||||
|
@ -209,20 +212,24 @@ void GPU2D::Write32(u32 addr, u32 val)
|
||||||
|
|
||||||
case 0x028:
|
case 0x028:
|
||||||
if (val & 0x08000000) val |= 0xF0000000;
|
if (val & 0x08000000) val |= 0xF0000000;
|
||||||
BGXCenter[0] = val;
|
BGXRef[0] = val;
|
||||||
|
if (GPU::VCount < 192) BGXRefInternal[0] = val;
|
||||||
return;
|
return;
|
||||||
case 0x02C:
|
case 0x02C:
|
||||||
if (val & 0x08000000) val |= 0xF0000000;
|
if (val & 0x08000000) val |= 0xF0000000;
|
||||||
BGYCenter[0] = val;
|
BGYRef[0] = val;
|
||||||
|
if (GPU::VCount < 192) BGYRefInternal[0] = val;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0x038:
|
case 0x038:
|
||||||
if (val & 0x08000000) val |= 0xF0000000;
|
if (val & 0x08000000) val |= 0xF0000000;
|
||||||
BGXCenter[1] = val;
|
BGXRef[1] = val;
|
||||||
|
if (GPU::VCount < 192) BGXRefInternal[1] = val;
|
||||||
return;
|
return;
|
||||||
case 0x03C:
|
case 0x03C:
|
||||||
if (val & 0x08000000) val |= 0xF0000000;
|
if (val & 0x08000000) val |= 0xF0000000;
|
||||||
BGYCenter[1] = val;
|
BGYRef[1] = val;
|
||||||
|
if (GPU::VCount < 192) BGYRefInternal[1] = val;
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 0x064:
|
case 0x064:
|
||||||
|
@ -366,6 +373,11 @@ void GPU2D::DrawScanline(u32 line)
|
||||||
|
|
||||||
void GPU2D::VBlank()
|
void GPU2D::VBlank()
|
||||||
{
|
{
|
||||||
|
BGXRefInternal[0] = BGXRef[0];
|
||||||
|
BGXRefInternal[1] = BGXRef[1];
|
||||||
|
BGYRefInternal[0] = BGYRef[0];
|
||||||
|
BGYRefInternal[1] = BGYRef[1];
|
||||||
|
|
||||||
CaptureCnt &= ~(1<<31);
|
CaptureCnt &= ~(1<<31);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -973,12 +985,8 @@ void GPU2D::DrawBG_Extended(u32 line, u32* dst, u32 bgnum)
|
||||||
s16 rotC = BGRotC[bgnum-2];
|
s16 rotC = BGRotC[bgnum-2];
|
||||||
s16 rotD = BGRotD[bgnum-2];
|
s16 rotD = BGRotD[bgnum-2];
|
||||||
|
|
||||||
s32 rotX = BGXCenter[bgnum-2];
|
s32 rotX = BGXRefInternal[bgnum-2];
|
||||||
s32 rotY = BGYCenter[bgnum-2];
|
s32 rotY = BGYRefInternal[bgnum-2];
|
||||||
|
|
||||||
// hax
|
|
||||||
rotX += line*rotB;
|
|
||||||
rotY += line*rotD;
|
|
||||||
|
|
||||||
if (bgcnt & 0x0080)
|
if (bgcnt & 0x0080)
|
||||||
{
|
{
|
||||||
|
@ -1081,8 +1089,8 @@ void GPU2D::DrawBG_Extended(u32 line, u32* dst, u32 bgnum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//BGXCenter[bgnum-2] += rotB;
|
BGXRefInternal[bgnum-2] += rotB;
|
||||||
//BGYCenter[bgnum-2] += rotD;
|
BGYRefInternal[bgnum-2] += rotD;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU2D::InterleaveSprites(u32* buf, u32 prio, u32* dst)
|
void GPU2D::InterleaveSprites(u32* buf, u32 prio, u32* dst)
|
||||||
|
|
6
GPU2D.h
6
GPU2D.h
|
@ -55,8 +55,10 @@ private:
|
||||||
u16 BGXPos[4];
|
u16 BGXPos[4];
|
||||||
u16 BGYPos[4];
|
u16 BGYPos[4];
|
||||||
|
|
||||||
s32 BGXCenter[2];
|
s32 BGXRef[2];
|
||||||
s32 BGYCenter[2];
|
s32 BGYRef[2];
|
||||||
|
s32 BGXRefInternal[2];
|
||||||
|
s32 BGYRefInternal[2];
|
||||||
s16 BGRotA[2];
|
s16 BGRotA[2];
|
||||||
s16 BGRotB[2];
|
s16 BGRotB[2];
|
||||||
s16 BGRotC[2];
|
s16 BGRotC[2];
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
1481161027 c:\documents\sources\melonds\types.h
|
1481161027 c:\documents\sources\melonds\types.h
|
||||||
|
|
||||||
1488497660 source:c:\documents\sources\melonds\nds.cpp
|
1488589906 source:c:\documents\sources\melonds\nds.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
|
@ -87,13 +87,13 @@
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"SPI.h"
|
"SPI.h"
|
||||||
|
|
||||||
1488477220 source:c:\documents\sources\melonds\gpu2d.cpp
|
1488589055 source:c:\documents\sources\melonds\gpu2d.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"GPU.h"
|
"GPU.h"
|
||||||
|
|
||||||
1488475640 c:\documents\sources\melonds\gpu2d.h
|
1488590210 c:\documents\sources\melonds\gpu2d.h
|
||||||
|
|
||||||
1481040524 c:\documents\sources\melonds\wifi.h
|
1481040524 c:\documents\sources\melonds\wifi.h
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@
|
||||||
1486511075 c:\documents\sources\melonds\fifo.h
|
1486511075 c:\documents\sources\melonds\fifo.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1488497840 source:c:\documents\sources\melonds\dma.cpp
|
1488589063 source:c:\documents\sources\melonds\dma.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
"DMA.h"
|
"DMA.h"
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
1487305393 c:\documents\sources\melonds\dma.h
|
1487305393 c:\documents\sources\melonds\dma.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1488496264 source:c:\documents\sources\melonds\gpu.cpp
|
1488589923 source:c:\documents\sources\melonds\gpu.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
|
@ -140,7 +140,7 @@
|
||||||
1486506409 c:\documents\sources\melonds\ndscart.h
|
1486506409 c:\documents\sources\melonds\ndscart.h
|
||||||
"types.h"
|
"types.h"
|
||||||
|
|
||||||
1488496264 source:c:\documents\sources\melonds\ndscart.cpp
|
1488586265 source:c:\documents\sources\melonds\ndscart.cpp
|
||||||
<stdio.h>
|
<stdio.h>
|
||||||
<string.h>
|
<string.h>
|
||||||
"NDS.h"
|
"NDS.h"
|
||||||
|
|
Loading…
Reference in New Issue