Added mesh type and updated colors
This commit is contained in:
@@ -61,6 +61,7 @@ add_executable(VulkanRenderer
|
|||||||
src/managers/vulkan/VulkanManager.h
|
src/managers/vulkan/VulkanManager.h
|
||||||
src/VulkanRenderer.h
|
src/VulkanRenderer.h
|
||||||
src/RendererTypes.h
|
src/RendererTypes.h
|
||||||
|
src/Mesh.h
|
||||||
)
|
)
|
||||||
|
|
||||||
add_dependencies(VulkanRenderer CompileShaders)
|
add_dependencies(VulkanRenderer CompileShaders)
|
||||||
|
|||||||
11
src/Mesh.h
Normal file
11
src/Mesh.h
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
namespace PB::Renderer
|
||||||
|
{
|
||||||
|
struct Mesh
|
||||||
|
{
|
||||||
|
std::vector<float> vertices;
|
||||||
|
std::vector<int> indices;
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -6,4 +6,15 @@ namespace PB::Renderer
|
|||||||
{
|
{
|
||||||
float r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f;
|
float r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace Colors
|
||||||
|
{
|
||||||
|
constexpr Color white = {1.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
constexpr Color red = {1.0f, 0.0f, 0.0f, 1.0f};
|
||||||
|
constexpr Color green = {0.0f, 1.0f, 0.0f, 1.0f};
|
||||||
|
constexpr Color blue = {0.0f, 0.0f, 1.0f, 1.0f};
|
||||||
|
constexpr Color yellow = {1.0f, 1.0f, 0.0f, 1.0f};
|
||||||
|
constexpr Color cyan = {0.0f, 1.0f, 1.0f, 1.0f};
|
||||||
|
constexpr Color magenta = {1.0f, 0.0f, 1.0f, 1.0f};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
29
src/main.cpp
29
src/main.cpp
@@ -1,3 +1,4 @@
|
|||||||
|
#include "Mesh.h"
|
||||||
#include "VulkanRenderer.h"
|
#include "VulkanRenderer.h"
|
||||||
|
|
||||||
#include "managers/GLFWManager.h"
|
#include "managers/GLFWManager.h"
|
||||||
@@ -31,23 +32,35 @@ int main()
|
|||||||
CleanupAllAndExit(EXIT_FAILURE);
|
CleanupAllAndExit(EXIT_FAILURE);
|
||||||
|
|
||||||
/* Adds runtime objects */
|
/* Adds runtime objects */
|
||||||
const std::vector vertices = {
|
VulkanManager::CreateNewRenderObject
|
||||||
|
(
|
||||||
|
Colors::red, Mesh
|
||||||
|
{
|
||||||
|
.vertices =
|
||||||
|
{
|
||||||
0.0f, -0.5f,
|
0.0f, -0.5f,
|
||||||
0.5f, 0.9f,
|
0.5f, 0.9f,
|
||||||
-0.5f, 0.5f
|
-0.5f, 0.5f
|
||||||
};
|
},
|
||||||
|
|
||||||
const std::vector<uint32_t> indices = {0, 1, 2};
|
.indices = { 0, 1, 2 }
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
VulkanManager::CreateNewRenderObject({1.0f, 0.0f, 0.0f, 1.0f}, vertices, indices);
|
VulkanManager::CreateNewRenderObject
|
||||||
|
(
|
||||||
const std::vector otherVertices = {
|
Colors::yellow, Mesh
|
||||||
|
{
|
||||||
|
.vertices =
|
||||||
|
{
|
||||||
-0.9f, 0.0f,
|
-0.9f, 0.0f,
|
||||||
-0.9f, -0.9f,
|
-0.9f, -0.9f,
|
||||||
0.0f, -0.9f
|
0.0f, -0.9f
|
||||||
};
|
},
|
||||||
|
|
||||||
VulkanManager::CreateNewRenderObject({1.0f, 1.0f, 0.0f, 1.0f}, otherVertices, indices);
|
.indices = { 0, 1, 2 }
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
/* Polls window events whilst it is still open */
|
/* Polls window events whilst it is still open */
|
||||||
while (!glfwWindowShouldClose(window))
|
while (!glfwWindowShouldClose(window))
|
||||||
|
|||||||
@@ -4,10 +4,7 @@
|
|||||||
|
|
||||||
namespace PB::Renderer
|
namespace PB::Renderer
|
||||||
{
|
{
|
||||||
struct Vertex2D
|
struct Mesh;
|
||||||
{
|
|
||||||
float x, y;
|
|
||||||
};
|
|
||||||
|
|
||||||
class VulkanManager
|
class VulkanManager
|
||||||
{
|
{
|
||||||
@@ -95,7 +92,7 @@ namespace PB::Renderer
|
|||||||
*/
|
*/
|
||||||
static bool RenderPass(GLFWwindow* window);
|
static bool RenderPass(GLFWwindow* window);
|
||||||
|
|
||||||
static void CreateNewRenderObject(Color color, const std::vector<float>& vertices, const std::vector<uint32_t>& indices);
|
static void CreateNewRenderObject(Color color, Mesh mesh);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// === Internal helper structs === //
|
// === Internal helper structs === //
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
#include "VulkanManager.h"
|
#include "VulkanManager.h"
|
||||||
|
#include "../../Mesh.h"
|
||||||
|
|
||||||
#define CHECK_RESULT(res) if (res != VK_SUCCESS) { return res; }
|
#define CHECK_RESULT(res) if (res != VK_SUCCESS) { return res; }
|
||||||
|
|
||||||
@@ -18,31 +19,31 @@ namespace PB::Renderer
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void VulkanManager::CreateNewRenderObject(const Color color, const std::vector<float>& vertices, const std::vector<uint32_t>& indices)
|
void VulkanManager::CreateNewRenderObject(const Color color, Mesh mesh)
|
||||||
{
|
{
|
||||||
RenderObject obj{};
|
RenderObject obj{};
|
||||||
obj.IndexCount = indices.size();
|
obj.IndexCount = mesh.indices.size();
|
||||||
obj.DrawColor = color;
|
obj.DrawColor = color;
|
||||||
|
|
||||||
BufferCreationInfo vertexCreationInfo;
|
BufferCreationInfo vertexCreationInfo{};
|
||||||
vertexCreationInfo.size = vertices.size() * sizeof(float);;
|
vertexCreationInfo.size = mesh.vertices.size() * sizeof(float);;
|
||||||
vertexCreationInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
vertexCreationInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
||||||
vertexCreationInfo.properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
|
vertexCreationInfo.properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
|
||||||
CreateBuffer(obj.VertexBuffer, obj.VertexBufferMemory, vertexCreationInfo);
|
CreateBuffer(obj.VertexBuffer, obj.VertexBufferMemory, vertexCreationInfo);
|
||||||
|
|
||||||
void* data;
|
void* data;
|
||||||
vkMapMemory(s_Device, obj.VertexBufferMemory, 0, vertices.size() * sizeof(float), 0, &data);
|
vkMapMemory(s_Device, obj.VertexBufferMemory, 0, mesh.vertices.size() * sizeof(float), 0, &data);
|
||||||
std::memcpy(data, vertices.data(), vertices.size() * sizeof(float));
|
std::memcpy(data, mesh.vertices.data(), mesh.vertices.size() * sizeof(float));
|
||||||
vkUnmapMemory(s_Device, obj.VertexBufferMemory);
|
vkUnmapMemory(s_Device, obj.VertexBufferMemory);
|
||||||
|
|
||||||
BufferCreationInfo indexCreationInfo;
|
BufferCreationInfo indexCreationInfo{};
|
||||||
indexCreationInfo.size = indices.size() * sizeof(uint32_t);
|
indexCreationInfo.size = mesh.indices.size() * sizeof(uint32_t);
|
||||||
indexCreationInfo.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
indexCreationInfo.usage = VK_BUFFER_USAGE_INDEX_BUFFER_BIT;
|
||||||
indexCreationInfo.properties = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
|
indexCreationInfo.properties = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
|
||||||
CreateBuffer(obj.IndexBuffer, obj.IndexBufferMemory, indexCreationInfo);
|
CreateBuffer(obj.IndexBuffer, obj.IndexBufferMemory, indexCreationInfo);
|
||||||
|
|
||||||
vkMapMemory(s_Device, obj.IndexBufferMemory, 0, indices.size() * sizeof(uint32_t), 0, &data);
|
vkMapMemory(s_Device, obj.IndexBufferMemory, 0, mesh.indices.size() * sizeof(uint32_t), 0, &data);
|
||||||
std::memcpy(data, indices.data(), indices.size() * sizeof(uint32_t));
|
std::memcpy(data, mesh.indices.data(), mesh.indices.size() * sizeof(uint32_t));
|
||||||
vkUnmapMemory(s_Device, obj.IndexBufferMemory);
|
vkUnmapMemory(s_Device, obj.IndexBufferMemory);
|
||||||
|
|
||||||
s_RenderObjects.push_back(obj);
|
s_RenderObjects.push_back(obj);
|
||||||
|
|||||||
Reference in New Issue
Block a user