aboutsummaryrefslogtreecommitdiff
path: root/src/GPU3D.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/GPU3D.cpp')
-rw-r--r--src/GPU3D.cpp43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/GPU3D.cpp b/src/GPU3D.cpp
index fa1f576..9c02b2f 100644
--- a/src/GPU3D.cpp
+++ b/src/GPU3D.cpp
@@ -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 (!AbortFrame)
+ {
+ u32* rawline = CurrentRenderer->GetLine(line);
- if (RenderXPos == 0) return rawline;
+ if (RenderXPos == 0) return rawline;
- // apply X scroll
+ // 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];
+ 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;