Skip to content

Commit

Permalink
do the previous commit again but better
Browse files Browse the repository at this point in the history
  • Loading branch information
Jaklyy committed Aug 26, 2024
1 parent 54cf2cf commit fdf0fa2
Show file tree
Hide file tree
Showing 10 changed files with 64 additions and 19 deletions.
15 changes: 1 addition & 14 deletions src/GPU3D.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -569,20 +569,7 @@ void GPU3D::DoSavestate(Savestate* file) noexcept
}

// save any renderer state that can persist through frames
if (softRenderer)
{
file->VarArray(softRenderer->StencilBuffer, sizeof(SoftRenderer::StencilBuffer));
file->VarArray(softRenderer->ShadowRendered, sizeof(SoftRenderer::ShadowRendered));
file->VarArray(softRenderer->ShadowRenderedi, sizeof(SoftRenderer::ShadowRenderedi));
}
else
{
u8 ph[256*2] {};
// placeholders for renderers that don't support the same variables
file->VarArray(ph, sizeof(SoftRenderer::StencilBuffer));
file->VarArray(ph, sizeof(SoftRenderer::ShadowRendered));
file->VarArray(ph, sizeof(SoftRenderer::ShadowRenderedi));
}
CurrentRenderer->DoSavestate(file);

if (softRenderer && softRenderer->IsThreaded())
{
Expand Down
1 change: 1 addition & 0 deletions src/GPU3D.h
Original file line number Diff line number Diff line change
Expand Up @@ -346,6 +346,7 @@ class Renderer3D
Renderer3D& operator=(const Renderer3D&) = delete;

virtual void Reset(GPU& gpu) = 0;
virtual void DoSavestate(Savestate* file) = 0;

// This "Accelerated" flag currently communicates if the framebuffer should
// be allocated differently and other little misc handlers. Ideally there
Expand Down
17 changes: 17 additions & 0 deletions src/GPU3D_Compute.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,23 @@ void ComputeRenderer::Reset(GPU& gpu)
Texcache.Reset();
}

void ComputeRenderer::DoSavestate(Savestate* file)
{
// placeholder in case we need to add anything serializable later on
/*
bool secfound = file->Section("CR3D", true);
if (secfound)
{
}
else
{
}
*/
}

void ComputeRenderer::SetRenderSettings(int scale, bool highResolutionCoordinates)
{
CurGLCompositor.SetScaleFactor(scale);
Expand Down
1 change: 1 addition & 0 deletions src/GPU3D_Compute.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ class ComputeRenderer : public Renderer3D
~ComputeRenderer() override;

void Reset(GPU& gpu) override;
void DoSavestate(Savestate* file) override;

void SetRenderSettings(int scale, bool highResolutionCoordinates);

Expand Down
17 changes: 17 additions & 0 deletions src/GPU3D_OpenGL.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -317,6 +317,23 @@ void GLRenderer::Reset(GPU& gpu)
// except there's no such method right now.
}

void GLRenderer::DoSavestate(Savestate* file)
{
// placeholder in case we need to add anything serializable later on
/*
bool secfound = file->Section("GL3D", true);
if (secfound)
{
}
else
{
}
*/
}

void GLRenderer::SetBetterPolygons(bool betterpolygons) noexcept
{
SetRenderSettings(betterpolygons, ScaleFactor);
Expand Down
1 change: 1 addition & 0 deletions src/GPU3D_OpenGL.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ class GLRenderer : public Renderer3D
public:
~GLRenderer() override;
void Reset(GPU& gpu) override;
void DoSavestate(Savestate* file) override;

void SetRenderSettings(bool betterpolygons, int scale) noexcept;
void SetBetterPolygons(bool betterpolygons) noexcept;
Expand Down
18 changes: 18 additions & 0 deletions src/GPU3D_Soft.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,24 @@ void SoftRenderer::Reset(GPU& gpu)
EnableRenderThread();
}

void SoftRenderer::DoSavestate(Savestate* file)
{
bool secfound = file->Section("SW3D", true);

if (secfound)
{
file->VarArray(StencilBuffer, sizeof(StencilBuffer));
file->VarArray(ShadowRendered, sizeof(ShadowRendered));
file->VarArray(ShadowRenderedi, sizeof(ShadowRenderedi));
}
else
{
memset(StencilBuffer, 0, sizeof(StencilBuffer));
memset(ShadowRendered, 0, sizeof(ShadowRendered));
memset(ShadowRenderedi, 0, sizeof(ShadowRenderedi));
}
}

void SoftRenderer::SetThreaded(bool threaded, GPU& gpu) noexcept
{
if (Threaded != threaded)
Expand Down
1 change: 1 addition & 0 deletions src/GPU3D_Soft.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ class SoftRenderer : public Renderer3D
SoftRenderer() noexcept;
~SoftRenderer() override;
void Reset(GPU& gpu) override;
void DoSavestate(Savestate* file) override;

void SetThreaded(bool threaded, GPU& gpu) noexcept;
[[nodiscard]] bool IsThreaded() const noexcept { return Threaded; }
Expand Down
10 changes: 6 additions & 4 deletions src/Savestate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -153,9 +153,9 @@ Savestate::~Savestate()
}
}

void Savestate::Section(const char* magic)
bool Savestate::Section(const char* magic, bool noerror)
{
if (Error || finished) return;
if (Error || finished) return false;

if (Saving)
{
Expand All @@ -174,6 +174,7 @@ void Savestate::Section(const char* magic)
// The 8 bytes afterward are reserved, so we skip them.
Var32(&zero);
Var32(&zero);
return true;
}
else
{
Expand All @@ -182,12 +183,14 @@ void Savestate::Section(const char* magic)
if (section_offset != NO_SECTION)
{
buffer_offset = section_offset;
return true;
}
else
else if (!noerror)
{
Log(LogLevel::Error, "savestate: section %s not found. blarg\n", magic);
Error = true;
}
return false;
}
}

Expand Down Expand Up @@ -378,7 +381,6 @@ u32 Savestate::FindSection(const char* magic) const
}

// We've reached the end of the file without finding the requested section...
Log(LogLevel::Error, "savestate: section %s not found. blarg\n", magic);
return NO_SECTION;
}

Expand Down
2 changes: 1 addition & 1 deletion src/Savestate.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class Savestate

u32 CurSection;

void Section(const char* magic);
bool Section(const char* magic, bool noerror = false);

void Var8(u8* var)
{
Expand Down

0 comments on commit fdf0fa2

Please sign in to comment.