From 3dc21abe17100b471a6ce7632d876a4e7d9a33b5 Mon Sep 17 00:00:00 2001 From: Riyyi Date: Mon, 11 Jan 2021 00:21:40 +0100 Subject: [PATCH] Convert some shared to unique pointers --- CMakeLists.txt | 1 + inferno/src/inferno/render/renderer.cpp | 17 +++++++++-------- inferno/src/inferno/render/renderer.h | 11 +++++++---- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 8bc6065..13f60ff 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,6 +107,7 @@ target_precompile_headers(${ENGINE} PRIVATE "$<$:>" "$<$:>" "$<$:>" + "$<$:>" "$<$:>" ) diff --git a/inferno/src/inferno/render/renderer.cpp b/inferno/src/inferno/render/renderer.cpp index 77c8363..30ed2e1 100644 --- a/inferno/src/inferno/render/renderer.cpp +++ b/inferno/src/inferno/render/renderer.cpp @@ -1,4 +1,5 @@ #include // std::min +#include // std::move #include @@ -47,10 +48,10 @@ namespace Inferno { // ----------------------------------------- // Create array for storing quads vertices - s_quadBatch->vertexBufferBase = std::shared_ptr(new QuadVertex[QuadBatch::vertexCount]); + s_quadBatch->vertexBufferBase = std::unique_ptr(new QuadVertex[QuadBatch::vertexCount]); s_quadBatch->vertexBufferPtr = s_quadBatch->vertexBufferBase.get(); - // Set basic quad vertex positions + // Set default quad vertex positions s_quadBatch->vertexPositions[0] = { -0.5f, -0.5f, 0.0f, 1.0f }; s_quadBatch->vertexPositions[1] = { 0.5f, -0.5f, 0.0f, 1.0f }; s_quadBatch->vertexPositions[2] = { 0.5f, 0.5f, 0.0f, 1.0f }; @@ -74,7 +75,7 @@ namespace Inferno { // ----------------------------------------- // Create shader - s_quadBatch->shader = std::make_shared("assets/glsl/batch-quad"); + s_quadBatch->shader = std::make_unique("assets/glsl/batch-quad"); s_quadBatch->shader->bind(); s_quadBatch->shader->setInt("u_textures", samplers, s_quadBatch->textureUnitPerBatch); s_quadBatch->shader->unbind(); @@ -83,14 +84,14 @@ namespace Inferno { s_quadBatch->vertexArray = std::make_shared(); // Create vertex buffer - s_quadBatch->vertexBuffer = std::make_shared(sizeof(QuadVertex) * QuadBatch::vertexCount); - s_quadBatch->vertexBuffer->setLayout({ + auto vertexBuffer = std::make_shared(sizeof(QuadVertex) * QuadBatch::vertexCount); + vertexBuffer->setLayout({ { BufferElementType::Vec3, "a_position" }, { BufferElementType::Vec4, "a_color" }, { BufferElementType::Vec2, "a_textureCoordinates" }, { BufferElementType::Float, "a_textureIndex" }, }); - s_quadBatch->vertexArray->addVertexBuffer(s_quadBatch->vertexBuffer); + s_quadBatch->vertexArray->addVertexBuffer(std::move(vertexBuffer)); // Generate indices @@ -109,7 +110,7 @@ namespace Inferno { } // Create index buffer - std::shared_ptr indexBuffer = std::make_shared(indices, sizeof(uint32_t) * QuadBatch::indexCount); + auto indexBuffer = std::make_shared(indices, sizeof(uint32_t) * QuadBatch::indexCount); s_quadBatch->vertexArray->setIndexBuffer(indexBuffer); delete[] indices; @@ -226,7 +227,7 @@ namespace Inferno { } // Upload vertex data to GPU - s_quadBatch->vertexBuffer->uploadData( + s_quadBatch->vertexArray->getVertexBuffers().at(0)->uploadData( s_quadBatch->vertexBufferBase.get(), s_quadBatch->quadCount * QuadBatch::vertexPerQuad * sizeof(QuadVertex)); diff --git a/inferno/src/inferno/render/renderer.h b/inferno/src/inferno/render/renderer.h index b3cdae0..a2be4f8 100644 --- a/inferno/src/inferno/render/renderer.h +++ b/inferno/src/inferno/render/renderer.h @@ -2,7 +2,7 @@ #define RENDERER_H #include // std::uint32_t -#include // std::shared_ptr +#include // std::shared_ptr, std::unique_ptr #include "glm/ext/matrix_float4x4.hpp" // glm::mat4 #include "glm/ext/vector_float2.hpp" // glm::vec2 @@ -33,18 +33,21 @@ namespace Inferno { static const uint32_t indexCount = quads * indexPerQuad; static const uint32_t textureUnitPerBatch = 32; + // CPU quad vertices uint32_t quadCount = 0; - std::shared_ptr vertexBufferBase = nullptr; + std::unique_ptr vertexBufferBase = nullptr; QuadVertex* vertexBufferPtr = nullptr; + // Default quad vertex positions glm::vec4 vertexPositions[vertexPerQuad]; + // Texture units uint32_t supportedTextureUnitPerBatch = 0; uint32_t textureUnitIndex = 1; std::array, textureUnitPerBatch> textureUnits; - std::shared_ptr shader = nullptr; - std::shared_ptr vertexBuffer = nullptr; + // GPU objects + std::unique_ptr shader = nullptr; std::shared_ptr vertexArray = nullptr; };