aboutsummaryrefslogtreecommitdiff
path: root/src/GPU2D.cpp
diff options
context:
space:
mode:
authorJesse Talavera-Greenberg <jesse@jesse.tg>2023-11-09 15:54:51 -0500
committerGitHub <noreply@github.com>2023-11-09 21:54:51 +0100
commit4558be0d8eb79d276c89392b9410e6edb649db95 (patch)
tree3e2b37e31b38337adec64c5391e57ddf45af5d23 /src/GPU2D.cpp
parent88072a02c523e26390af6bd726608b3e567f996f (diff)
Refactor the GPU to be object-oriented (#1873)
* Refactor GPU3D to be an object - Who has two thumbs and is the sworn enemy of global state? This guy! * Refactor GPU itself to be an object - Wow, it's used in a lot of places - Also introduce a new `Melon` namespace for a few classes - I expect other classes will be moved into `Melon` over time * Change signature of Renderer3D::SetRenderSettings - Make it noexcept, and its argument const * Remove some stray whitespace
Diffstat (limited to 'src/GPU2D.cpp')
-rw-r--r--src/GPU2D.cpp49
1 files changed, 24 insertions, 25 deletions
diff --git a/src/GPU2D.cpp b/src/GPU2D.cpp
index d1f6beb..e892116 100644
--- a/src/GPU2D.cpp
+++ b/src/GPU2D.cpp
@@ -85,9 +85,8 @@ using Platform::LogLevel;
namespace GPU2D
{
-Unit::Unit(u32 num)
+Unit::Unit(u32 num, Melon::GPU& gpu) : Num(num), GPU(gpu)
{
- Num = num;
}
void Unit::Reset()
@@ -287,10 +286,10 @@ void Unit::Write8(u32 addr, u8 val)
return;
case 0x10:
- if (!Num) GPU3D::SetRenderXPos((GPU3D::RenderXPos & 0xFF00) | val);
+ if (!Num) GPU.GPU3D.SetRenderXPos((GPU.GPU3D.GetRenderXPos() & 0xFF00) | val);
break;
case 0x11:
- if (!Num) GPU3D::SetRenderXPos((GPU3D::RenderXPos & 0x00FF) | (val << 8));
+ if (!Num) GPU.GPU3D.SetRenderXPos((GPU.GPU3D.GetRenderXPos() & 0x00FF) | (val << 8));
break;
}
@@ -383,7 +382,7 @@ void Unit::Write16(u32 addr, u16 val)
return;
case 0x010:
- if (!Num) GPU3D::SetRenderXPos(val);
+ if (!Num) GPU.GPU3D.SetRenderXPos(val);
break;
case 0x068:
@@ -422,21 +421,21 @@ void Unit::Write16(u32 addr, u16 val)
case 0x026: BGRotD[0] = val; return;
case 0x028:
BGXRef[0] = (BGXRef[0] & 0xFFFF0000) | val;
- if (GPU::VCount < 192) BGXRefInternal[0] = BGXRef[0];
+ if (GPU.VCount < 192) BGXRefInternal[0] = BGXRef[0];
return;
case 0x02A:
if (val & 0x0800) val |= 0xF000;
BGXRef[0] = (BGXRef[0] & 0xFFFF) | (val << 16);
- if (GPU::VCount < 192) BGXRefInternal[0] = BGXRef[0];
+ if (GPU.VCount < 192) BGXRefInternal[0] = BGXRef[0];
return;
case 0x02C:
BGYRef[0] = (BGYRef[0] & 0xFFFF0000) | val;
- if (GPU::VCount < 192) BGYRefInternal[0] = BGYRef[0];
+ if (GPU.VCount < 192) BGYRefInternal[0] = BGYRef[0];
return;
case 0x02E:
if (val & 0x0800) val |= 0xF000;
BGYRef[0] = (BGYRef[0] & 0xFFFF) | (val << 16);
- if (GPU::VCount < 192) BGYRefInternal[0] = BGYRef[0];
+ if (GPU.VCount < 192) BGYRefInternal[0] = BGYRef[0];
return;
case 0x030: BGRotA[1] = val; return;
@@ -445,21 +444,21 @@ void Unit::Write16(u32 addr, u16 val)
case 0x036: BGRotD[1] = val; return;
case 0x038:
BGXRef[1] = (BGXRef[1] & 0xFFFF0000) | val;
- if (GPU::VCount < 192) BGXRefInternal[1] = BGXRef[1];
+ if (GPU.VCount < 192) BGXRefInternal[1] = BGXRef[1];
return;
case 0x03A:
if (val & 0x0800) val |= 0xF000;
BGXRef[1] = (BGXRef[1] & 0xFFFF) | (val << 16);
- if (GPU::VCount < 192) BGXRefInternal[1] = BGXRef[1];
+ if (GPU.VCount < 192) BGXRefInternal[1] = BGXRef[1];
return;
case 0x03C:
BGYRef[1] = (BGYRef[1] & 0xFFFF0000) | val;
- if (GPU::VCount < 192) BGYRefInternal[1] = BGYRef[1];
+ if (GPU.VCount < 192) BGYRefInternal[1] = BGYRef[1];
return;
case 0x03E:
if (val & 0x0800) val |= 0xF000;
BGYRef[1] = (BGYRef[1] & 0xFFFF) | (val << 16);
- if (GPU::VCount < 192) BGYRefInternal[1] = BGYRef[1];
+ if (GPU.VCount < 192) BGYRefInternal[1] = BGYRef[1];
return;
case 0x040:
@@ -541,23 +540,23 @@ void Unit::Write32(u32 addr, u32 val)
case 0x028:
if (val & 0x08000000) val |= 0xF0000000;
BGXRef[0] = val;
- if (GPU::VCount < 192) BGXRefInternal[0] = BGXRef[0];
+ if (GPU.VCount < 192) BGXRefInternal[0] = BGXRef[0];
return;
case 0x02C:
if (val & 0x08000000) val |= 0xF0000000;
BGYRef[0] = val;
- if (GPU::VCount < 192) BGYRefInternal[0] = BGYRef[0];
+ if (GPU.VCount < 192) BGYRefInternal[0] = BGYRef[0];
return;
case 0x038:
if (val & 0x08000000) val |= 0xF0000000;
BGXRef[1] = val;
- if (GPU::VCount < 192) BGXRefInternal[1] = BGXRef[1];
+ if (GPU.VCount < 192) BGXRefInternal[1] = BGXRef[1];
return;
case 0x03C:
if (val & 0x08000000) val |= 0xF0000000;
BGYRef[1] = val;
- if (GPU::VCount < 192) BGYRefInternal[1] = BGYRef[1];
+ if (GPU.VCount < 192) BGYRefInternal[1] = BGYRef[1];
return;
}
}
@@ -628,15 +627,15 @@ u16* Unit::GetBGExtPal(u32 slot, u32 pal)
const u32 PaletteSize = 256 * 2;
const u32 SlotSize = PaletteSize * 16;
return (u16*)&(Num == 0
- ? GPU::VRAMFlat_ABGExtPal
- : GPU::VRAMFlat_BBGExtPal)[slot * SlotSize + pal * PaletteSize];
+ ? GPU.VRAMFlat_ABGExtPal
+ : GPU.VRAMFlat_BBGExtPal)[slot * SlotSize + pal * PaletteSize];
}
u16* Unit::GetOBJExtPal()
{
return Num == 0
- ? (u16*)GPU::VRAMFlat_AOBJExtPal
- : (u16*)GPU::VRAMFlat_BOBJExtPal;
+ ? (u16*)GPU.VRAMFlat_AOBJExtPal
+ : (u16*)GPU.VRAMFlat_BOBJExtPal;
}
void Unit::CheckWindows(u32 line)
@@ -698,12 +697,12 @@ void Unit::GetBGVRAM(u8*& data, u32& mask)
{
if (Num == 0)
{
- data = GPU::VRAMFlat_ABG;
+ data = GPU.VRAMFlat_ABG;
mask = 0x7FFFF;
}
else
{
- data = GPU::VRAMFlat_BBG;
+ data = GPU.VRAMFlat_BBG;
mask = 0x1FFFF;
}
}
@@ -712,12 +711,12 @@ void Unit::GetOBJVRAM(u8*& data, u32& mask)
{
if (Num == 0)
{
- data = GPU::VRAMFlat_AOBJ;
+ data = GPU.VRAMFlat_AOBJ;
mask = 0x3FFFF;
}
else
{
- data = GPU::VRAMFlat_BOBJ;
+ data = GPU.VRAMFlat_BOBJ;
mask = 0x1FFFF;
}
}