diff options
| author | hachem <im@hachem.wtf> | 2025-08-14 00:13:38 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-14 00:13:38 +0200 |
| commit | 13f2e940700b4451f6bff52eb1666475fd2de72c (patch) | |
| tree | 5908ff643da3caeef9a00cee3ff10931e4698a37 /src/Platform | |
| parent | 641db1c86bf624527173b0323bd3c832338c3662 (diff) | |
[setup]: Prepare for Vulkan
Diffstat (limited to 'src/Platform')
| -rw-r--r-- | src/Platform/Vulkan/.gitkeep | 1 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanIndexBuffer.cpp | 25 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanIndexBuffer.h | 22 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanRendererAPI.cpp | 39 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanRendererAPI.h | 22 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanShader.cpp | 125 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanShader.h | 46 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanTexture.cpp | 31 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanTexture.h | 32 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanVertexArray.cpp | 36 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanVertexArray.h | 27 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanVertexBuffer.cpp | 34 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanVertexBuffer.h | 27 |
13 files changed, 466 insertions, 1 deletions
diff --git a/src/Platform/Vulkan/.gitkeep b/src/Platform/Vulkan/.gitkeep deleted file mode 100644 index cb7e3af..0000000 --- a/src/Platform/Vulkan/.gitkeep +++ /dev/null @@ -1 +0,0 @@ -Kill me
\ No newline at end of file diff --git a/src/Platform/Vulkan/VulkanIndexBuffer.cpp b/src/Platform/Vulkan/VulkanIndexBuffer.cpp new file mode 100644 index 0000000..930401e --- /dev/null +++ b/src/Platform/Vulkan/VulkanIndexBuffer.cpp @@ -0,0 +1,25 @@ +#include "VulkanIndexBuffer.h" + +namespace Donut +{ + VulkanIndexBuffer::VulkanIndexBuffer(uint32_t* indices, uint32_t count) + : m_Count(count) + { + // TODO(Hachem): Implement Vulkan index buffer creation + } + + VulkanIndexBuffer::~VulkanIndexBuffer() + { + // TODO(Hachem): Implement Vulkan index buffer cleanup + } + + void VulkanIndexBuffer::Bind() const + { + // TODO(Hachem): Implement Vulkan index buffer binding + } + + void VulkanIndexBuffer::Unbind() const + { + // TODO(Hachem): Implement Vulkan index buffer unbinding + } +}; diff --git a/src/Platform/Vulkan/VulkanIndexBuffer.h b/src/Platform/Vulkan/VulkanIndexBuffer.h new file mode 100644 index 0000000..74e69cf --- /dev/null +++ b/src/Platform/Vulkan/VulkanIndexBuffer.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Rendering/IndexBuffer.h" + +namespace Donut +{ + class VulkanIndexBuffer + : public IndexBuffer + { + public: + VulkanIndexBuffer(uint32_t* indices, uint32_t count); + virtual ~VulkanIndexBuffer(); + + virtual void Bind() const override; + virtual void Unbind() const override; + + virtual uint32_t GetCount() const override { return m_Count; } + private: + uint32_t m_RendererID; + uint32_t m_Count; + }; +}; diff --git a/src/Platform/Vulkan/VulkanRendererAPI.cpp b/src/Platform/Vulkan/VulkanRendererAPI.cpp new file mode 100644 index 0000000..377f100 --- /dev/null +++ b/src/Platform/Vulkan/VulkanRendererAPI.cpp @@ -0,0 +1,39 @@ +#include "VulkanRendererAPI.h" + +namespace Donut +{ + void VulkanRendererAPI::Init() + { + // TODO(Hachem): Implement Vulkan renderer API initialization + } + + void VulkanRendererAPI::SetViewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) + { + // TODO(Hachem): Implement Vulkan viewport setting + } + + void VulkanRendererAPI::SetClearColor(const glm::vec4& color) + { + // TODO(Hachem): Implement Vulkan clear color setting + } + + void VulkanRendererAPI::Clear() + { + // TODO(Hachem): Implement Vulkan clear + } + + void VulkanRendererAPI::EnableDepthTest() + { + // TODO(Hachem): Implement Vulkan depth test enabling + } + + void VulkanRendererAPI::SetFaceCulling(bool enabled) + { + // TODO(Hachem): Implement Vulkan face culling setting + } + + void VulkanRendererAPI::DrawIndexed(const std::shared_ptr<VertexArray>& vertexArray, uint32_t indexCount) + { + // TODO(Hachem): Implement Vulkan indexed drawing + } +}; diff --git a/src/Platform/Vulkan/VulkanRendererAPI.h b/src/Platform/Vulkan/VulkanRendererAPI.h new file mode 100644 index 0000000..94d62e2 --- /dev/null +++ b/src/Platform/Vulkan/VulkanRendererAPI.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Rendering/RendererAPI.h" + +namespace Donut +{ + class VulkanRendererAPI + : public RendererAPI + { + public: + virtual void Init() override; + virtual void SetViewport(uint32_t x, uint32_t y, + uint32_t width, uint32_t height) override; + virtual void SetClearColor(const glm::vec4& color) override; + virtual void Clear() override; + virtual void EnableDepthTest() override; + virtual void SetFaceCulling(bool enabled) override; + + virtual void DrawIndexed(const std::shared_ptr<VertexArray>& vertexArray, + uint32_t indexCount = 0) override; + }; +}; diff --git a/src/Platform/Vulkan/VulkanShader.cpp b/src/Platform/Vulkan/VulkanShader.cpp new file mode 100644 index 0000000..cbc0f54 --- /dev/null +++ b/src/Platform/Vulkan/VulkanShader.cpp @@ -0,0 +1,125 @@ +#include "VulkanShader.h" + +#include <fstream> +#include <glm/gtc/type_ptr.hpp> + +namespace Donut +{ + VulkanShader::VulkanShader(const std::string& filepath) + { + // TODO(Hachem): Implement Vulkan shader creation from filepath + } + + VulkanShader::VulkanShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc) + : m_Name(name) + { + // TODO(Hachem): Implement Vulkan shader creation from source + } + + VulkanShader::~VulkanShader() + { + // TODO(Hachem): Implement Vulkan shader cleanup + } + + void VulkanShader::Bind() const + { + // TODO(Hachem): Implement Vulkan shader binding + } + + void VulkanShader::Unbind() const + { + // TODO(Hachem): Implement Vulkan shader unbinding + } + + void VulkanShader::SetInt(const std::string& name, int value) + { + // TODO(Hachem): Implement Vulkan shader int uniform setting + } + + void VulkanShader::SetIntArray(const std::string& name, int* values, uint32_t count) + { + // TODO(Hachem): Implement Vulkan shader int array uniform setting + } + + void VulkanShader::SetFloat(const std::string& name, float value) + { + // TODO(Hachem): Implement Vulkan shader float uniform setting + } + + void VulkanShader::SetFloat2(const std::string& name, const glm::vec2& value) + { + // TODO(Hachem): Implement Vulkan shader float2 uniform setting + } + + void VulkanShader::SetFloat3(const std::string& name, const glm::vec3& value) + { + // TODO(Hachem): Implement Vulkan shader float3 uniform setting + } + + void VulkanShader::SetFloat4(const std::string& name, const glm::vec4& value) + { + // TODO(Hachem): Implement Vulkan shader float4 uniform setting + } + + void VulkanShader::SetMat4(const std::string& name, const glm::mat4& value) + { + // TODO(Hachem): Implement Vulkan shader mat4 uniform setting + } + + void VulkanShader::UploadUniformInt(const std::string& name, int value) + { + // TODO(Hachem): Implement Vulkan uniform int upload + } + + void VulkanShader::UploadUniformIntArray(const std::string& name, int* values, uint32_t count) + { + // TODO(Hachem): Implement Vulkan uniform int array upload + } + + void VulkanShader::UploadUniformFloat(const std::string& name, float value) + { + // TODO(Hachem): Implement Vulkan uniform float upload + } + + void VulkanShader::UploadUniformFloat2(const std::string& name, const glm::vec2& value) + { + // TODO(Hachem): Implement Vulkan uniform float2 upload + } + + void VulkanShader::UploadUniformFloat3(const std::string& name, const glm::vec3& value) + { + // TODO(Hachem): Implement Vulkan uniform float3 upload + } + + void VulkanShader::UploadUniformFloat4(const std::string& name, const glm::vec4& value) + { + // TODO(Hachem): Implement Vulkan uniform float4 upload + } + + void VulkanShader::UploadUniformMat3(const std::string& name, const glm::mat3& matrix) + { + // TODO(Hachem): Implement Vulkan uniform mat3 upload + } + + void VulkanShader::UploadUniformMat4(const std::string& name, const glm::mat4& matrix) + { + // TODO(Hachem): Implement Vulkan uniform mat4 upload + } + + std::string VulkanShader::ReadFile(const std::string& filepath) + { + // TODO(Hachem): Implement file reading for Vulkan shader + return ""; + } + + std::unordered_map<uint32_t, std::string> VulkanShader::PreProcess(const std::string& source) + { + // TODO(Hachem): Implement shader preprocessing for Vulkan + return {}; + } + + void VulkanShader::Compile(const std::unordered_map<uint32_t, std::string>& shaderSources) + { + // TODO(Hachem): Implement Vulkan shader compilation + } +}; 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; + }; +}; diff --git a/src/Platform/Vulkan/VulkanTexture.cpp b/src/Platform/Vulkan/VulkanTexture.cpp new file mode 100644 index 0000000..971972c --- /dev/null +++ b/src/Platform/Vulkan/VulkanTexture.cpp @@ -0,0 +1,31 @@ +#include "VulkanTexture.h" + +namespace Donut +{ + VulkanTexture2D::VulkanTexture2D(uint32_t width, uint32_t height) + : m_Width(width), m_Height(height) + { + // TODO(Hachem): Implement Vulkan texture creation with dimensions + } + + VulkanTexture2D::VulkanTexture2D(const std::string& path) + : m_Path(path) + { + // TODO(Hachem): Implement Vulkan texture creation from file + } + + VulkanTexture2D::~VulkanTexture2D() + { + // TODO(Hachem): Implement Vulkan texture cleanup + } + + void VulkanTexture2D::SetData(void* data, uint32_t size) + { + // TODO(Hachem): Implement Vulkan texture data setting + } + + void VulkanTexture2D::Bind(uint32_t slot) const + { + // TODO(Hachem): Implement Vulkan texture binding + } +}; diff --git a/src/Platform/Vulkan/VulkanTexture.h b/src/Platform/Vulkan/VulkanTexture.h new file mode 100644 index 0000000..2dcc3cf --- /dev/null +++ b/src/Platform/Vulkan/VulkanTexture.h @@ -0,0 +1,32 @@ +#pragma once + +#include "Rendering/Texture.h" + +namespace Donut +{ + class VulkanTexture2D + : public Texture2D + { + public: + VulkanTexture2D(uint32_t width, uint32_t height); + VulkanTexture2D(const std::string& path); + virtual ~VulkanTexture2D(); + + virtual uint32_t GetWidth() const override { return m_Width; } + virtual uint32_t GetHeight() const override { return m_Height; } + + virtual void SetData(void* data, uint32_t size) override; + virtual void Bind(uint32_t slot = 0) const override; + + virtual bool operator==(const Texture& other) const override + { + return m_RendererID == ((VulkanTexture2D&)other).m_RendererID; + } + + private: + std::string m_Path; + uint32_t m_Width, m_Height; + uint32_t m_RendererID; + uint32_t m_InternalFormat, m_DataFormat; + }; +}; diff --git a/src/Platform/Vulkan/VulkanVertexArray.cpp b/src/Platform/Vulkan/VulkanVertexArray.cpp new file mode 100644 index 0000000..9fda0a3 --- /dev/null +++ b/src/Platform/Vulkan/VulkanVertexArray.cpp @@ -0,0 +1,36 @@ +#include "VulkanVertexArray.h" + +namespace Donut +{ + VulkanVertexArray::VulkanVertexArray() + { + // TODO(Hachem): Implement Vulkan vertex array creation + } + + VulkanVertexArray::~VulkanVertexArray() + { + // TODO(Hachem): Implement Vulkan vertex array cleanup + } + + void VulkanVertexArray::Bind() const + { + // TODO(Hachem): Implement Vulkan vertex array binding + } + + void VulkanVertexArray::Unbind() const + { + // TODO(Hachem): Implement Vulkan vertex array unbinding + } + + void VulkanVertexArray::AddVertexBuffer(const std::shared_ptr<VertexBuffer>& vertexBuffer) + { + // TODO(Hachem): Implement Vulkan vertex buffer addition + m_VertexBuffers.push_back(vertexBuffer); + } + + void VulkanVertexArray::SetIndexBuffer(const std::shared_ptr<IndexBuffer>& indexBuffer) + { + // TODO(Hachem): Implement Vulkan index buffer setting + m_IndexBuffer = indexBuffer; + } +}; diff --git a/src/Platform/Vulkan/VulkanVertexArray.h b/src/Platform/Vulkan/VulkanVertexArray.h new file mode 100644 index 0000000..a6eef6a --- /dev/null +++ b/src/Platform/Vulkan/VulkanVertexArray.h @@ -0,0 +1,27 @@ +#pragma once + +#include "Rendering/VertexArray.h" + +namespace Donut +{ + class VulkanVertexArray + : public VertexArray + { + public: + VulkanVertexArray(); + virtual ~VulkanVertexArray(); + + virtual void Bind() const override; + virtual void Unbind() const override; + + virtual void AddVertexBuffer(const std::shared_ptr<VertexBuffer>& vertexBuffer) override; + virtual void SetIndexBuffer(const std::shared_ptr<IndexBuffer>& indexBuffer) override; + + virtual const std::vector<std::shared_ptr<VertexBuffer>>& GetVertexBuffers() const { return m_VertexBuffers; } + virtual const std::shared_ptr<IndexBuffer>& GetIndexBuffer() const { return m_IndexBuffer; } + private: + uint32_t m_RendererID; + std::vector<std::shared_ptr<VertexBuffer>> m_VertexBuffers; + std::shared_ptr<IndexBuffer> m_IndexBuffer; + }; +}; diff --git a/src/Platform/Vulkan/VulkanVertexBuffer.cpp b/src/Platform/Vulkan/VulkanVertexBuffer.cpp new file mode 100644 index 0000000..f77cbe4 --- /dev/null +++ b/src/Platform/Vulkan/VulkanVertexBuffer.cpp @@ -0,0 +1,34 @@ +#include "VulkanVertexBuffer.h" + +namespace Donut +{ + VulkanVertexBuffer::VulkanVertexBuffer(uint32_t size) + { + // TODO(Hachem): Implement Vulkan vertex buffer creation with size + } + + VulkanVertexBuffer::VulkanVertexBuffer(float* vertices, uint32_t size) + { + // TODO(Hachem): Implement Vulkan vertex buffer creation with data + } + + VulkanVertexBuffer::~VulkanVertexBuffer() + { + // TODO(Hachem): Implement Vulkan vertex buffer cleanup + } + + void VulkanVertexBuffer::Bind() const + { + // TODO(Hachem): Implement Vulkan vertex buffer binding + } + + void VulkanVertexBuffer::Unbind() const + { + // TODO(Hachem): Implement Vulkan vertex buffer unbinding + } + + void VulkanVertexBuffer::SetData(const void* data, uint32_t size) + { + // TODO(Hachem): Implement Vulkan vertex buffer data setting + } +};
\ No newline at end of file diff --git a/src/Platform/Vulkan/VulkanVertexBuffer.h b/src/Platform/Vulkan/VulkanVertexBuffer.h new file mode 100644 index 0000000..2208fd8 --- /dev/null +++ b/src/Platform/Vulkan/VulkanVertexBuffer.h @@ -0,0 +1,27 @@ +#pragma once + +#include "Rendering/VertexBuffer.h" + +namespace Donut +{ + class VulkanVertexBuffer + : public VertexBuffer + { + public: + VulkanVertexBuffer(uint32_t size); + VulkanVertexBuffer(float* vertices, uint32_t size); + virtual ~VulkanVertexBuffer(); + + virtual void Bind() const override; + virtual void Unbind() const override; + + virtual void SetData(const void* data, uint32_t size) override; + + virtual const BufferLayout& GetLayout() const override { return m_Layout; } + virtual void SetLayout(const BufferLayout& layout) override { m_Layout = layout; } + + private: + uint32_t m_RendererID; + BufferLayout m_Layout; + }; +}; |
