mirror of
https://github.com/melonDS-emu/melonDS.git
synced 2025-07-19 04:09:55 -06:00
handle changed VCount+threaded rasteriser more gracefully
This commit is contained in:
@ -275,6 +275,8 @@ u32 FlushAttributes;
|
||||
|
||||
std::unique_ptr<GPU3D::Renderer3D> CurrentRenderer = {};
|
||||
|
||||
bool AbortFrame;
|
||||
|
||||
bool Init()
|
||||
{
|
||||
return true;
|
||||
@ -380,6 +382,8 @@ void Reset()
|
||||
ResetRenderingState();
|
||||
|
||||
RenderXPos = 0;
|
||||
|
||||
AbortFrame = false;
|
||||
}
|
||||
|
||||
void DoSavestate(Savestate* file)
|
||||
@ -621,6 +625,8 @@ void DoSavestate(Savestate* file)
|
||||
|
||||
file->Bool32(&UseShininessTable);
|
||||
file->VarArray(ShininessTable, 128*sizeof(u8));
|
||||
|
||||
file->Bool32(&AbortFrame);
|
||||
}
|
||||
|
||||
|
||||
@ -2611,27 +2617,34 @@ u32 ScrolledLine[256];
|
||||
|
||||
u32* GetLine(int line)
|
||||
{
|
||||
u32* rawline = CurrentRenderer->GetLine(line);
|
||||
|
||||
if (RenderXPos == 0) return rawline;
|
||||
|
||||
// apply X scroll
|
||||
|
||||
if (RenderXPos & 0x100)
|
||||
if (!AbortFrame)
|
||||
{
|
||||
int i = 0, j = RenderXPos;
|
||||
for (; j < 512; i++, j++)
|
||||
ScrolledLine[i] = 0;
|
||||
for (j = 0; i < 256; i++, j++)
|
||||
ScrolledLine[i] = rawline[j];
|
||||
u32* rawline = CurrentRenderer->GetLine(line);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int i = 0, j = RenderXPos;
|
||||
for (; j < 256; i++, j++)
|
||||
ScrolledLine[i] = rawline[j];
|
||||
for (; i < 256; i++)
|
||||
ScrolledLine[i] = 0;
|
||||
memset(ScrolledLine, 0, 256*4);
|
||||
}
|
||||
|
||||
return ScrolledLine;
|
||||
|
Reference in New Issue
Block a user