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;