From 0262eeea8762cdeb14c98d22473ebf0fd6b37bf9 Mon Sep 17 00:00:00 2001 From: hachem Date: Thu, 14 Aug 2025 00:13:38 +0200 Subject: chore: prepare for Vulkan --- src/platform/vulkan/.gitkeep | 1 - src/platform/vulkan/vulkan_index_buffer.cpp | 21 ++++++ src/platform/vulkan/vulkan_index_buffer.h | 22 ++++++ src/platform/vulkan/vulkan_renderer_api.cpp | 32 +++++++++ src/platform/vulkan/vulkan_renderer_api.h | 22 ++++++ src/platform/vulkan/vulkan_shader.cpp | 102 +++++++++++++++++++++++++++ src/platform/vulkan/vulkan_shader.h | 46 ++++++++++++ src/platform/vulkan/vulkan_texture.cpp | 26 +++++++ src/platform/vulkan/vulkan_texture.h | 32 +++++++++ src/platform/vulkan/vulkan_vertex_array.cpp | 30 ++++++++ src/platform/vulkan/vulkan_vertex_array.h | 27 +++++++ src/platform/vulkan/vulkan_vertex_buffer.cpp | 28 ++++++++ src/platform/vulkan/vulkan_vertex_buffer.h | 27 +++++++ 13 files changed, 415 insertions(+), 1 deletion(-) delete mode 100644 src/platform/vulkan/.gitkeep create mode 100644 src/platform/vulkan/vulkan_index_buffer.cpp create mode 100644 src/platform/vulkan/vulkan_index_buffer.h create mode 100644 src/platform/vulkan/vulkan_renderer_api.cpp create mode 100644 src/platform/vulkan/vulkan_renderer_api.h create mode 100644 src/platform/vulkan/vulkan_shader.cpp create mode 100644 src/platform/vulkan/vulkan_shader.h create mode 100644 src/platform/vulkan/vulkan_texture.cpp create mode 100644 src/platform/vulkan/vulkan_texture.h create mode 100644 src/platform/vulkan/vulkan_vertex_array.cpp create mode 100644 src/platform/vulkan/vulkan_vertex_array.h create mode 100644 src/platform/vulkan/vulkan_vertex_buffer.cpp create mode 100644 src/platform/vulkan/vulkan_vertex_buffer.h (limited to 'src/platform') 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/vulkan_index_buffer.cpp b/src/platform/vulkan/vulkan_index_buffer.cpp new file mode 100644 index 0000000..2757668 --- /dev/null +++ b/src/platform/vulkan/vulkan_index_buffer.cpp @@ -0,0 +1,21 @@ +#include "vulkan_index_buffer.h" + +namespace Donut +{ + VulkanIndexBuffer::VulkanIndexBuffer(uint32_t* indices, uint32_t count) + : m_count(count) + { + } + + VulkanIndexBuffer::~VulkanIndexBuffer() + { + } + + void VulkanIndexBuffer::bind() const + { + } + + void VulkanIndexBuffer::unbind() const + { + } +}; diff --git a/src/platform/vulkan/vulkan_index_buffer.h b/src/platform/vulkan/vulkan_index_buffer.h new file mode 100644 index 0000000..9a192b7 --- /dev/null +++ b/src/platform/vulkan/vulkan_index_buffer.h @@ -0,0 +1,22 @@ +#pragma once + +#include "rendering/index_buffer.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 get_count() const override { return m_count; } + private: + uint32_t m_renderer_id; + uint32_t m_count; + }; +}; diff --git a/src/platform/vulkan/vulkan_renderer_api.cpp b/src/platform/vulkan/vulkan_renderer_api.cpp new file mode 100644 index 0000000..b934317 --- /dev/null +++ b/src/platform/vulkan/vulkan_renderer_api.cpp @@ -0,0 +1,32 @@ +#include "vulkan_renderer_api.h" + +namespace Donut +{ + void VulkanRendererAPI::init() + { + } + + void VulkanRendererAPI::set_viewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) + { + } + + void VulkanRendererAPI::set_clear_color(const glm::vec4& color) + { + } + + void VulkanRendererAPI::clear() + { + } + + void VulkanRendererAPI::enable_depth_test() + { + } + + void VulkanRendererAPI::set_face_culling(bool enabled) + { + } + + void VulkanRendererAPI::draw_indexed(const std::shared_ptr& vertex_array, uint32_t index_count) + { + } +}; diff --git a/src/platform/vulkan/vulkan_renderer_api.h b/src/platform/vulkan/vulkan_renderer_api.h new file mode 100644 index 0000000..c8d2689 --- /dev/null +++ b/src/platform/vulkan/vulkan_renderer_api.h @@ -0,0 +1,22 @@ +#pragma once + +#include "Rendering/RendererAPI.h" + +namespace Donut +{ + class VulkanRendererAPI + : public RendererAPI + { + public: + virtual void init() override; + virtual void set_viewport(uint32_t x, uint32_t y, + uint32_t width, uint32_t height) override; + virtual void set_clear_color(const glm::vec4& color) override; + virtual void clear() override; + virtual void enable_depth_test() override; + virtual void set_face_culling(bool enabled) override; + + virtual void draw_indexed(const std::shared_ptr& vertex_array, + uint32_t index_count = 0) override; + }; +}; diff --git a/src/platform/vulkan/vulkan_shader.cpp b/src/platform/vulkan/vulkan_shader.cpp new file mode 100644 index 0000000..53d65a5 --- /dev/null +++ b/src/platform/vulkan/vulkan_shader.cpp @@ -0,0 +1,102 @@ +#include "vulkan_shader.h" + +#include +#include + +namespace Donut +{ + VulkanShader::VulkanShader(const std::string& filepath) + { + } + + VulkanShader::VulkanShader(const std::string& name, const std::string& vertex_src, const std::string& fragment_src) + : m_name(name) + { + } + + VulkanShader::~VulkanShader() + { + } + + void VulkanShader::bind() const + { + } + + void VulkanShader::unbind() const + { + } + + void VulkanShader::set_int(const std::string& name, int value) + { + } + + void VulkanShader::set_int_array(const std::string& name, int* values, uint32_t count) + { + } + + void VulkanShader::set_float(const std::string& name, float value) + { + } + + void VulkanShader::set_float2(const std::string& name, const glm::vec2& value) + { + } + + void VulkanShader::set_float3(const std::string& name, const glm::vec3& value) + { + } + + void VulkanShader::set_float4(const std::string& name, const glm::vec4& value) + { + } + + void VulkanShader::set_mat4(const std::string& name, const glm::mat4& value) + { + } + + void VulkanShader::upload_uniform_int(const std::string& name, int value) + { + } + + void VulkanShader::upload_uniform_int_array(const std::string& name, int* values, uint32_t count) + { + } + + void VulkanShader::upload_uniform_float(const std::string& name, float value) + { + } + + void VulkanShader::upload_uniform_float2(const std::string& name, const glm::vec2& value) + { + } + + void VulkanShader::upload_uniform_float3(const std::string& name, const glm::vec3& value) + { + } + + void VulkanShader::upload_uniform_float4(const std::string& name, const glm::vec4& value) + { + } + + void VulkanShader::upload_uniform_mat3(const std::string& name, const glm::mat3& matrix) + { + } + + void VulkanShader::upload_uniform_mat4(const std::string& name, const glm::mat4& matrix) + { + } + + std::string VulkanShader::read_file(const std::string& filepath) + { + return ""; + } + + std::unordered_map VulkanShader::pre_process(const std::string& source) + { + return {}; + } + + void VulkanShader::compile(const std::unordered_map& shader_sources) + { + } +}; diff --git a/src/platform/vulkan/vulkan_shader.h b/src/platform/vulkan/vulkan_shader.h new file mode 100644 index 0000000..4a46263 --- /dev/null +++ b/src/platform/vulkan/vulkan_shader.h @@ -0,0 +1,46 @@ +#pragma once + +#include "rendering/shader.h" + +#include +#include + +namespace Donut +{ + class VulkanShader + : public Shader + { + public: + VulkanShader(const std::string& filepath); + VulkanShader(const std::string& name, const std::string& vertex_src, const std::string& fragment_src); + virtual ~VulkanShader(); + + virtual void bind() const override; + virtual void unbind() const override; + + virtual void set_int(const std::string& name, int value) override; + virtual void set_int_array(const std::string& name, int* values, uint32_t count) override; + virtual void set_float(const std::string& name, float value) override; + virtual void set_float2(const std::string& name, const glm::vec2& value) override; + virtual void set_float3(const std::string& name, const glm::vec3& value) override; + virtual void set_float4(const std::string& name, const glm::vec4& value) override; + virtual void set_mat4(const std::string& name, const glm::mat4& value) override; + + virtual const std::string& get_name() const override { return m_name; } + + void upload_uniform_int(const std::string& name, int value); + void upload_uniform_int_array(const std::string& name, int* values, uint32_t count); + void upload_uniform_float(const std::string& name, float value); + void upload_uniform_float2(const std::string& name, const glm::vec2& value); + void upload_uniform_float3(const std::string& name, const glm::vec3& value); + void upload_uniform_float4(const std::string& name, const glm::vec4& value); + void upload_uniform_mat3(const std::string& name, const glm::mat3& matrix); + void upload_uniform_mat4(const std::string& name, const glm::mat4& matrix); + private: + std::string read_file(const std::string& filepath); + std::unordered_map pre_process(const std::string& source); + void compile(const std::unordered_map& shader_sources); + uint32_t m_renderer_id; + std::string m_name; + }; +}; diff --git a/src/platform/vulkan/vulkan_texture.cpp b/src/platform/vulkan/vulkan_texture.cpp new file mode 100644 index 0000000..2efd115 --- /dev/null +++ b/src/platform/vulkan/vulkan_texture.cpp @@ -0,0 +1,26 @@ +#include "vulkan_texture.h" + +namespace Donut +{ + VulkanTexture2D::VulkanTexture2D(uint32_t width, uint32_t height) + : m_width(width), m_height(height) + { + } + + VulkanTexture2D::VulkanTexture2D(const std::string& path) + : m_path(path) + { + } + + VulkanTexture2D::~VulkanTexture2D() + { + } + + void VulkanTexture2D::set_data(void* data, uint32_t size) + { + } + + void VulkanTexture2D::bind(uint32_t slot) const + { + } +}; diff --git a/src/platform/vulkan/vulkan_texture.h b/src/platform/vulkan/vulkan_texture.h new file mode 100644 index 0000000..b69aebc --- /dev/null +++ b/src/platform/vulkan/vulkan_texture.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 get_width() const override { return m_width; } + virtual uint32_t get_height() const override { return m_height; } + + virtual void set_data(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_renderer_id == ((VulkanTexture2D&)other).m_renderer_id; + } + + private: + std::string m_path; + uint32_t m_width, m_height; + uint32_t m_renderer_id; + uint32_t m_internal_format, m_data_format; + }; +}; diff --git a/src/platform/vulkan/vulkan_vertex_array.cpp b/src/platform/vulkan/vulkan_vertex_array.cpp new file mode 100644 index 0000000..31c2f74 --- /dev/null +++ b/src/platform/vulkan/vulkan_vertex_array.cpp @@ -0,0 +1,30 @@ +#include "vulkan_vertex_array.h" + +namespace Donut +{ + VulkanVertexArray::VulkanVertexArray() + { + } + + VulkanVertexArray::~VulkanVertexArray() + { + } + + void VulkanVertexArray::bind() const + { + } + + void VulkanVertexArray::unbind() const + { + } + + void VulkanVertexArray::add_vertex_buffer(const std::shared_ptr& vertex_buffer) + { + m_vertex_buffers.push_back(vertex_buffer); + } + + void VulkanVertexArray::set_index_buffer(const std::shared_ptr& index_buffer) + { + m_index_buffer = index_buffer; + } +}; diff --git a/src/platform/vulkan/vulkan_vertex_array.h b/src/platform/vulkan/vulkan_vertex_array.h new file mode 100644 index 0000000..b36c421 --- /dev/null +++ b/src/platform/vulkan/vulkan_vertex_array.h @@ -0,0 +1,27 @@ +#pragma once + +#include "rendering/vertex_array.h" + +namespace Donut +{ + class VulkanVertexArray + : public VertexArray + { + public: + VulkanVertexArray(); + virtual ~VulkanVertexArray(); + + virtual void bind() const override; + virtual void unbind() const override; + + virtual void add_vertex_buffer(const std::shared_ptr& vertex_buffer) override; + virtual void set_index_buffer(const std::shared_ptr& index_buffer) override; + + virtual const std::vector>& get_vertex_buffers() const { return m_vertex_buffers; } + virtual const std::shared_ptr& get_index_buffer() const { return m_index_buffer; } + private: + uint32_t m_renderer_id; + std::vector> m_vertex_buffers; + std::shared_ptr m_index_buffer; + }; +}; diff --git a/src/platform/vulkan/vulkan_vertex_buffer.cpp b/src/platform/vulkan/vulkan_vertex_buffer.cpp new file mode 100644 index 0000000..a5906f8 --- /dev/null +++ b/src/platform/vulkan/vulkan_vertex_buffer.cpp @@ -0,0 +1,28 @@ +#include "vulkan_vertex_buffer.h" + +namespace Donut +{ + VulkanVertexBuffer::VulkanVertexBuffer(uint32_t size) + { + } + + VulkanVertexBuffer::VulkanVertexBuffer(float* vertices, uint32_t size) + { + } + + VulkanVertexBuffer::~VulkanVertexBuffer() + { + } + + void VulkanVertexBuffer::bind() const + { + } + + void VulkanVertexBuffer::unbind() const + { + } + + void VulkanVertexBuffer::set_data(const void* data, uint32_t size) + { + } +}; diff --git a/src/platform/vulkan/vulkan_vertex_buffer.h b/src/platform/vulkan/vulkan_vertex_buffer.h new file mode 100644 index 0000000..516f4e8 --- /dev/null +++ b/src/platform/vulkan/vulkan_vertex_buffer.h @@ -0,0 +1,27 @@ +#pragma once + +#include "rendering/vertex_buffer.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 set_data(const void* data, uint32_t size) override; + + virtual const BufferLayout& get_layout() const override { return m_layout; } + virtual void set_layout(const BufferLayout& layout) override { m_layout = layout; } + + private: + uint32_t m_renderer_id; + BufferLayout m_layout; + }; +}; -- cgit v1.3