From 2eb42da357785c49e4583f6d2ddd655eb22a418d Mon Sep 17 00:00:00 2001 From: Pasha Bibko <156938226+PashaBibko@users.noreply.github.com> Date: Fri, 21 Nov 2025 23:04:51 +0000 Subject: [PATCH] Added custom colors --- .idea/vcs.xml | 1 + CMakeLists.txt | 1 + main.cpp | 4 ++-- shaders/frag.frag | 6 +++++- src/RendererTypes.h | 9 +++++++++ src/VulkanRenderer.h | 4 ++++ src/managers/vulkan/VulkanManager.h | 4 +++- src/managers/vulkan/VulkanManagerRender.cpp | 5 ++++- 8 files changed, 29 insertions(+), 5 deletions(-) create mode 100644 src/RendererTypes.h diff --git a/.idea/vcs.xml b/.idea/vcs.xml index 259a06e..c513c25 100644 --- a/.idea/vcs.xml +++ b/.idea/vcs.xml @@ -3,5 +3,6 @@ + \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index f58214b..734bec6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -60,6 +60,7 @@ add_executable(VulkanRenderer src/managers/vulkan/VulkanManagerRender.cpp src/managers/vulkan/VulkanManager.h src/VulkanRenderer.h + src/RendererTypes.h ) add_dependencies(VulkanRenderer CompileShaders) diff --git a/main.cpp b/main.cpp index a1fa97b..87ada93 100644 --- a/main.cpp +++ b/main.cpp @@ -39,7 +39,7 @@ int main() const std::vector indices = {0, 1, 2}; - VulkanManager::CreateNewRenderObject(vertices, indices); + VulkanManager::CreateNewRenderObject({1.0f, 0.0f, 0.0f, 1.0f}, vertices, indices); const std::vector otherVertices = { -0.9f, 0.0f, @@ -47,7 +47,7 @@ int main() 0.0f, -0.9f }; - VulkanManager::CreateNewRenderObject(otherVertices, indices); + VulkanManager::CreateNewRenderObject({1.0f, 1.0f, 0.0f, 1.0f}, otherVertices, indices); /* Polls window events whilst it is still open */ while (!glfwWindowShouldClose(window)) diff --git a/shaders/frag.frag b/shaders/frag.frag index 7e8a688..e509c38 100644 --- a/shaders/frag.frag +++ b/shaders/frag.frag @@ -1,7 +1,11 @@ #version 450 layout(location = 0) out vec4 outColor; +layout(push_constant) uniform PC { + vec4 color; +} pc; + void main() { - outColor = vec4(1.0, 0.0, 0.0, 1.0); // red + outColor = pc.color; } diff --git a/src/RendererTypes.h b/src/RendererTypes.h new file mode 100644 index 0000000..0f84354 --- /dev/null +++ b/src/RendererTypes.h @@ -0,0 +1,9 @@ +#pragma once + +namespace PB::Renderer +{ + struct Color + { + float r = 0.0f, g = 0.0f, b = 0.0f, a = 0.0f; + }; +} diff --git a/src/VulkanRenderer.h b/src/VulkanRenderer.h index 8d9aaca..6333490 100644 --- a/src/VulkanRenderer.h +++ b/src/VulkanRenderer.h @@ -1,5 +1,9 @@ #pragma once +/* Includes general project .h files */ + +#include "RendererTypes.h" + /* Includes dependencies */ #include diff --git a/src/managers/vulkan/VulkanManager.h b/src/managers/vulkan/VulkanManager.h index f4056d6..f572c7d 100644 --- a/src/managers/vulkan/VulkanManager.h +++ b/src/managers/vulkan/VulkanManager.h @@ -95,7 +95,7 @@ namespace PB::Renderer */ static bool RenderPass(GLFWwindow* window); - static void CreateNewRenderObject(const std::vector& vertices, const std::vector& indices); + static void CreateNewRenderObject(Color color, const std::vector& vertices, const std::vector& indices); private: // === Internal helper structs === // @@ -108,6 +108,8 @@ namespace PB::Renderer VkBuffer IndexBuffer; VkDeviceMemory IndexBufferMemory; + Color DrawColor; + uint32_t IndexCount; }; diff --git a/src/managers/vulkan/VulkanManagerRender.cpp b/src/managers/vulkan/VulkanManagerRender.cpp index 4cb01ac..273455d 100644 --- a/src/managers/vulkan/VulkanManagerRender.cpp +++ b/src/managers/vulkan/VulkanManagerRender.cpp @@ -18,10 +18,11 @@ namespace PB::Renderer } } - void VulkanManager::CreateNewRenderObject(const std::vector& vertices, const std::vector& indices) + void VulkanManager::CreateNewRenderObject(const Color color, const std::vector& vertices, const std::vector& indices) { RenderObject obj{}; obj.IndexCount = indices.size(); + obj.DrawColor = color; BufferCreationInfo vertexCreationInfo; vertexCreationInfo.size = vertices.size() * sizeof(float);; @@ -130,6 +131,8 @@ namespace PB::Renderer vkCmdBindVertexBuffers(cmd, 0, 1, &vertexBuffer, offsets); vkCmdBindIndexBuffer(cmd, renderObject.IndexBuffer, 0, VK_INDEX_TYPE_UINT32); + vkCmdPushConstants(cmd, s_PipelineLayout, VK_SHADER_STAGE_FRAGMENT_BIT, 0, sizeof(Color), &renderObject.DrawColor); + vkCmdDrawIndexed(cmd, renderObject.IndexCount, 1, 0, 0, 0); }