mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-18 11:49:45 -06:00
GPU: forward BG0HOFS to internal rendering engine register for 3D layer scroll (only when the rendering engine is enabled).
fixes #840 thank you RSDuck and Hydr8gon for your insight into this.
This commit is contained in:
@ -181,6 +181,8 @@ u32 RenderClearAttr1, RenderClearAttr2;
|
||||
|
||||
bool RenderFrameIdentical;
|
||||
|
||||
u16 RenderXPos;
|
||||
|
||||
u32 ZeroDotWLimit;
|
||||
|
||||
u32 GXStat;
|
||||
@ -385,6 +387,8 @@ void Reset()
|
||||
FlushAttributes = 0;
|
||||
|
||||
ResetRenderingState();
|
||||
|
||||
RenderXPos = 0;
|
||||
}
|
||||
|
||||
void DoSavestate(Savestate* file)
|
||||
@ -430,6 +434,8 @@ void DoSavestate(Savestate* file)
|
||||
file->Var32(&RenderClearAttr1);
|
||||
file->Var32(&RenderClearAttr2);
|
||||
|
||||
file->Var16(&RenderXPos);
|
||||
|
||||
file->Var32(&ZeroDotWLimit);
|
||||
|
||||
file->Var32(&GXStat);
|
||||
@ -587,8 +593,6 @@ void DoSavestate(Savestate* file)
|
||||
}
|
||||
}
|
||||
|
||||
// probably not worth storing the vblank-latched Renderxxxxxx variables
|
||||
|
||||
CmdStallQueue->DoSavestate(file);
|
||||
file->Var32((u32*)&VertexPipeline);
|
||||
file->Var32((u32*)&NormalPipeline);
|
||||
@ -2564,14 +2568,48 @@ void VCount215()
|
||||
#endif
|
||||
}
|
||||
|
||||
void SetRenderXPos(u16 xpos)
|
||||
{
|
||||
if (!RenderingEnabled) return;
|
||||
|
||||
RenderXPos = xpos & 0x01FF;
|
||||
}
|
||||
|
||||
u32 ScrolledLine[256];
|
||||
|
||||
u32* GetLine(int line)
|
||||
{
|
||||
if (GPU::Renderer == 0) return SoftRenderer::GetLine(line);
|
||||
u32* rawline;
|
||||
|
||||
if (GPU::Renderer == 0) rawline = SoftRenderer::GetLine(line);
|
||||
#ifdef OGLRENDERER_ENABLED
|
||||
else return GLRenderer::GetLine(line);
|
||||
else rawline = GLRenderer::GetLine(line);
|
||||
#else
|
||||
return NULL;
|
||||
#endif
|
||||
|
||||
if (RenderXPos == 0) return rawline;
|
||||
|
||||
// apply X scroll
|
||||
|
||||
if (RenderXPos & 0x100)
|
||||
{
|
||||
int i = 0, j = RenderXPos;
|
||||
for (; j < 512; i++, j++)
|
||||
ScrolledLine[i] = 0;
|
||||
for (j = 0; i < 256; i++, j++)
|
||||
ScrolledLine[i] = rawline[j];
|
||||
}
|
||||
else
|
||||
{
|
||||
int i = 0, j = RenderXPos;
|
||||
for (; j < 256; i++, j++)
|
||||
ScrolledLine[i] = rawline[j];
|
||||
for (; i < 256; i++)
|
||||
ScrolledLine[i] = 0;
|
||||
}
|
||||
|
||||
return ScrolledLine;
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user