diff options
| author | hachem <im@hachem.wtf> | 2025-08-14 00:28:27 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-14 00:28:27 +0200 |
| commit | 9671d5e54484b8bce261207d08ff15053ae24e48 (patch) | |
| tree | 0bd7018fd818eb16069f27102b9e489d5369bcf6 | |
| parent | 0262eeea8762cdeb14c98d22473ebf0fd6b37bf9 (diff) | |
feat: ability to switch render API
| -rw-r--r-- | src/core/application.cpp | 3 | ||||
| -rw-r--r-- | src/main.cpp | 2 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_renderer_api.h | 2 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_shader.cpp | 17 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_shader.h | 5 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_texture.cpp | 4 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_texture.h | 9 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_vertex_buffer.h | 9 | ||||
| -rw-r--r-- | src/rendering/renderer.cpp | 6 | ||||
| -rw-r--r-- | src/rendering/renderer.h | 17 |
10 files changed, 49 insertions, 25 deletions
diff --git a/src/core/application.cpp b/src/core/application.cpp index f878c71..b05e2b5 100644 --- a/src/core/application.cpp +++ b/src/core/application.cpp @@ -1,4 +1,5 @@ #include "application.h" + #include "rendering/renderer.h" #include "states/config_state.h" @@ -101,6 +102,8 @@ namespace Donut void Application::on_init() { Logger::init(); + + RendererAPI::set_api(RendererAPI::API::OpenGL); Renderer::init(); Renderer::on_window_resize(1280, 720); diff --git a/src/main.cpp b/src/main.cpp index 1833b66..8138e0e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -2,7 +2,7 @@ int main() { - Donut::Application* app = new Donut::Application("Donut", 1280, 720); + Donut::Application* app = new Donut::Application(); app->run(); delete app; } diff --git a/src/platform/vulkan/vulkan_renderer_api.h b/src/platform/vulkan/vulkan_renderer_api.h index c8d2689..0e1baf9 100644 --- a/src/platform/vulkan/vulkan_renderer_api.h +++ b/src/platform/vulkan/vulkan_renderer_api.h @@ -1,6 +1,6 @@ #pragma once -#include "Rendering/RendererAPI.h" +#include "rendering/renderer.h" namespace Donut { diff --git a/src/platform/vulkan/vulkan_shader.cpp b/src/platform/vulkan/vulkan_shader.cpp index 53d65a5..6572dae 100644 --- a/src/platform/vulkan/vulkan_shader.cpp +++ b/src/platform/vulkan/vulkan_shader.cpp @@ -14,6 +14,11 @@ namespace Donut { } + VulkanShader::VulkanShader(const std::string& name, const std::string& compute_src) + : m_name(name) + { + } + VulkanShader::~VulkanShader() { } @@ -54,6 +59,18 @@ namespace Donut { } + void VulkanShader::dispatch(uint32_t x, uint32_t y, uint32_t z) + { + } + + void VulkanShader::dispatch_indirect(uint32_t offset) + { + } + + void VulkanShader::memory_barrier(uint32_t barriers) + { + } + void VulkanShader::upload_uniform_int(const std::string& name, int value) { } diff --git a/src/platform/vulkan/vulkan_shader.h b/src/platform/vulkan/vulkan_shader.h index 4a46263..fdf9e65 100644 --- a/src/platform/vulkan/vulkan_shader.h +++ b/src/platform/vulkan/vulkan_shader.h @@ -13,6 +13,7 @@ namespace Donut public: VulkanShader(const std::string& filepath); VulkanShader(const std::string& name, const std::string& vertex_src, const std::string& fragment_src); + VulkanShader(const std::string& name, const std::string& compute_src); virtual ~VulkanShader(); virtual void bind() const override; @@ -26,6 +27,10 @@ namespace Donut 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 void dispatch(uint32_t x, uint32_t y = 1, uint32_t z = 1) override; + virtual void dispatch_indirect(uint32_t offset = 0) override; + virtual void memory_barrier(uint32_t barriers) override; + virtual const std::string& get_name() const override { return m_name; } void upload_uniform_int(const std::string& name, int value); diff --git a/src/platform/vulkan/vulkan_texture.cpp b/src/platform/vulkan/vulkan_texture.cpp index 2efd115..e63468d 100644 --- a/src/platform/vulkan/vulkan_texture.cpp +++ b/src/platform/vulkan/vulkan_texture.cpp @@ -23,4 +23,8 @@ namespace Donut void VulkanTexture2D::bind(uint32_t slot) const { } + + void VulkanTexture2D::bind_as_image(uint32_t slot, bool read_only) const + { + } }; diff --git a/src/platform/vulkan/vulkan_texture.h b/src/platform/vulkan/vulkan_texture.h index b69aebc..a9ac920 100644 --- a/src/platform/vulkan/vulkan_texture.h +++ b/src/platform/vulkan/vulkan_texture.h @@ -12,17 +12,18 @@ namespace Donut 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 uint32_t get_width() const override { return m_width; } + virtual uint32_t get_height() const override { return m_height; } + virtual uint32_t get_renderer_id() const override { return m_renderer_id; } virtual void set_data(void* data, uint32_t size) override; - virtual void bind(uint32_t slot = 0) const override; + virtual void bind(uint32_t slot = 0) const override; + virtual void bind_as_image(uint32_t slot = 0, bool read_only = false) 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; diff --git a/src/platform/vulkan/vulkan_vertex_buffer.h b/src/platform/vulkan/vulkan_vertex_buffer.h index 516f4e8..4c6f124 100644 --- a/src/platform/vulkan/vulkan_vertex_buffer.h +++ b/src/platform/vulkan/vulkan_vertex_buffer.h @@ -17,11 +17,10 @@ namespace Donut 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; } - + virtual const VertexBufferLayout& get_layout() const override { return m_layout; } + virtual void set_layout(const VertexBufferLayout& layout) override { m_layout = layout; } private: - uint32_t m_renderer_id; - BufferLayout m_layout; + uint32_t m_renderer_id; + VertexBufferLayout m_layout; }; }; diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp index 3343cce..46dd690 100644 --- a/src/rendering/renderer.cpp +++ b/src/rendering/renderer.cpp @@ -1,12 +1,14 @@ #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> namespace Donut { - Scope<RendererAPI> RendererAPI::create() + std::unique_ptr<RendererAPI> RendererAPI::create() { switch (s_api) { @@ -49,7 +51,7 @@ namespace Donut RenderCommand::draw_indexed(vertex_array); } - Scope<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create(); + std::unique_ptr<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create(); void Renderer::set_clear_color(const glm::vec4& color) { diff --git a/src/rendering/renderer.h b/src/rendering/renderer.h index c7ace3c..dd4c259 100644 --- a/src/rendering/renderer.h +++ b/src/rendering/renderer.h @@ -2,20 +2,12 @@ #include "vertex_array.h" #include "shader.h" + #include <glm/glm.hpp> #include <memory> namespace Donut { - template<typename T> - using Scope = std::unique_ptr<T>; - - template<typename T, typename ... Args> - constexpr Scope<T> create_scope(Args&& ... args) - { - return std::make_unique<T>(std::forward<Args>(args)...); - } - class RendererAPI { public: @@ -39,8 +31,9 @@ namespace Donut virtual void draw_indexed(const std::shared_ptr<VertexArray>& vertex_array, uint32_t index_count = 0) = 0; - inline static API get_api() { return s_api; } - static Scope<RendererAPI> create(); + inline static API get_api() { return s_api; } + inline static void set_api(API api) { s_api = api; } + static std::unique_ptr<RendererAPI> create(); private: static API s_api; }; @@ -84,7 +77,7 @@ namespace Donut } private: - static Scope<RendererAPI> s_renderer_api; + static std::unique_ptr<RendererAPI> s_renderer_api; }; class Renderer |
