diff options
author | Jesse Talavera-Greenberg <jesse@jesse.tg> | 2023-09-15 09:31:05 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-09-15 15:31:05 +0200 |
commit | db963aa002cdf943c86d19f8abd3f4fd40be38ec (patch) | |
tree | bded72c0147f3749d3f346266ed4b1321e3b2979 /src/GPU_OpenGL.h | |
parent | 1aaf22d181e55abb8ad27be89ebae106b1c1cfcf (diff) |
Make the NDS teardown more robust (#1798)
* Make cleanup a little more robust to mitigate undefined behavior
- Add some null checks before cleaning up the GPU3D renderer
- Make sure that all deleted objects are null
- Move cleanup logic out of an assert call
- Note that deleting a null pointer is a no-op, so there's no need to check for null beforehand
- Use RAII for GLCompositor instead of Init/DeInit methods
* Replace a DeInit call that I missed
* Make ARMJIT_Memory less likely to generate errors
- Set FastMem7/9Start to nullptr at the end
- Only close and unmap the file if it's initialized
* Make Renderer3D manage its resources with RAII
* Don't try to deallocate frontend resources that aren't loaded
* Make ARMJIT_Memory::DeInit more robust on the Switch
* Reset MemoryFile on Windows to INVALID_HANDLE_VALUE, not nullptr
- There is a difference
* Don't explicitly store a Valid state in GLCompositor or the 3D renderers
- Instead, create them with static methods while making the actual constructors private
* Make initialization of OpenGL resources fail if OpenGL isn't loaded
* assert that OpenGL is loaded instead of returning failure
Diffstat (limited to 'src/GPU_OpenGL.h')
-rw-r--r-- | src/GPU_OpenGL.h | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/GPU_OpenGL.h b/src/GPU_OpenGL.h index d27ae20..90c17ae 100644 --- a/src/GPU_OpenGL.h +++ b/src/GPU_OpenGL.h @@ -20,6 +20,9 @@ #include "OpenGLSupport.h" +#include <array> +#include <memory> + namespace GPU { @@ -28,12 +31,11 @@ struct RenderSettings; class GLCompositor { public: - GLCompositor() = default; + static std::unique_ptr<GLCompositor> New() noexcept; GLCompositor(const GLCompositor&) = delete; GLCompositor& operator=(const GLCompositor&) = delete; + ~GLCompositor(); - bool Init(); - void DeInit(); void Reset(); void SetRenderSettings(RenderSettings& settings); @@ -42,13 +44,14 @@ public: void RenderFrame(); void BindOutputTexture(int buf); private: + GLCompositor(std::array<GLuint, 3> CompShader) noexcept; int Scale; int ScreenH, ScreenW; - GLuint CompShader[1][3]; - GLuint CompScaleLoc[1]; - GLuint Comp3DXPosLoc[1]; + std::array<GLuint, 3> CompShader; + GLuint CompScaleLoc; + GLuint Comp3DXPosLoc; GLuint CompVertexBufferID; GLuint CompVertexArrayID; |