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 | 2e246683df3b18e8e129adb0ada25be5f82f5b59 (patch) | |
| tree | fa692b2a612d025ec2efa6d121e5068d68ef4d17 /src | |
| parent | 13f2e940700b4451f6bff52eb1666475fd2de72c (diff) | |
[add]: Ability to switch render API
Diffstat (limited to 'src')
| -rw-r--r-- | src/Core/Application.cpp | 3 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanRendererAPI.h | 2 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanShader.cpp | 21 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanShader.h | 5 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanTexture.cpp | 5 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanTexture.h | 9 | ||||
| -rw-r--r-- | src/Platform/Vulkan/VulkanVertexBuffer.h | 9 | ||||
| -rw-r--r-- | src/Rendering/Renderer.cpp | 6 | ||||
| -rw-r--r-- | src/Rendering/Renderer.h | 17 | ||||
| -rw-r--r-- | src/main.cpp | 2 |
10 files changed, 54 insertions, 25 deletions
diff --git a/src/Core/Application.cpp b/src/Core/Application.cpp index 70868ca..4a0726d 100644 --- a/src/Core/Application.cpp +++ b/src/Core/Application.cpp @@ -1,4 +1,5 @@ #include "Application.h" + #include "Rendering/Renderer.h" #include "States/ConfigState.h" @@ -101,6 +102,8 @@ namespace Donut void Application::OnInit() { Logger::Init(); + + RendererAPI::SetAPI(RendererAPI::API::OpenGL); Renderer::Init(); Renderer::OnWindowResize(1280, 720); diff --git a/src/Platform/Vulkan/VulkanRendererAPI.h b/src/Platform/Vulkan/VulkanRendererAPI.h index 94d62e2..73cfbdb 100644 --- a/src/Platform/Vulkan/VulkanRendererAPI.h +++ b/src/Platform/Vulkan/VulkanRendererAPI.h @@ -1,6 +1,6 @@ #pragma once -#include "Rendering/RendererAPI.h" +#include "Rendering/Renderer.h" namespace Donut { diff --git a/src/Platform/Vulkan/VulkanShader.cpp b/src/Platform/Vulkan/VulkanShader.cpp index cbc0f54..2117384 100644 --- a/src/Platform/Vulkan/VulkanShader.cpp +++ b/src/Platform/Vulkan/VulkanShader.cpp @@ -16,6 +16,12 @@ namespace Donut // TODO(Hachem): Implement Vulkan shader creation from source } + VulkanShader::VulkanShader(const std::string& name, const std::string& computeSrc) + : m_Name(name) + { + // TODO(Hachem): Implement Vulkan compute shader creation + } + VulkanShader::~VulkanShader() { // TODO(Hachem): Implement Vulkan shader cleanup @@ -66,6 +72,21 @@ namespace Donut // TODO(Hachem): Implement Vulkan shader mat4 uniform setting } + void VulkanShader::Dispatch(uint32_t x, uint32_t y, uint32_t z) + { + // TODO(Hachem): Implement Vulkan compute shader dispatch + } + + void VulkanShader::DispatchIndirect(uint32_t offset) + { + // TODO(Hachem): Implement Vulkan indirect compute shader dispatch + } + + void VulkanShader::MemoryBarrier(uint32_t barriers) + { + // TODO(Hachem): Implement Vulkan memory barrier + } + void VulkanShader::UploadUniformInt(const std::string& name, int value) { // TODO(Hachem): Implement Vulkan uniform int upload diff --git a/src/Platform/Vulkan/VulkanShader.h b/src/Platform/Vulkan/VulkanShader.h index fd99907..2b75331 100644 --- a/src/Platform/Vulkan/VulkanShader.h +++ b/src/Platform/Vulkan/VulkanShader.h @@ -13,6 +13,7 @@ namespace Donut public: VulkanShader(const std::string& filepath); VulkanShader(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc); + VulkanShader(const std::string& name, const std::string& computeSrc); virtual ~VulkanShader(); virtual void Bind() const override; @@ -26,6 +27,10 @@ namespace Donut 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 void Dispatch(uint32_t x, uint32_t y = 1, uint32_t z = 1) override; + virtual void DispatchIndirect(uint32_t offset = 0) override; + virtual void MemoryBarrier(uint32_t barriers) override; + virtual const std::string& GetName() const override { return m_Name; } void UploadUniformInt(const std::string& name, int value); diff --git a/src/Platform/Vulkan/VulkanTexture.cpp b/src/Platform/Vulkan/VulkanTexture.cpp index 971972c..623e540 100644 --- a/src/Platform/Vulkan/VulkanTexture.cpp +++ b/src/Platform/Vulkan/VulkanTexture.cpp @@ -28,4 +28,9 @@ namespace Donut { // TODO(Hachem): Implement Vulkan texture binding } + + void VulkanTexture2D::BindAsImage(uint32_t slot, bool readOnly) const + { + // TODO(Hachem): Implement Vulkan texture image binding + } }; diff --git a/src/Platform/Vulkan/VulkanTexture.h b/src/Platform/Vulkan/VulkanTexture.h index 2dcc3cf..ad711f9 100644 --- a/src/Platform/Vulkan/VulkanTexture.h +++ b/src/Platform/Vulkan/VulkanTexture.h @@ -12,17 +12,18 @@ namespace Donut 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 uint32_t GetWidth() const override { return m_Width; } + virtual uint32_t GetHeight() const override { return m_Height; } + virtual uint32_t GetRendererID() const override { return m_RendererID; } virtual void SetData(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 BindAsImage(uint32_t slot = 0, bool readOnly = false) 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; diff --git a/src/Platform/Vulkan/VulkanVertexBuffer.h b/src/Platform/Vulkan/VulkanVertexBuffer.h index 2208fd8..e809e44 100644 --- a/src/Platform/Vulkan/VulkanVertexBuffer.h +++ b/src/Platform/Vulkan/VulkanVertexBuffer.h @@ -17,11 +17,10 @@ namespace Donut 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; } - + virtual const VertexBufferLayout& GetLayout() const override { return m_Layout; } + virtual void SetLayout(const VertexBufferLayout& layout) override { m_Layout = layout; } private: - uint32_t m_RendererID; - BufferLayout m_Layout; + uint32_t m_RendererID; + VertexBufferLayout m_Layout; }; }; diff --git a/src/Rendering/Renderer.cpp b/src/Rendering/Renderer.cpp index 4f61619..577dcf4 100644 --- a/src/Rendering/Renderer.cpp +++ b/src/Rendering/Renderer.cpp @@ -1,12 +1,14 @@ #include "Renderer.h" + #include "Platform/OpenGL/OpenGLRendererAPI.h" #include "Platform/Vulkan/VulkanRendererAPI.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::DrawIndexed(vertexArray); } - Scope<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create(); + std::unique_ptr<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create(); void Renderer::SetClearColor(const glm::vec4& color) { diff --git a/src/Rendering/Renderer.h b/src/Rendering/Renderer.h index 3083c4c..61dae82 100644 --- a/src/Rendering/Renderer.h +++ b/src/Rendering/Renderer.h @@ -2,20 +2,12 @@ #include "VertexArray.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> CreateScope(Args&& ... args) - { - return std::make_unique<T>(std::forward<Args>(args)...); - } - class RendererAPI { public: @@ -39,8 +31,9 @@ namespace Donut virtual void DrawIndexed(const std::shared_ptr<VertexArray>& vertexArray, uint32_t indexCount = 0) = 0; - inline static API GetAPI() { return s_API; } - static Scope<RendererAPI> Create(); + inline static API GetAPI() { return s_API; } + inline static void SetAPI(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_RendererAPI; + static std::unique_ptr<RendererAPI> s_RendererAPI; }; class Renderer diff --git a/src/main.cpp b/src/main.cpp index 77fe4b6..77fdff6 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; }
\ No newline at end of file |
