diff options
Diffstat (limited to 'src/GPU3D.cpp')
-rw-r--r-- | src/GPU3D.cpp | 43 |
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; |