From 1e7d08250e8b47a67997efea898c7a943a8daf5c Mon Sep 17 00:00:00 2001 From: Thraix Date: Tue, 7 Feb 2023 22:22:53 +0100 Subject: [PATCH] Add mesh class - Fix compile errors due to not adding files to git --- CopiumEngine/CopiumEngine.vcxproj | 3 +- CopiumEngine/CopiumEngine.vcxproj.filters | 151 ++++++++++++++---- CopiumEngine/compile.bat | 3 - .../src/copium/buffer/VertexBuffer.cpp | 4 +- CopiumEngine/src/copium/buffer/VertexBuffer.h | 2 +- CopiumEngine/src/copium/core/Application.cpp | 34 ++-- CopiumEngine/src/copium/core/Application.h | 19 ++- CopiumEngine/src/copium/mesh/Mesh.cpp | 15 ++ CopiumEngine/src/copium/mesh/Mesh.h | 36 +++++ CopiumEngine/src/copium/sampler/Sampler.cpp | 4 +- 10 files changed, 196 insertions(+), 75 deletions(-) delete mode 100644 CopiumEngine/compile.bat create mode 100644 CopiumEngine/src/copium/mesh/Mesh.cpp create mode 100644 CopiumEngine/src/copium/mesh/Mesh.h diff --git a/CopiumEngine/CopiumEngine.vcxproj b/CopiumEngine/CopiumEngine.vcxproj index a4b1b8d..c55a799 100644 --- a/CopiumEngine/CopiumEngine.vcxproj +++ b/CopiumEngine/CopiumEngine.vcxproj @@ -166,6 +166,7 @@ + @@ -194,6 +195,7 @@ + @@ -225,7 +227,6 @@ - diff --git a/CopiumEngine/CopiumEngine.vcxproj.filters b/CopiumEngine/CopiumEngine.vcxproj.filters index 6674aa3..cacdba6 100644 --- a/CopiumEngine/CopiumEngine.vcxproj.filters +++ b/CopiumEngine/CopiumEngine.vcxproj.filters @@ -15,102 +15,189 @@ - + Source Files - + Source Files - + Source Files - + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + Source Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + Header Files - + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + Header Files - - Source Files - diff --git a/CopiumEngine/compile.bat b/CopiumEngine/compile.bat deleted file mode 100644 index 0741ede..0000000 --- a/CopiumEngine/compile.bat +++ /dev/null @@ -1,3 +0,0 @@ -glslc res/shaders/shader.vert -o res/shaders/vert.spv -glslc res/shaders/shader.frag -o res/shaders/frag.spv -pause \ No newline at end of file diff --git a/CopiumEngine/src/copium/buffer/VertexBuffer.cpp b/CopiumEngine/src/copium/buffer/VertexBuffer.cpp index 9cbe352..af9c4f7 100644 --- a/CopiumEngine/src/copium/buffer/VertexBuffer.cpp +++ b/CopiumEngine/src/copium/buffer/VertexBuffer.cpp @@ -20,8 +20,8 @@ namespace Copium vkCmdBindVertexBuffers(commandBuffer, 0, bindingOffsets.size(), buffers.data(), bindingOffsets.data()); } - void VertexBuffer::Update(uint32_t binding, void* data) + void VertexBuffer::UpdateStaging(uint32_t binding, void* data) { - UpdateStaging(data, bindingOffsets[binding], bindingSizes[binding]); + Buffer::UpdateStaging(data, bindingOffsets[binding], bindingSizes[binding]); } } \ No newline at end of file diff --git a/CopiumEngine/src/copium/buffer/VertexBuffer.h b/CopiumEngine/src/copium/buffer/VertexBuffer.h index 4509585..9818a6d 100644 --- a/CopiumEngine/src/copium/buffer/VertexBuffer.h +++ b/CopiumEngine/src/copium/buffer/VertexBuffer.h @@ -21,6 +21,6 @@ namespace Copium VertexBuffer(Instance& instance, const VertexDescriptor& descriptor, int vertexCount); void Bind(const CommandBuffer& commandBuffer); - void Update(uint32_t binding, void* data); + void UpdateStaging(uint32_t binding, void* data); }; } diff --git a/CopiumEngine/src/copium/core/Application.cpp b/CopiumEngine/src/copium/core/Application.cpp index 687c806..aed14f9 100644 --- a/CopiumEngine/src/copium/core/Application.cpp +++ b/CopiumEngine/src/copium/core/Application.cpp @@ -50,8 +50,7 @@ namespace Copium InitializeTextureSampler(); InitializeUniformBuffer(); InitializeDescriptorSets(); - InitializeVertexBuffer(); - InitializeIndexBuffer(); + InitializeMesh(); InitializeCommandBuffer(); } @@ -126,22 +125,10 @@ namespace Copium graphicsPipelinePassthrough = std::make_unique(*instance, creatorPassthrough); } - void Application::InitializeVertexBuffer() + void Application::InitializeMesh() { - vertexBuffer = std::make_unique(*instance, Vertex::GetDescriptor(), vertices.size()); - vertexBuffer->Update(0, (void*)vertices.data()); - - vertexBufferPassthrough = std::make_unique(*instance, VertexPassthrough::GetDescriptor(), verticesPassthrough.size()); - vertexBufferPassthrough->Update(0, (void*)verticesPassthrough.data()); - } - - void Application::InitializeIndexBuffer() - { - indexBuffer = std::make_unique(*instance, indices.size()); - indexBuffer->UpdateStaging((void*)indices.data()); - - indexBufferPassthrough = std::make_unique(*instance, indicesPassthrough.size()); - indexBufferPassthrough->UpdateStaging((void*)indicesPassthrough.data()); + mesh = std::make_unique(*instance, vertices, indices); + meshPassthrough = std::make_unique(*instance, verticesPassthrough, indicesPassthrough); } void Application::InitializeCommandBuffer() @@ -158,13 +145,12 @@ namespace Copium UpdateUniformBuffer(); - vertexBuffer->Bind(*commandBuffer); - indexBuffer->Bind(*commandBuffer); - graphicsPipeline->SetDescriptorSet(0, *descriptorSet); graphicsPipeline->BindDescriptorSets(*commandBuffer); - indexBuffer->Draw(*commandBuffer); + mesh->Bind(*commandBuffer); + mesh->Render(*commandBuffer); + framebuffer->Unbind(*commandBuffer); instance->GetSwapChain().BeginFrameBuffer(*commandBuffer); @@ -172,9 +158,9 @@ namespace Copium graphicsPipelinePassthrough->Bind(*commandBuffer); graphicsPipelinePassthrough->SetDescriptorSet(0, *descriptorSetPassthrough); graphicsPipelinePassthrough->BindDescriptorSets(*commandBuffer); - vertexBufferPassthrough->Bind(*commandBuffer); - indexBufferPassthrough->Bind(*commandBuffer); - indexBufferPassthrough->Draw(*commandBuffer); + + meshPassthrough->Bind(*commandBuffer); + meshPassthrough->Render(*commandBuffer); instance->GetSwapChain().EndFrameBuffer(*commandBuffer); commandBuffer->End(); diff --git a/CopiumEngine/src/copium/core/Application.h b/CopiumEngine/src/copium/core/Application.h index c156ccc..08f154e 100644 --- a/CopiumEngine/src/copium/core/Application.h +++ b/CopiumEngine/src/copium/core/Application.h @@ -5,6 +5,7 @@ #include "copium/buffer/UniformBuffer.h" #include "copium/buffer/VertexBuffer.h" #include "copium/core/Instance.h" +#include "copium/mesh/Mesh.h" #include "copium/pipeline/DescriptorPool.h" #include "copium/pipeline/DescriptorSet.h" #include "copium/pipeline/Pipeline.h" @@ -17,20 +18,18 @@ namespace Copium CP_DELETE_COPY_AND_MOVE_CTOR(Application); private: std::unique_ptr instance; - std::unique_ptr graphicsPipeline; + std::unique_ptr framebuffer; std::unique_ptr texture2D; std::unique_ptr shaderUniformBuffer; std::unique_ptr descriptorPool; std::unique_ptr descriptorSet; - std::unique_ptr vertexBuffer; - std::unique_ptr indexBuffer; + std::unique_ptr descriptorSetPassthrough; + std::unique_ptr graphicsPipeline; + std::unique_ptr graphicsPipelinePassthrough; + std::unique_ptr mesh; + std::unique_ptr meshPassthrough; std::unique_ptr commandBuffer; - std::unique_ptr framebuffer; - std::unique_ptr graphicsPipelinePassthrough; - std::unique_ptr vertexBufferPassthrough; - std::unique_ptr indexBufferPassthrough; - std::unique_ptr descriptorSetPassthrough; public: Application(); @@ -44,9 +43,9 @@ namespace Copium void InitializeUniformBuffer(); void InitializeDescriptorSets(); void InitializeGraphicsPipeline(); - void InitializeVertexBuffer(); - void InitializeIndexBuffer(); + void InitializeMesh(); void InitializeCommandBuffer(); + void RecordCommandBuffer(); void UpdateUniformBuffer(); }; diff --git a/CopiumEngine/src/copium/mesh/Mesh.cpp b/CopiumEngine/src/copium/mesh/Mesh.cpp new file mode 100644 index 0000000..35e23c7 --- /dev/null +++ b/CopiumEngine/src/copium/mesh/Mesh.cpp @@ -0,0 +1,15 @@ +#include "copium/mesh/Mesh.h" + +namespace Copium +{ + void Mesh::Bind(const CommandBuffer& commandBuffer) + { + indexBuffer->Bind(commandBuffer); + vertexBuffer->Bind(commandBuffer); + } + + void Mesh::Render(const CommandBuffer& commandBuffer) + { + indexBuffer->Draw(commandBuffer); + } +} \ No newline at end of file diff --git a/CopiumEngine/src/copium/mesh/Mesh.h b/CopiumEngine/src/copium/mesh/Mesh.h new file mode 100644 index 0000000..7ce99c4 --- /dev/null +++ b/CopiumEngine/src/copium/mesh/Mesh.h @@ -0,0 +1,36 @@ +#pragma once + +#include "copium/buffer/IndexBuffer.h" +#include "copium/buffer/VertexBuffer.h" +#include "copium/buffer/CommandBuffer.h" +#include "copium/core/Instance.h" +#include "copium/util/Common.h" + +#include +#include + +namespace Copium +{ + class Mesh + { + CP_DELETE_COPY_AND_MOVE_CTOR(Mesh); + private: + std::unique_ptr indexBuffer; + std::unique_ptr vertexBuffer; + public: + template + Mesh(Instance& instance, const std::vector& vertices, const std::vector& indices); + + void Bind(const CommandBuffer& commandBuffer); + void Render(const CommandBuffer& commandBuffer); + }; + + template + Mesh::Mesh(Instance& instance, const std::vector& vertices, const std::vector& indices) + { + indexBuffer = std::make_unique(instance, indices.size()); + indexBuffer->UpdateStaging((void*)indices.data()); + vertexBuffer = std::make_unique(instance, T::GetDescriptor(), vertices.size()); + vertexBuffer ->UpdateStaging(0, (void*)vertices.data()); + } +} diff --git a/CopiumEngine/src/copium/sampler/Sampler.cpp b/CopiumEngine/src/copium/sampler/Sampler.cpp index 199cf7e..0b43b5a 100644 --- a/CopiumEngine/src/copium/sampler/Sampler.cpp +++ b/CopiumEngine/src/copium/sampler/Sampler.cpp @@ -20,8 +20,8 @@ namespace Copium VkSamplerCreateInfo createInfo{}; createInfo.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO; - createInfo.magFilter = VK_FILTER_LINEAR; - createInfo.minFilter = VK_FILTER_LINEAR; + createInfo.magFilter = VK_FILTER_LINEAR; // TODO: Some way to control this + createInfo.minFilter = VK_FILTER_LINEAR; // TODO: Some way to control this createInfo.addressModeU = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; createInfo.addressModeV = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE; createInfo.addressModeW = VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE;