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 | a6655eebe2a69ee427264bd43df5747851ed96df (patch) | |
| tree | fa8c6ef862898a3d8e19250698dca0d9aaf4f9c2 /src/platform | |
| parent | 3d8d3259e1cf5a7d88e5d1e530cc8c9bf9140734 (diff) | |
feat: complete first geodesic 3D raytracing
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/opengl/opengl_renderer_api.cpp | 23 | ||||
| -rw-r--r-- | src/platform/opengl/opengl_renderer_api.h | 10 | ||||
| -rw-r--r-- | src/platform/opengl/opengl_uniform_buffer.h | 7 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_renderer_api.cpp | 76 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_renderer_api.h | 44 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_uniform_buffer.h | 7 |
6 files changed, 112 insertions, 55 deletions
diff --git a/src/platform/opengl/opengl_renderer_api.cpp b/src/platform/opengl/opengl_renderer_api.cpp index 628c0af..bfb79ac 100644 --- a/src/platform/opengl/opengl_renderer_api.cpp +++ b/src/platform/opengl/opengl_renderer_api.cpp @@ -83,4 +83,27 @@ namespace Donut glDrawElements(GL_TRIANGLES, count, GL_UNSIGNED_INT, nullptr); glBindTexture(GL_TEXTURE_2D, 0); } + + void OpenGLRendererAPI::draw_arrays(uint32_t vertex_count, uint32_t first) + { + glDrawArrays(GL_TRIANGLES, first, vertex_count); + } + + void OpenGLRendererAPI::draw_lines(const Ref<VertexArray>& vertex_array, uint32_t index_count) + { + uint32_t count = index_count ? index_count : vertex_array->get_index_buffer()->get_count(); + glDrawElements(GL_LINES, count, GL_UNSIGNED_INT, nullptr); + } + + void OpenGLRendererAPI::bind_texture(uint32_t texture_id, uint32_t slot) + { + glActiveTexture(GL_TEXTURE0 + slot); + glBindTexture(GL_TEXTURE_2D, texture_id); + } + + void OpenGLRendererAPI::bind_image_texture(uint32_t texture_id, uint32_t slot, bool read_only) + { + glBindImageTexture(slot, texture_id, 0, GL_FALSE, 0, + read_only ? GL_READ_ONLY : GL_WRITE_ONLY, GL_RGBA8); + } }; diff --git a/src/platform/opengl/opengl_renderer_api.h b/src/platform/opengl/opengl_renderer_api.h index fd446c6..45e6a7b 100644 --- a/src/platform/opengl/opengl_renderer_api.h +++ b/src/platform/opengl/opengl_renderer_api.h @@ -26,5 +26,15 @@ namespace Donut virtual void draw_indexed(const Ref<VertexArray>& vertex_array, uint32_t index_count = 0) override; + + virtual void draw_arrays(uint32_t vertex_count, + uint32_t first = 0) override; + virtual void draw_lines(const Ref<VertexArray>& vertex_array, + uint32_t index_count = 0) override; + virtual void bind_texture(uint32_t texture_id, + uint32_t slot = 0) override; + virtual void bind_image_texture(uint32_t texture_id, + uint32_t slot = 0, + bool read_only = false) override; }; }; diff --git a/src/platform/opengl/opengl_uniform_buffer.h b/src/platform/opengl/opengl_uniform_buffer.h index 2a9131f..ae99a56 100644 --- a/src/platform/opengl/opengl_uniform_buffer.h +++ b/src/platform/opengl/opengl_uniform_buffer.h @@ -12,11 +12,10 @@ namespace Donut virtual ~OpenGLUniformBuffer(); virtual void set_data(const void* data, uint32_t size, uint32_t offset = 0) override; - virtual void bind(uint32_t binding) override; - + virtual void bind(uint32_t binding) override; private: uint32_t m_renderer_id = 0; - uint32_t m_size = 0; - uint32_t m_binding = 0; + uint32_t m_size = 0; + uint32_t m_binding = 0; }; }; diff --git a/src/platform/vulkan/vulkan_renderer_api.cpp b/src/platform/vulkan/vulkan_renderer_api.cpp index 6273d31..8a3069e 100644 --- a/src/platform/vulkan/vulkan_renderer_api.cpp +++ b/src/platform/vulkan/vulkan_renderer_api.cpp @@ -2,43 +2,59 @@ namespace Donut { - void VulkanRendererAPI::init() - { - } + void VulkanRendererAPI::init() + { + } - void VulkanRendererAPI::set_viewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) - { - } + 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::set_clear_color(const glm::vec4& color) + { + } - void VulkanRendererAPI::clear() - { - } + void VulkanRendererAPI::clear() + { + } - void VulkanRendererAPI::enable_depth_test() - { - } + void VulkanRendererAPI::enable_depth_test() + { + } - void VulkanRendererAPI::disable_depth_test() - { - } + void VulkanRendererAPI::disable_depth_test() + { + } - void VulkanRendererAPI::set_face_culling(bool enabled) - { - } + void VulkanRendererAPI::set_face_culling(bool enabled) + { + } - void VulkanRendererAPI::enable_blending() - { - } + void VulkanRendererAPI::enable_blending() + { + } - void VulkanRendererAPI::disable_blending() - { - } + void VulkanRendererAPI::disable_blending() + { + } - void VulkanRendererAPI::draw_indexed(const Ref<VertexArray>& vertex_array, uint32_t index_count) - { - } + void VulkanRendererAPI::draw_indexed(const Ref<VertexArray>& vertex_array, uint32_t index_count) + { + } + + void VulkanRendererAPI::draw_arrays(uint32_t vertex_count, uint32_t first) + { + } + + void VulkanRendererAPI::draw_lines(const Ref<VertexArray>& vertex_array, uint32_t index_count) + { + } + + void VulkanRendererAPI::bind_texture(uint32_t texture_id, uint32_t slot) + { + } + + void VulkanRendererAPI::bind_image_texture(uint32_t texture_id, uint32_t slot, bool read_only) + { + } }; diff --git a/src/platform/vulkan/vulkan_renderer_api.h b/src/platform/vulkan/vulkan_renderer_api.h index c0075a2..e1d4566 100644 --- a/src/platform/vulkan/vulkan_renderer_api.h +++ b/src/platform/vulkan/vulkan_renderer_api.h @@ -5,22 +5,32 @@ 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 disable_depth_test() override; - virtual void set_face_culling(bool enabled) override; - virtual void enable_blending() override; - virtual void disable_blending() override; + 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 disable_depth_test() override; + virtual void set_face_culling(bool enabled) override; + virtual void enable_blending() override; + virtual void disable_blending() override; - virtual void draw_indexed(const Ref<VertexArray>& vertex_array, - uint32_t index_count = 0) override; - }; + virtual void draw_indexed(const Ref<VertexArray>& vertex_array, + uint32_t index_count = 0) override; + + virtual void draw_arrays(uint32_t vertex_count, + uint32_t first = 0) override; + virtual void draw_lines(const Ref<VertexArray>& vertex_array, + uint32_t index_count = 0) override; + virtual void bind_texture(uint32_t texture_id, + uint32_t slot = 0) override; + virtual void bind_image_texture(uint32_t texture_id, + uint32_t slot = 0, + bool read_only = false) override; + }; }; diff --git a/src/platform/vulkan/vulkan_uniform_buffer.h b/src/platform/vulkan/vulkan_uniform_buffer.h index e3c9196..8dd7686 100644 --- a/src/platform/vulkan/vulkan_uniform_buffer.h +++ b/src/platform/vulkan/vulkan_uniform_buffer.h @@ -11,10 +11,9 @@ namespace Donut virtual ~VulkanUniformBuffer(); virtual void set_data(const void* data, uint32_t size, uint32_t offset = 0) override; - virtual void bind(uint32_t binding) override; - + virtual void bind(uint32_t binding) override; private: - uint32_t m_size = 0; - uint32_t m_binding = 0; + uint32_t m_size; + uint32_t m_binding; }; }; |
