diff options
| author | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2025-08-15 03:18:29 +0200 |
| commit | 4172869e54093eee6e1595ebe0fa55c9fe98aef7 (patch) | |
| tree | 2004c518688e6db529e437fe3f0120ad0fcc1dd9 /src/Rendering | |
| parent | bc2d88c799cb3913a5defe4ea9ddea9c56814349 (diff) | |
[help]: Complete first geodesic 3d raytracing
Diffstat (limited to 'src/Rendering')
| -rw-r--r-- | src/Rendering/IndexBuffer.cpp | 6 | ||||
| -rw-r--r-- | src/Rendering/IndexBuffer.h | 3 | ||||
| -rw-r--r-- | src/Rendering/Renderer.cpp | 8 | ||||
| -rw-r--r-- | src/Rendering/Renderer.h | 52 | ||||
| -rw-r--r-- | src/Rendering/Shader.cpp | 22 | ||||
| -rw-r--r-- | src/Rendering/Shader.h | 6 | ||||
| -rw-r--r-- | src/Rendering/TextureManager.cpp | 34 | ||||
| -rw-r--r-- | src/Rendering/TextureManager.h | 19 | ||||
| -rw-r--r-- | src/Rendering/VertexArray.cpp | 6 | ||||
| -rw-r--r-- | src/Rendering/VertexArray.h | 2 | ||||
| -rw-r--r-- | src/Rendering/VertexBuffer.cpp | 6 | ||||
| -rw-r--r-- | src/Rendering/VertexBuffer.h | 6 |
12 files changed, 124 insertions, 46 deletions
diff --git a/src/Rendering/IndexBuffer.cpp b/src/Rendering/IndexBuffer.cpp index dc900ed..185684b 100644 --- a/src/Rendering/IndexBuffer.cpp +++ b/src/Rendering/IndexBuffer.cpp @@ -6,14 +6,14 @@ namespace Donut { - Ref<IndexBuffer> IndexBuffer::Create(const uint32_t* indices, uint32_t count) + IndexBuffer* IndexBuffer::Create(const uint32_t* indices, uint32_t count) { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLIndexBuffer>(indices, count); + return new OpenGLIndexBuffer(indices, count); case RendererAPI::API::Vulkan: - return CreateRef<VulkanIndexBuffer>((uint32_t*)indices, count); + return new VulkanIndexBuffer((uint32_t*)indices, count); default: return nullptr; } diff --git a/src/Rendering/IndexBuffer.h b/src/Rendering/IndexBuffer.h index bb1b3a1..a58cc6c 100644 --- a/src/Rendering/IndexBuffer.h +++ b/src/Rendering/IndexBuffer.h @@ -1,6 +1,5 @@ #pragma once -#include "Core/Memory.h" #include <cstdint> namespace Donut @@ -14,6 +13,6 @@ namespace Donut virtual void Unbind() const = 0; virtual uint32_t GetCount() const = 0; - static Ref<IndexBuffer> Create(const uint32_t* indices, uint32_t count); + static IndexBuffer* Create(const uint32_t* indices, uint32_t count); }; }; diff --git a/src/Rendering/Renderer.cpp b/src/Rendering/Renderer.cpp index c1001d8..c0684cb 100644 --- a/src/Rendering/Renderer.cpp +++ b/src/Rendering/Renderer.cpp @@ -7,14 +7,14 @@ namespace Donut { - Ref<RendererAPI> RendererAPI::Create() + Scope<RendererAPI> RendererAPI::Create() { switch (s_API) { case API::OpenGL: - return CreateRef<OpenGLRendererAPI>(); + return CreateScope<OpenGLRendererAPI>(); case API::Vulkan: - return CreateRef<VulkanRendererAPI>(); + return CreateScope<VulkanRendererAPI>(); default: return nullptr; } @@ -50,7 +50,7 @@ namespace Donut RenderCommand::DrawIndexed(vertexArray); } - Ref<RendererAPI> RenderCommand::s_RendererAPI = RendererAPI::Create(); + Scope<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 b2a44a4..d6c4154 100644 --- a/src/Rendering/Renderer.h +++ b/src/Rendering/Renderer.h @@ -20,23 +20,31 @@ namespace Donut public: virtual ~RendererAPI() = default; - virtual void Init() = 0; + virtual void Init() = 0; virtual void SetViewport(uint32_t x, uint32_t y, - uint32_t width, uint32_t height) = 0; - virtual void SetClearColor(const glm::vec4& color) = 0; - virtual void Clear() = 0; - virtual void EnableDepthTest() = 0; - virtual void DisableDepthTest() = 0; - virtual void SetFaceCulling(bool enabled) = 0; - virtual void EnableBlending() = 0; - virtual void DisableBlending() = 0; + uint32_t width, uint32_t height) = 0; + virtual void SetClearColor(const glm::vec4& color) = 0; + virtual void Clear() = 0; + virtual void EnableDepthTest() = 0; + virtual void DisableDepthTest() = 0; + virtual void SetFaceCulling(bool enabled) = 0; + virtual void EnableBlending() = 0; + virtual void DisableBlending() = 0; virtual void DrawIndexed(const Ref<VertexArray>& vertexArray, - uint32_t indexCount = 0) = 0; + uint32_t indexCount = 0) = 0; + + virtual void DrawArrays(uint32_t vertexCount, uint32_t first = 0) = 0; + virtual void DrawLines(const Ref<VertexArray>& vertexArray, + uint32_t indexCount = 0) = 0; + virtual void BindTexture(uint32_t textureID, uint32_t slot = 0) = 0; + virtual void BindImageTexture(uint32_t textureID, + uint32_t slot = 0, + bool readOnly = false) = 0; inline static API GetAPI() { return s_API; } inline static void SetAPI(API api) { s_API = api; } - static Ref<RendererAPI> Create(); + static Scope<RendererAPI> Create(); private: static API s_API; }; @@ -94,8 +102,28 @@ namespace Donut s_RendererAPI->DrawIndexed(vertexArray, indexCount); } + inline static void DrawArrays(uint32_t vertexCount, uint32_t first = 0) + { + s_RendererAPI->DrawArrays(vertexCount, first); + } + + inline static void DrawLines(const Ref<VertexArray>& vertexArray, uint32_t indexCount = 0) + { + s_RendererAPI->DrawLines(vertexArray, indexCount); + } + + inline static void BindTexture(uint32_t textureID, uint32_t slot = 0) + { + s_RendererAPI->BindTexture(textureID, slot); + } + + inline static void BindImageTexture(uint32_t textureID, uint32_t slot = 0, bool readOnly = false) + { + s_RendererAPI->BindImageTexture(textureID, slot, readOnly); + } + private: - static Ref<RendererAPI> s_RendererAPI; + static Scope<RendererAPI> s_RendererAPI; }; class Renderer diff --git a/src/Rendering/Shader.cpp b/src/Rendering/Shader.cpp index 2198663..8266e00 100644 --- a/src/Rendering/Shader.cpp +++ b/src/Rendering/Shader.cpp @@ -6,40 +6,40 @@ namespace Donut { - Ref<Shader> Shader::Create(const std::string& filepath) + Shader* Shader::Create(const std::string& filepath) { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLShader>(filepath); + return new OpenGLShader(filepath); case RendererAPI::API::Vulkan: - return CreateRef<VulkanShader>(filepath); + return new VulkanShader(filepath); default: return nullptr; } } - Ref<Shader> Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc) + Shader* Shader::Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc) { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLShader>(name, vertexSrc, fragmentSrc); + return new OpenGLShader(name, vertexSrc, fragmentSrc); case RendererAPI::API::Vulkan: - return CreateRef<VulkanShader>(name, vertexSrc, fragmentSrc); + return new VulkanShader(name, vertexSrc, fragmentSrc); default: return nullptr; } } - Ref<Shader> Shader::CreateCompute(const std::string& name, const std::string& computeSrc) + Shader* Shader::CreateCompute(const std::string& name, const std::string& computeSrc) { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLShader>(name, computeSrc); + return new OpenGLShader(name, computeSrc); case RendererAPI::API::Vulkan: - return CreateRef<VulkanShader>(name, computeSrc); + return new VulkanShader(name, computeSrc); default: return nullptr; } @@ -58,14 +58,14 @@ namespace Donut Ref<Shader> ShaderLibrary::Load(const std::string& filepath) { - auto shader = Shader::Create(filepath); + auto shader = Ref<Shader>(Shader::Create(filepath)); Add(shader); return shader; } Ref<Shader> ShaderLibrary::Load(const std::string& name, const std::string& filepath) { - auto shader = Shader::Create(filepath); + auto shader = Ref<Shader>(Shader::Create(filepath)); Add(name, shader); return shader; } diff --git a/src/Rendering/Shader.h b/src/Rendering/Shader.h index 9cfecd9..e2d8d2a 100644 --- a/src/Rendering/Shader.h +++ b/src/Rendering/Shader.h @@ -35,9 +35,9 @@ namespace Donut virtual const std::string& GetName() const = 0; - static Ref<Shader> Create(const std::string& filepath); - static Ref<Shader> Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc); - static Ref<Shader> CreateCompute(const std::string& name, const std::string& computeSrc); + static Shader* Create(const std::string& filepath); + static Shader* Create(const std::string& name, const std::string& vertexSrc, const std::string& fragmentSrc); + static Shader* CreateCompute(const std::string& name, const std::string& computeSrc); }; class ShaderLibrary diff --git a/src/Rendering/TextureManager.cpp b/src/Rendering/TextureManager.cpp new file mode 100644 index 0000000..9110558 --- /dev/null +++ b/src/Rendering/TextureManager.cpp @@ -0,0 +1,34 @@ +#include "TextureManager.h" +#include "Platform/OpenGL/OpenGLTexture.h" +#include "Platform/OpenGL/OpenGLRendererAPI.h" +#include <glad/glad.h> + +namespace Donut +{ + Ref<Texture2D> TextureManager::CreateTexture(uint32_t width, uint32_t height) + { + return CreateRef<OpenGLTexture2D>(width, height); + } + + void TextureManager::BindTexture(uint32_t textureID, uint32_t slot) + { + RenderCommand::BindTexture(textureID, slot); + } + + void TextureManager::BindImageTexture(uint32_t textureID, uint32_t slot, bool readOnly) + { + RenderCommand::BindImageTexture(textureID, slot, readOnly); + } + + void TextureManager::SetTextureData(uint32_t textureID, void* data, uint32_t width, uint32_t height) + { + glBindTexture(GL_TEXTURE_2D, textureID); + glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); + } + + void TextureManager::ResizeTexture(uint32_t textureID, uint32_t width, uint32_t height) + { + glBindTexture(GL_TEXTURE_2D, textureID); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); + } +}; diff --git a/src/Rendering/TextureManager.h b/src/Rendering/TextureManager.h new file mode 100644 index 0000000..0ab6c5f --- /dev/null +++ b/src/Rendering/TextureManager.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Core/Memory.h" +#include "Rendering/Texture.h" +#include <cstdint> + +namespace Donut +{ + class TextureManager + { + public: + static Ref<Texture2D> CreateTexture(uint32_t width, uint32_t height); + + static void BindTexture(uint32_t textureID, uint32_t slot = 0); + static void BindImageTexture(uint32_t textureID, uint32_t slot = 0, bool readOnly = false); + static void SetTextureData(uint32_t textureID, void* data, uint32_t width, uint32_t height); + static void ResizeTexture(uint32_t textureID, uint32_t width, uint32_t height); + }; +}; diff --git a/src/Rendering/VertexArray.cpp b/src/Rendering/VertexArray.cpp index bca1f4a..366675f 100644 --- a/src/Rendering/VertexArray.cpp +++ b/src/Rendering/VertexArray.cpp @@ -17,14 +17,14 @@ namespace Donut } } - Ref<VertexArray> VertexArray::Create() + VertexArray* VertexArray::Create() { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLVertexArray>(); + return new OpenGLVertexArray(); case RendererAPI::API::Vulkan: - return CreateRef<VulkanVertexArray>(); + return new VulkanVertexArray(); default: return nullptr; } diff --git a/src/Rendering/VertexArray.h b/src/Rendering/VertexArray.h index aa857e4..10fff89 100644 --- a/src/Rendering/VertexArray.h +++ b/src/Rendering/VertexArray.h @@ -23,6 +23,6 @@ namespace Donut virtual const std::vector<Ref<VertexBuffer>>& GetVertexBuffers() const = 0; virtual const Ref<IndexBuffer>& GetIndexBuffer() const = 0; - static Ref<VertexArray> Create(); + static VertexArray* Create(); }; }; diff --git a/src/Rendering/VertexBuffer.cpp b/src/Rendering/VertexBuffer.cpp index dd59546..a7e2504 100644 --- a/src/Rendering/VertexBuffer.cpp +++ b/src/Rendering/VertexBuffer.cpp @@ -6,14 +6,14 @@ namespace Donut { - Ref<VertexBuffer> VertexBuffer::Create(const void* data, uint32_t size) + VertexBuffer* VertexBuffer::Create(const void* data, uint32_t size) { switch (Renderer::GetAPI()) { case RendererAPI::API::OpenGL: - return CreateRef<OpenGLVertexBuffer>(data, size); + return new OpenGLVertexBuffer(data, size); case RendererAPI::API::Vulkan: - return CreateRef<VulkanVertexBuffer>((float*)data, size); + return new VulkanVertexBuffer((float*)data, size); default: return nullptr; } diff --git a/src/Rendering/VertexBuffer.h b/src/Rendering/VertexBuffer.h index db85755..35b9a84 100644 --- a/src/Rendering/VertexBuffer.h +++ b/src/Rendering/VertexBuffer.h @@ -1,7 +1,5 @@ #pragma once -#include "Core/Memory.h" - #include <cstdint> #include <vector> @@ -24,7 +22,7 @@ namespace Donut ~VertexBufferLayout() = default; template<typename T> - void Push(uint32_t count) + void Push(uint32_t count) { static_assert(false); } @@ -70,6 +68,6 @@ namespace Donut virtual const VertexBufferLayout& GetLayout() const = 0; virtual void SetLayout(const VertexBufferLayout& layout) = 0; - static Ref<VertexBuffer> Create(const void* data, uint32_t size); + static VertexBuffer* Create(const void* data, uint32_t size); }; }; |
