mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-26 07:39:56 -06:00
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
This commit is contained in:

committed by
GitHub

parent
88072a02c5
commit
4558be0d8e
@ -1228,11 +1228,11 @@ void VRAMWrite(u32 addr, T val)
|
||||
{
|
||||
switch (addr & 0x00E00000)
|
||||
{
|
||||
case 0x00000000: GPU::WriteVRAM_ABG<T>(addr, val); return;
|
||||
case 0x00200000: GPU::WriteVRAM_BBG<T>(addr, val); return;
|
||||
case 0x00400000: GPU::WriteVRAM_AOBJ<T>(addr, val); return;
|
||||
case 0x00600000: GPU::WriteVRAM_BOBJ<T>(addr, val); return;
|
||||
default: GPU::WriteVRAM_LCDC<T>(addr, val); return;
|
||||
case 0x00000000: NDS::GPU->WriteVRAM_ABG<T>(addr, val); return;
|
||||
case 0x00200000: NDS::GPU->WriteVRAM_BBG<T>(addr, val); return;
|
||||
case 0x00400000: NDS::GPU->WriteVRAM_AOBJ<T>(addr, val); return;
|
||||
case 0x00600000: NDS::GPU->WriteVRAM_BOBJ<T>(addr, val); return;
|
||||
default: NDS::GPU->WriteVRAM_LCDC<T>(addr, val); return;
|
||||
}
|
||||
}
|
||||
template <typename T>
|
||||
@ -1240,14 +1240,56 @@ T VRAMRead(u32 addr)
|
||||
{
|
||||
switch (addr & 0x00E00000)
|
||||
{
|
||||
case 0x00000000: return GPU::ReadVRAM_ABG<T>(addr);
|
||||
case 0x00200000: return GPU::ReadVRAM_BBG<T>(addr);
|
||||
case 0x00400000: return GPU::ReadVRAM_AOBJ<T>(addr);
|
||||
case 0x00600000: return GPU::ReadVRAM_BOBJ<T>(addr);
|
||||
default: return GPU::ReadVRAM_LCDC<T>(addr);
|
||||
case 0x00000000: return NDS::GPU->ReadVRAM_ABG<T>(addr);
|
||||
case 0x00200000: return NDS::GPU->ReadVRAM_BBG<T>(addr);
|
||||
case 0x00400000: return NDS::GPU->ReadVRAM_AOBJ<T>(addr);
|
||||
case 0x00600000: return NDS::GPU->ReadVRAM_BOBJ<T>(addr);
|
||||
default: return NDS::GPU->ReadVRAM_LCDC<T>(addr);
|
||||
}
|
||||
}
|
||||
|
||||
static u8 GPU3D_Read8(u32 addr) noexcept
|
||||
{
|
||||
return NDS::GPU->GPU3D.Read8(addr);
|
||||
}
|
||||
|
||||
static u16 GPU3D_Read16(u32 addr) noexcept
|
||||
{
|
||||
return NDS::GPU->GPU3D.Read16(addr);
|
||||
}
|
||||
|
||||
static u32 GPU3D_Read32(u32 addr) noexcept
|
||||
{
|
||||
return NDS::GPU->GPU3D.Read32(addr);
|
||||
}
|
||||
|
||||
static void GPU3D_Write8(u32 addr, u8 val) noexcept
|
||||
{
|
||||
NDS::GPU->GPU3D.Write8(addr, val);
|
||||
}
|
||||
|
||||
static void GPU3D_Write16(u32 addr, u16 val) noexcept
|
||||
{
|
||||
NDS::GPU->GPU3D.Write16(addr, val);
|
||||
}
|
||||
|
||||
static void GPU3D_Write32(u32 addr, u32 val) noexcept
|
||||
{
|
||||
NDS::GPU->GPU3D.Write32(addr, val);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static T GPU_ReadVRAM_ARM7(u32 addr) noexcept
|
||||
{
|
||||
return NDS::GPU->ReadVRAM_ARM7<T>(addr);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
static void GPU_WriteVRAM_ARM7(u32 addr, T val) noexcept
|
||||
{
|
||||
NDS::GPU->WriteVRAM_ARM7<T>(addr, val);
|
||||
}
|
||||
|
||||
u32 NDSCartSlot_ReadROMData()
|
||||
{ // TODO: Add a NDS* parameter, when NDS* is eventually implemented
|
||||
return NDS::NDSCartSlot->ReadROMData();
|
||||
@ -1273,12 +1315,12 @@ void* GetFuncForAddr(ARM* cpu, u32 addr, bool store, int size)
|
||||
{
|
||||
switch (size | store)
|
||||
{
|
||||
case 8: return (void*)GPU3D::Read8;
|
||||
case 9: return (void*)GPU3D::Write8;
|
||||
case 16: return (void*)GPU3D::Read16;
|
||||
case 17: return (void*)GPU3D::Write16;
|
||||
case 32: return (void*)GPU3D::Read32;
|
||||
case 33: return (void*)GPU3D::Write32;
|
||||
case 8: return (void*)GPU3D_Read8;
|
||||
case 9: return (void*)GPU3D_Write8;
|
||||
case 16: return (void*)GPU3D_Read16;
|
||||
case 17: return (void*)GPU3D_Write16;
|
||||
case 32: return (void*)GPU3D_Read32;
|
||||
case 33: return (void*)GPU3D_Write32;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1380,12 +1422,12 @@ void* GetFuncForAddr(ARM* cpu, u32 addr, bool store, int size)
|
||||
case 0x06800000:
|
||||
switch (size | store)
|
||||
{
|
||||
case 8: return (void*)GPU::ReadVRAM_ARM7<u8>;
|
||||
case 9: return (void*)GPU::WriteVRAM_ARM7<u8>;
|
||||
case 16: return (void*)GPU::ReadVRAM_ARM7<u16>;
|
||||
case 17: return (void*)GPU::WriteVRAM_ARM7<u16>;
|
||||
case 32: return (void*)GPU::ReadVRAM_ARM7<u32>;
|
||||
case 33: return (void*)GPU::WriteVRAM_ARM7<u32>;
|
||||
case 8: return (void*)GPU_ReadVRAM_ARM7<u8>;
|
||||
case 9: return (void*)GPU_WriteVRAM_ARM7<u8>;
|
||||
case 16: return (void*)GPU_ReadVRAM_ARM7<u16>;
|
||||
case 17: return (void*)GPU_WriteVRAM_ARM7<u16>;
|
||||
case 32: return (void*)GPU_ReadVRAM_ARM7<u32>;
|
||||
case 33: return (void*)GPU_WriteVRAM_ARM7<u32>;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user