hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/platform/vulkan
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
commit0262eeea8762cdeb14c98d22473ebf0fd6b37bf9 (patch)
treed8675a753433a5a0fce16e7380fac3dc3bd2ee35 /src/platform/vulkan
parent1b251bd174527951eec220ecbcb7eca89328e5b8 (diff)
chore: prepare for Vulkan
Diffstat (limited to 'src/platform/vulkan')
-rw-r--r--src/platform/vulkan/.gitkeep1
-rw-r--r--src/platform/vulkan/vulkan_index_buffer.cpp21
-rw-r--r--src/platform/vulkan/vulkan_index_buffer.h22
-rw-r--r--src/platform/vulkan/vulkan_renderer_api.cpp32
-rw-r--r--src/platform/vulkan/vulkan_renderer_api.h22
-rw-r--r--src/platform/vulkan/vulkan_shader.cpp102
-rw-r--r--src/platform/vulkan/vulkan_shader.h46
-rw-r--r--src/platform/vulkan/vulkan_texture.cpp26
-rw-r--r--src/platform/vulkan/vulkan_texture.h32
-rw-r--r--src/platform/vulkan/vulkan_vertex_array.cpp30
-rw-r--r--src/platform/vulkan/vulkan_vertex_array.h27
-rw-r--r--src/platform/vulkan/vulkan_vertex_buffer.cpp28
-rw-r--r--src/platform/vulkan/vulkan_vertex_buffer.h27
13 files changed, 415 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/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<VertexArray>& 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<VertexArray>& 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 <fstream>
+#include <glm/gtc/type_ptr.hpp>
+
+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<uint32_t, std::string> VulkanShader::pre_process(const std::string& source)
+ {
+ return {};
+ }
+
+ void VulkanShader::compile(const std::unordered_map<uint32_t, std::string>& 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 <string>
+#include <unordered_map>
+
+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<uint32_t, std::string> pre_process(const std::string& source);
+ void compile(const std::unordered_map<uint32_t, std::string>& 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<VertexBuffer>& vertex_buffer)
+ {
+ m_vertex_buffers.push_back(vertex_buffer);
+ }
+
+ void VulkanVertexArray::set_index_buffer(const std::shared_ptr<IndexBuffer>& 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<VertexBuffer>& vertex_buffer) override;
+ virtual void set_index_buffer(const std::shared_ptr<IndexBuffer>& index_buffer) override;
+
+ virtual const std::vector<std::shared_ptr<VertexBuffer>>& get_vertex_buffers() const { return m_vertex_buffers; }
+ virtual const std::shared_ptr<IndexBuffer>& get_index_buffer() const { return m_index_buffer; }
+ private:
+ uint32_t m_renderer_id;
+ std::vector<std::shared_ptr<VertexBuffer>> m_vertex_buffers;
+ std::shared_ptr<IndexBuffer> 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;
+ };
+};