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);
}