From 67bb6a5671e9eaa79ae3059475f87bcf09048772 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Sat, 31 Aug 2024 00:29:03 +0200 Subject: [PATCH] Render: Fix release build via out-of-line destructors --- src/inferno/render/renderer.cpp | 45 ++++++++++++++++++++++------- src/inferno/render/renderer.h | 14 ++++----- src/inferno/system/textareasystem.h | 2 +- 3 files changed, 42 insertions(+), 19 deletions(-) diff --git a/src/inferno/render/renderer.cpp b/src/inferno/render/renderer.cpp index b458d4b..fd83c15 100644 --- a/src/inferno/render/renderer.cpp +++ b/src/inferno/render/renderer.cpp @@ -65,7 +65,6 @@ void Renderer::initialize() template void Renderer::destroy() { - delete[] m_vertexBufferBase; } template @@ -161,7 +160,7 @@ void Renderer::flush() uploadElementBuffer(); // Upload vertex data to GPU - m_vertexArray->at(0)->uploadData(m_vertexBufferBase, m_vertexIndex * sizeof(T)); + m_vertexArray->at(0)->uploadData(m_vertexBufferBase.get(), m_vertexIndex * sizeof(T)); bind(); @@ -180,7 +179,7 @@ void Renderer::startBatch() { m_vertexIndex = 0; m_elementIndex = 0; - m_vertexBufferPtr = m_vertexBufferBase; + m_vertexBufferPtr = m_vertexBufferBase.get(); m_textureSlotIndex = 1; } @@ -199,6 +198,10 @@ Renderer2D::Renderer2D(s) Renderer2D::initialize(); } +Renderer2D::~Renderer2D() +{ +} + void Renderer2D::initialize() { Renderer::initialize(); @@ -207,8 +210,8 @@ void Renderer2D::initialize() // CPU // Create array for storing quads vertices - m_vertexBufferBase = new QuadVertex[maxVertices]; - m_vertexBufferPtr = m_vertexBufferBase; + m_vertexBufferBase = std::make_unique(maxVertices); + m_vertexBufferPtr = m_vertexBufferBase.get(); // Set default quad vertex positions m_vertexPositions[0] = { -1.0f, -1.0f, 0.0f, 1.0f }; @@ -290,6 +293,10 @@ RendererCubemap::RendererCubemap(s) RendererCubemap::initialize(); } +RendererCubemap::~RendererCubemap() +{ +} + void RendererCubemap::initialize() { Renderer::initialize(); @@ -298,8 +305,8 @@ void RendererCubemap::initialize() // CPU // Create array for storing quads vertices - m_vertexBufferBase = new CubemapVertex[maxVertices]; - m_vertexBufferPtr = m_vertexBufferBase; + m_vertexBufferBase = std::make_unique(maxVertices); + m_vertexBufferPtr = m_vertexBufferBase.get(); // Set default cubemap vertex positions @@ -413,8 +420,8 @@ RendererFont::RendererFont(s) // CPU // Create array for storing quads vertices - m_vertexBufferBase = new SymbolVertex[maxVertices]; - m_vertexBufferPtr = m_vertexBufferBase; + m_vertexBufferBase = std::make_unique(maxVertices); + m_vertexBufferPtr = m_vertexBufferBase.get(); // --------------------------------- // GPU @@ -440,6 +447,10 @@ RendererFont::RendererFont(s) ruc::info("RendererFont initialized"); } +RendererFont::~RendererFont() +{ +} + void RendererFont::drawSymbol(std::array& symbolQuad, std::shared_ptr texture) { // Create a new batch if the quad limit has been reached @@ -485,8 +496,8 @@ Renderer3D::Renderer3D(s) // CPU // Create array for storing quads vertices - m_vertexBufferBase = new Vertex[maxVertices]; - m_vertexBufferPtr = m_vertexBufferBase; + m_vertexBufferBase = std::make_unique(maxVertices); + m_vertexBufferPtr = m_vertexBufferBase.get(); // --------------------------------- // GPU @@ -508,6 +519,10 @@ Renderer3D::Renderer3D(s) ruc::info("Renderer3D initialized"); } +Renderer3D::~Renderer3D() +{ +} + void Renderer3D::drawModel(std::span vertices, std::span elements, const TransformComponent& transform, glm::vec4 color, std::shared_ptr texture) { // ruc::error("drawModel"); @@ -579,6 +594,10 @@ void Renderer3D::startBatch() // ----------------------------------------- +RendererPostProcess::~RendererPostProcess() +{ +} + void RendererPostProcess::drawQuad(const TransformComponent& transform, std::shared_ptr albedo, std::shared_ptr position, std::shared_ptr normal) { nextBatch(); @@ -614,6 +633,10 @@ void RendererPostProcess::loadShader() // ----------------------------------------- +RendererLightCube::~RendererLightCube() +{ +} + void RendererLightCube::loadShader() { m_shader = AssetManager::the().load("assets/glsl/lightsource"); diff --git a/src/inferno/render/renderer.h b/src/inferno/render/renderer.h index a78f57a..fb9346f 100644 --- a/src/inferno/render/renderer.h +++ b/src/inferno/render/renderer.h @@ -105,7 +105,7 @@ protected: // CPU quad vertices uint32_t m_vertexIndex { 0 }; uint32_t m_elementIndex { 0 }; - T* m_vertexBufferBase { nullptr }; + std::unique_ptr m_vertexBufferBase { nullptr }; T* m_vertexBufferPtr { nullptr }; // Texture units @@ -133,7 +133,7 @@ class Renderer2D , public ruc::Singleton { public: Renderer2D(s); - virtual ~Renderer2D() = default; + virtual ~Renderer2D(); using Singleton::destroy; @@ -163,7 +163,7 @@ public: public: RendererCubemap(s); - virtual ~RendererCubemap() = default; + virtual ~RendererCubemap(); using Singleton::destroy; @@ -191,7 +191,7 @@ class RendererFont final , public ruc::Singleton { public: RendererFont(s); - virtual ~RendererFont() = default; + virtual ~RendererFont(); using Singleton::destroy; @@ -208,7 +208,7 @@ class Renderer3D final , public ruc::Singleton { public: Renderer3D(s); - virtual ~Renderer3D() = default; + virtual ~Renderer3D(); using Singleton::destroy; @@ -236,7 +236,7 @@ public: : Renderer2D() { } - virtual ~RendererPostProcess() = default; + virtual ~RendererPostProcess(); using Singleton::the; using Singleton::destroy; @@ -258,7 +258,7 @@ public: { m_enableDepthBuffer = true; } - virtual ~RendererLightCube() = default; + virtual ~RendererLightCube(); using Singleton::the; using Singleton::destroy; diff --git a/src/inferno/system/textareasystem.h b/src/inferno/system/textareasystem.h index 5af29d3..a07bf1f 100644 --- a/src/inferno/system/textareasystem.h +++ b/src/inferno/system/textareasystem.h @@ -18,7 +18,7 @@ namespace Inferno { using Symbols = std::vector>; -using SymbolQuad = std::array::vertexPerQuad>; +using SymbolQuad = std::array; class Scene; class TextAreaComponent;