diff options
Diffstat (limited to 'src/Rendering')
| -rw-r--r-- | src/Rendering/Framebuffer.cpp | 17 | ||||
| -rw-r--r-- | src/Rendering/Framebuffer.h | 65 | ||||
| -rw-r--r-- | src/Rendering/Renderer.cpp | 64 | ||||
| -rw-r--r-- | src/Rendering/Renderer.h | 158 | ||||
| -rw-r--r-- | src/Rendering/Shader.cpp | 84 | ||||
| -rw-r--r-- | src/Rendering/Shader.h | 58 | ||||
| -rw-r--r-- | src/Rendering/Texture.cpp | 68 | ||||
| -rw-r--r-- | src/Rendering/Texture.h | 42 |
8 files changed, 0 insertions, 556 deletions
diff --git a/src/Rendering/Framebuffer.cpp b/src/Rendering/Framebuffer.cpp deleted file mode 100644 index 089c31e..0000000 --- a/src/Rendering/Framebuffer.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "framebuffer.h" -#include "renderer.h" - -#include "platform/opengl/opengl_framebuffer.h" - -namespace Donut -{ - auto Framebuffer::create(const FramebufferSpecification& spec) -> Ref<Framebuffer> - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: return create_ref<OpenGLFramebuffer>(spec); - } - - return nullptr; - } -}; diff --git a/src/Rendering/Framebuffer.h b/src/Rendering/Framebuffer.h deleted file mode 100644 index a01a81b..0000000 --- a/src/Rendering/Framebuffer.h +++ /dev/null @@ -1,65 +0,0 @@ -#pragma once - -#include "core/memory.h" -#include "texture.h" - -namespace Donut -{ - enum class FramebufferTextureFormat - { - None = 0, - - RGBA8, - RED_INTEGER, - - DEPTH24STENCIL8, - - Depth = DEPTH24STENCIL8 - }; - - struct FramebufferTextureSpecification - { - FramebufferTextureSpecification() = default; - FramebufferTextureSpecification(FramebufferTextureFormat format) - : texture_format(format) {} - - FramebufferTextureFormat texture_format = FramebufferTextureFormat::None; - }; - - struct FramebufferAttachmentSpecification - { - FramebufferAttachmentSpecification() = default; - FramebufferAttachmentSpecification(std::initializer_list<FramebufferTextureSpecification> attachments) - : attachments(attachments) {} - - std::vector<FramebufferTextureSpecification> attachments; - }; - - struct FramebufferSpecification - { - uint32_t Width = 0, Height = 0; - FramebufferAttachmentSpecification attachments; - uint32_t Samples = 1; - - bool SwapChainTarget = false; - }; - - class Framebuffer - { - public: - virtual ~Framebuffer() = default; - - virtual auto bind() -> void = 0; - virtual auto unbind() -> void = 0; - - virtual auto resize(uint32_t width, uint32_t height) -> void = 0; - virtual auto read_pixel(uint32_t attachment_index, int x, int y) -> int = 0; - - virtual auto clear_attachment(uint32_t attachment_index, int value) -> void = 0; - virtual auto get_color_attachment_renderer_id(uint32_t index = 0) const -> uint32_t = 0; - - virtual auto get_specification() const -> const FramebufferSpecification& = 0; - - static auto create(const FramebufferSpecification& spec) -> Ref<Framebuffer>; - }; -}; diff --git a/src/Rendering/Renderer.cpp b/src/Rendering/Renderer.cpp deleted file mode 100644 index 28b7962..0000000 --- a/src/Rendering/Renderer.cpp +++ /dev/null @@ -1,64 +0,0 @@ -#include "renderer.h" - -#include "platform/opengl/opengl_renderer_api.h" -#include "platform/vulkan/vulkan_renderer_api.h" - -#include <glm/gtc/matrix_transform.hpp> - -namespace Donut -{ - auto RendererAPI::create() -> Scope<RendererAPI> - { - switch (s_api) - { - case API::OpenGL: - return create_scope<OpenGLRendererAPI>(); - case API::Vulkan: - return create_scope<VulkanRendererAPI>(); - default: - return nullptr; - } - } - - RendererAPI::API RendererAPI::s_api = RendererAPI::API::OpenGL; - - auto Renderer::init() -> void - { - RenderCommand::init(); - RenderCommand::enable_depth_test(); - } - - auto Renderer::shutdown() -> void - { - } - - auto Renderer::on_window_resize(uint32_t width, uint32_t height) -> void - { - RenderCommand::set_viewport(0, 0, width, height); - } - - auto Renderer::submit(const Ref<Shader>& shader, - const Ref<VertexArray>& vertex_array, - const glm::mat4& transform, - const glm::mat4& view_projection) -> void - { - shader->bind(); - shader->set_mat4("u_ViewProjection", view_projection); - shader->set_mat4("u_Transform", transform); - - vertex_array->bind(); - RenderCommand::draw_indexed(vertex_array); - } - - Scope<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create(); - - auto Renderer::set_clear_color(const glm::vec4& color) -> void - { - RenderCommand::set_clear_color(color); - } - - auto Renderer::clear() -> void - { - RenderCommand::clear(); - } -}; diff --git a/src/Rendering/Renderer.h b/src/Rendering/Renderer.h deleted file mode 100644 index 189723d..0000000 --- a/src/Rendering/Renderer.h +++ /dev/null @@ -1,158 +0,0 @@ -#pragma once - -#include "core/memory.h" -#include "vertex_array.h" -#include "shader.h" -#include "framebuffer.h" - -#include <glm/glm.hpp> - -namespace Donut -{ - class RendererAPI - { - public: - enum class API - { - None = 0, - OpenGL = 1, - Vulkan = 2, - }; - - public: - virtual ~RendererAPI() = default; - - virtual auto init() -> void = 0; - virtual auto set_viewport(uint32_t x, uint32_t y, - uint32_t width, uint32_t height) -> void = 0; - virtual auto set_clear_color(const glm::vec4& color) -> void = 0; - virtual auto clear() -> void = 0; - virtual auto enable_depth_test() -> void = 0; - virtual auto disable_depth_test() -> void = 0; - virtual auto set_face_culling(bool enabled) -> void = 0; - virtual auto enable_blending() -> void = 0; - virtual auto disable_blending() -> void = 0; - - virtual auto draw_indexed(const Ref<VertexArray>& vertex_array, - uint32_t index_count = 0) -> void = 0; - - virtual auto draw_arrays(uint32_t vertex_count, uint32_t first = 0) -> void = 0; - virtual auto draw_lines(const Ref<VertexArray>& vertex_array, - uint32_t index_count = 0) -> void = 0; - virtual auto bind_texture(uint32_t texture_id, uint32_t slot = 0) -> void = 0; - virtual auto bind_image_texture(uint32_t texture_id, - uint32_t slot = 0, - bool read_only = false) -> void = 0; - virtual auto read_pixels(uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t format, uint32_t type, void* pixels) -> void = 0; - - inline static auto get_api() -> API { return s_api; } - inline static auto set_api(API api) -> void { s_api = api; } - static auto create() -> Scope<RendererAPI>; - - private: - static API s_api; - }; - - class RenderCommand - { - public: - inline static auto init() -> void - { - s_renderer_api->init(); - } - - inline static auto set_viewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) -> void - { - s_renderer_api->set_viewport(x, y, width, height); - } - - inline static auto set_clear_color(const glm::vec4& color) -> void - { - s_renderer_api->set_clear_color(color); - } - - inline static auto clear() -> void - { - s_renderer_api->clear(); - } - - inline static auto enable_depth_test() -> void - { - s_renderer_api->enable_depth_test(); - } - - inline static auto disable_depth_test() -> void - { - s_renderer_api->disable_depth_test(); - } - - inline static auto set_face_culling(bool enabled) -> void - { - s_renderer_api->set_face_culling(enabled); - } - - inline static auto enable_blending() -> void - { - s_renderer_api->enable_blending(); - } - - inline static auto disable_blending() -> void - { - s_renderer_api->disable_blending(); - } - - inline static auto draw_indexed(const Ref<VertexArray>& vertex_array, uint32_t index_count = 0) -> void - { - s_renderer_api->draw_indexed(vertex_array, index_count); - } - - inline static auto draw_arrays(uint32_t vertex_count, uint32_t first = 0) -> void - { - s_renderer_api->draw_arrays(vertex_count, first); - } - - inline static auto draw_lines(const Ref<VertexArray>& vertex_array, uint32_t index_count = 0) -> void - { - s_renderer_api->draw_lines(vertex_array, index_count); - } - - inline static auto bind_texture(uint32_t texture_id, uint32_t slot = 0) -> void - { - s_renderer_api->bind_texture(texture_id, slot); - } - - inline static auto bind_image_texture(uint32_t texture_id, uint32_t slot = 0, bool read_only = false) -> void - { - s_renderer_api->bind_image_texture(texture_id, slot, read_only); - } - - inline static auto read_pixels(uint32_t x, uint32_t y, uint32_t width, uint32_t height, - uint32_t format, uint32_t type, void* pixels) -> void - { - s_renderer_api->read_pixels(x, y, width, height, format, type, pixels); - } - - private: - static Scope<RendererAPI> s_renderer_api; - }; - - class Renderer - { - public: - static auto init() -> void; - static auto shutdown() -> void; - - static auto on_window_resize(uint32_t width, uint32_t height) -> void; - - static auto submit(const Ref<Shader>& shader, - const Ref<VertexArray>& vertex_array, - const glm::mat4& transform, - const glm::mat4& view_projection) -> void; - - static auto set_clear_color(const glm::vec4& color) -> void; - static auto clear() -> void; - - inline static auto get_api() -> RendererAPI::API { return RendererAPI::get_api(); } - }; -}; diff --git a/src/Rendering/Shader.cpp b/src/Rendering/Shader.cpp deleted file mode 100644 index 167b855..0000000 --- a/src/Rendering/Shader.cpp +++ /dev/null @@ -1,84 +0,0 @@ -#include "shader.h" -#include "renderer.h" - -#include "platform/opengl/opengl_shader.h" -#include "platform/vulkan/vulkan_shader.h" - -namespace Donut -{ - auto Shader::create(const std::string& filepath) -> Shader* - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return new OpenGLShader(filepath); - case RendererAPI::API::Vulkan: - return new VulkanShader(filepath); - default: - return nullptr; - } - } - - auto Shader::create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src) -> Shader* - { - switch (Renderer::get_api()) - { - 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; - } - } - - auto Shader::create_compute(const std::string& name, const std::string& compute_src) -> Shader* - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return new OpenGLShader(name, compute_src); - case RendererAPI::API::Vulkan: - return new VulkanShader(name, compute_src); - default: - return nullptr; - } - } - - auto ShaderLibrary::add(const Ref<Shader>& shader) -> void - { - auto& name = shader->get_name(); - add(name, shader); - } - - auto ShaderLibrary::add(const std::string& name, const Ref<Shader>& shader) -> void - { - m_shaders[name] = shader; - } - - auto ShaderLibrary::load(const std::string& filepath) -> Ref<Shader> - { - auto shader = Ref<Shader>(Shader::create(filepath)); - add(shader); - return shader; - } - - auto ShaderLibrary::load(const std::string& name, const std::string& filepath) -> Ref<Shader> - { - auto shader = Ref<Shader>(Shader::create(filepath)); - add(name, shader); - return shader; - } - - auto ShaderLibrary::Get(const std::string& name) -> Ref<Shader> - { - if (exists(name)) - return m_shaders[name]; - return nullptr; - } - - auto ShaderLibrary::exists(const std::string& name) const -> bool - { - return m_shaders.find(name) != m_shaders.end(); - } -}; diff --git a/src/Rendering/Shader.h b/src/Rendering/Shader.h deleted file mode 100644 index bc3fd9a..0000000 --- a/src/Rendering/Shader.h +++ /dev/null @@ -1,58 +0,0 @@ -#pragma once - -#include "core/memory.h" - -#include <string> -#include <unordered_map> -#include <glm/glm.hpp> - -#define SHADER_STORAGE_BARRIER_BIT 0x00002000 -#define UNIFORM_BARRIER_BIT 0x00000004 -#define TEXTURE_FETCH_BARRIER_BIT 0x00000008 -#define IMAGE_ACCESS_BARRIER_BIT 0x00000020 - -namespace Donut -{ - class Shader - { - public: - virtual ~Shader() = default; - - virtual auto bind() const -> void = 0; - virtual auto unbind() const -> void = 0; - - virtual auto set_int( const std::string& name, int value) -> void = 0; - virtual auto set_int_array(const std::string& name, int* values, uint32_t count) -> void = 0; - virtual auto set_float( const std::string& name, float value) -> void = 0; - virtual auto set_float2( const std::string& name, const glm::vec2& value) -> void = 0; - virtual auto set_float3( const std::string& name, const glm::vec3& value) -> void = 0; - virtual auto set_float4( const std::string& name, const glm::vec4& value) -> void = 0; - virtual auto set_mat4( const std::string& name, const glm::mat4& value) -> void = 0; - - virtual auto dispatch(uint32_t x, uint32_t y = 1, uint32_t z = 1) -> void = 0; - virtual auto dispatch_indirect(uint32_t offset = 0) -> void = 0; - virtual auto memory_barrier(uint32_t barriers) -> void = 0; - - virtual auto get_name() const -> const std::string& = 0; - virtual auto get_renderer_id() const -> uint32_t = 0; - - static auto create(const std::string& filepath) -> Shader*; - static auto create(const std::string& name, const std::string& vertex_src, const std::string& fragment_src) -> Shader*; - static auto create_compute(const std::string& name, const std::string& compute_src) -> Shader*; - }; - - class ShaderLibrary - { - public: - auto add(const Ref<Shader>& shader) -> void; - auto add(const std::string& name, const Ref<Shader>& shader) -> void; - auto load(const std::string& filepath) -> Ref<Shader>; - auto load(const std::string& name, const std::string& filepath) -> Ref<Shader>; - - Ref<Shader> Get(const std::string& name); - - auto exists(const std::string& name) const -> bool; - private: - std::unordered_map<std::string, Ref<Shader>> m_shaders; - }; -}; diff --git a/src/Rendering/Texture.cpp b/src/Rendering/Texture.cpp deleted file mode 100644 index 2470e46..0000000 --- a/src/Rendering/Texture.cpp +++ /dev/null @@ -1,68 +0,0 @@ -#include "texture.h" -#include "renderer.h" - -#include "platform/opengl/opengl_texture.h" -#include "platform/vulkan/vulkan_texture.h" - -namespace Donut -{ - auto Texture2D::create(uint32_t width, uint32_t height) -> Ref<Texture2D> - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return create_ref<OpenGLTexture2D>(width, height); - case RendererAPI::API::Vulkan: - return create_ref<VulkanTexture2D>(width, height); - case RendererAPI::API::None: - return nullptr; - default: - return nullptr; - } - } - - auto Texture2D::create(const std::string& path) -> Ref<Texture2D> - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return create_ref<OpenGLTexture2D>(path); - case RendererAPI::API::Vulkan: - return create_ref<VulkanTexture2D>(path); - case RendererAPI::API::None: - return nullptr; - default: - return nullptr; - } - } - - auto CubemapTexture::create(uint32_t width, uint32_t height) -> Ref<CubemapTexture> - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return create_ref<OpenGLCubemapTexture>(width, height); - case RendererAPI::API::Vulkan: - return create_ref<VulkanCubemapTexture>(width, height); - case RendererAPI::API::None: - return nullptr; - default: - return nullptr; - } - } - - auto CubemapTexture::create_from_hdri(const std::string& path) -> Ref<CubemapTexture> - { - switch (Renderer::get_api()) - { - case RendererAPI::API::OpenGL: - return create_ref<OpenGLCubemapTexture>(path); - case RendererAPI::API::Vulkan: - return create_ref<VulkanCubemapTexture>(path); - case RendererAPI::API::None: - return nullptr; - default: - return nullptr; - } - } -};
\ No newline at end of file diff --git a/src/Rendering/Texture.h b/src/Rendering/Texture.h deleted file mode 100644 index e9b3e0a..0000000 --- a/src/Rendering/Texture.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "core/memory.h" - -#include <string> -#include <glm/glm.hpp> - -namespace Donut -{ - class Texture - { - public: - virtual ~Texture() = default; - - virtual auto get_width() const -> uint32_t = 0; - virtual auto get_height() const -> uint32_t = 0; - virtual auto get_renderer_id() const -> uint32_t = 0; - - virtual auto set_data(void* data, uint32_t size) -> void = 0; - virtual auto bind(uint32_t slot = 0) const -> void = 0; - virtual void bind_as_image(uint32_t slot = 0, - bool read_only = false) const = 0; - - virtual bool operator==(const Texture& other) const = 0; - }; - - class Texture2D - : public Texture - { - public: - static auto create(uint32_t width, uint32_t height) -> Ref<Texture2D>; - static auto create(const std::string& path) -> Ref<Texture2D>; - }; - - class CubemapTexture - : public Texture - { - public: - static auto create(uint32_t width, uint32_t height) -> Ref<CubemapTexture>; - static auto create_from_hdri(const std::string& path) -> Ref<CubemapTexture>; - }; -};
\ No newline at end of file |
