hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
-rw-r--r--src/rendering/index_buffer.cpp3
-rw-r--r--src/rendering/renderer.cpp3
-rw-r--r--src/rendering/shader.cpp7
-rw-r--r--src/rendering/texture.cpp5
-rw-r--r--src/rendering/vertex_array.cpp3
-rw-r--r--src/rendering/vertex_buffer.cpp5
19 files changed, 440 insertions, 2 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;
+ };
+};
diff --git a/src/rendering/index_buffer.cpp b/src/rendering/index_buffer.cpp
index 4e38b36..1095e3b 100644
--- a/src/rendering/index_buffer.cpp
+++ b/src/rendering/index_buffer.cpp
@@ -2,6 +2,7 @@
#include "renderer.h"
#include "platform/opengl/opengl_index_buffer.h"
+#include "platform/vulkan/vulkan_index_buffer.h"
namespace Donut
{
@@ -11,6 +12,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return new OpenGLIndexBuffer(indices, count);
+ case RendererAPI::API::Vulkan:
+ return new VulkanIndexBuffer((uint32_t*)indices, count);
default:
return nullptr;
}
diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp
index bd921eb..3343cce 100644
--- a/src/rendering/renderer.cpp
+++ b/src/rendering/renderer.cpp
@@ -1,5 +1,6 @@
#include "renderer.h"
#include "platform/opengl/opengl_renderer_api.h"
+#include "platform/vulkan/vulkan_renderer_api.h"
#include <memory>
#include <glm/gtc/matrix_transform.hpp>
@@ -11,6 +12,8 @@ namespace Donut
{
case API::OpenGL:
return std::make_unique<OpenGLRendererAPI>();
+ case API::Vulkan:
+ return std::make_unique<VulkanRendererAPI>();
default:
return nullptr;
}
diff --git a/src/rendering/shader.cpp b/src/rendering/shader.cpp
index d3fef07..1e84125 100644
--- a/src/rendering/shader.cpp
+++ b/src/rendering/shader.cpp
@@ -1,6 +1,7 @@
#include "shader.h"
#include "renderer.h"
#include "platform/opengl/opengl_shader.h"
+#include "platform/vulkan/vulkan_shader.h"
#include <memory>
namespace Donut
@@ -11,6 +12,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return new OpenGLShader(filepath);
+ case RendererAPI::API::Vulkan:
+ return new VulkanShader(filepath);
default:
return nullptr;
}
@@ -22,6 +25,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return new OpenGLShader(name, vertex_src, fragment_src);
+ case RendererAPI::API::Vulkan:
+ return new VulkanShader(name, vertex_src, fragment_src);
default:
return nullptr;
}
@@ -33,6 +38,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return new OpenGLShader(name, compute_src);
+ case RendererAPI::API::Vulkan:
+ return new VulkanShader(name, compute_src);
default:
return nullptr;
}
diff --git a/src/rendering/texture.cpp b/src/rendering/texture.cpp
index 9603034..36189a3 100644
--- a/src/rendering/texture.cpp
+++ b/src/rendering/texture.cpp
@@ -1,6 +1,7 @@
#include "texture.h"
#include "renderer.h"
#include "../platform/opengl/opengl_texture.h"
+#include "../platform/vulkan/vulkan_texture.h"
namespace Donut
{
@@ -10,6 +11,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return std::make_shared<OpenGLTexture2D>(width, height);
+ case RendererAPI::API::Vulkan:
+ return std::make_shared<VulkanTexture2D>(width, height);
case RendererAPI::API::None:
return nullptr;
default:
@@ -23,6 +26,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return std::make_shared<OpenGLTexture2D>(path);
+ case RendererAPI::API::Vulkan:
+ return std::make_shared<VulkanTexture2D>(path);
case RendererAPI::API::None:
return nullptr;
default:
diff --git a/src/rendering/vertex_array.cpp b/src/rendering/vertex_array.cpp
index 48eeb5a..8057a3e 100644
--- a/src/rendering/vertex_array.cpp
+++ b/src/rendering/vertex_array.cpp
@@ -1,6 +1,7 @@
#include "vertex_array.h"
#include "renderer.h"
#include "platform/opengl/opengl_vertex_array.h"
+#include "platform/vulkan/vulkan_vertex_array.h"
namespace Donut
{
@@ -21,6 +22,8 @@ namespace Donut
{
case RendererAPI::API::OpenGL:
return new OpenGLVertexArray();
+ case RendererAPI::API::Vulkan:
+ return new VulkanVertexArray();
default:
return nullptr;
}
diff --git a/src/rendering/vertex_buffer.cpp b/src/rendering/vertex_buffer.cpp
index a349e78..32ae10a 100644
--- a/src/rendering/vertex_buffer.cpp
+++ b/src/rendering/vertex_buffer.cpp
@@ -1,15 +1,18 @@
#include "vertex_buffer.h"
#include "renderer.h"
#include "platform/opengl/opengl_vertex_buffer.h"
+#include "platform/vulkan/vulkan_vertex_buffer.h"
namespace Donut
{
- VertexBuffer* VertexBuffer::create(const void* data, uint32_t size)
+ VertexBuffer* VertexBuffer::create(const void* data, uint32_t size)
{
switch (Renderer::get_api())
{
case RendererAPI::API::OpenGL:
return new OpenGLVertexBuffer(data, size);
+ case RendererAPI::API::Vulkan:
+ return new VulkanVertexBuffer((float*)data, size);
default:
return nullptr;
}