aboutsummaryrefslogtreecommitdiff
path: root/src/Platform/Vulkan/VulkanShader.h
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-14 00:13:38 +0200
committerhachem <im@hachem.wtf>2025-08-14 00:13:38 +0200
commit13f2e940700b4451f6bff52eb1666475fd2de72c (patch)
tree5908ff643da3caeef9a00cee3ff10931e4698a37 /src/Platform/Vulkan/VulkanShader.h
parent641db1c86bf624527173b0323bd3c832338c3662 (diff)
[setup]: Prepare for Vulkan
Diffstat (limited to 'src/Platform/Vulkan/VulkanShader.h')
-rw-r--r--src/Platform/Vulkan/VulkanShader.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/Platform/Vulkan/VulkanShader.h b/src/Platform/Vulkan/VulkanShader.h
new file mode 100644
index 0000000..fd99907
--- /dev/null
+++ b/src/Platform/Vulkan/VulkanShader.h
@@ -0,0 +1,46 @@
+#pragma once
+
+#include "Rendering/Shader.h"
+
+#include <string>
+#include <unordered_map>
+
+namespace Donut
+{
+ class VulkanShader
+ : public Shader
+ {
+ public:
+ VulkanShader(const std::string& filepath);
+ VulkanShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc);
+ virtual ~VulkanShader();
+
+ virtual void Bind() const override;
+ virtual void Unbind() const override;
+
+ virtual void SetInt(const std::string& name, int value) override;
+ virtual void SetIntArray(const std::string& name, int* values, uint32_t count) override;
+ virtual void SetFloat(const std::string& name, float value) override;
+ virtual void SetFloat2(const std::string& name, const glm::vec2& value) override;
+ virtual void SetFloat3(const std::string& name, const glm::vec3& value) override;
+ virtual void SetFloat4(const std::string& name, const glm::vec4& value) override;
+ virtual void SetMat4(const std::string& name, const glm::mat4& value) override;
+
+ virtual const std::string& GetName() const override { return m_Name; }
+
+ void UploadUniformInt(const std::string& name, int value);
+ void UploadUniformIntArray(const std::string& name, int* values, uint32_t count);
+ void UploadUniformFloat(const std::string& name, float value);
+ void UploadUniformFloat2(const std::string& name, const glm::vec2& value);
+ void UploadUniformFloat3(const std::string& name, const glm::vec3& value);
+ void UploadUniformFloat4(const std::string& name, const glm::vec4& value);
+ void UploadUniformMat3(const std::string& name, const glm::mat3& matrix);
+ void UploadUniformMat4(const std::string& name, const glm::mat4& matrix);
+ private:
+ std::string ReadFile(const std::string& filepath);
+ std::unordered_map<uint32_t, std::string> PreProcess(const std::string& source);
+ void Compile(const std::unordered_map<uint32_t, std::string>& shaderSources);
+ uint32_t m_RendererID;
+ std::string m_Name;
+ };
+};