hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/platform
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-15 03:18:29 +0200
committerhachem <im@hachem.wtf>2025-08-15 03:18:29 +0200
commita6655eebe2a69ee427264bd43df5747851ed96df (patch)
treefa8c6ef862898a3d8e19250698dca0d9aaf4f9c2 /src/platform
parent3d8d3259e1cf5a7d88e5d1e530cc8c9bf9140734 (diff)
feat: complete first geodesic 3D raytracing
Diffstat (limited to 'src/platform')
-rw-r--r--src/platform/opengl/opengl_renderer_api.cpp23
-rw-r--r--src/platform/opengl/opengl_renderer_api.h10
-rw-r--r--src/platform/opengl/opengl_uniform_buffer.h7
-rw-r--r--src/platform/vulkan/vulkan_renderer_api.cpp76
-rw-r--r--src/platform/vulkan/vulkan_renderer_api.h44
-rw-r--r--src/platform/vulkan/vulkan_uniform_buffer.h7
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;
};
};