hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/rendering/renderer.h
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/rendering/renderer.h
parent3d8d3259e1cf5a7d88e5d1e530cc8c9bf9140734 (diff)
feat: complete first geodesic 3D raytracing
Diffstat (limited to 'src/rendering/renderer.h')
-rw-r--r--src/rendering/renderer.h52
1 files changed, 40 insertions, 12 deletions
diff --git a/src/rendering/renderer.h b/src/rendering/renderer.h
index 4a028e5..67ad998 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 set_viewport(uint32_t x, uint32_t y,
- uint32_t width, uint32_t height) = 0;
- virtual void set_clear_color(const glm::vec4& color) = 0;
- virtual void clear() = 0;
- virtual void enable_depth_test() = 0;
- virtual void disable_depth_test() = 0;
- virtual void set_face_culling(bool enabled) = 0;
- virtual void enable_blending() = 0;
- virtual void disable_blending() = 0;
+ uint32_t width, uint32_t height) = 0;
+ virtual void set_clear_color(const glm::vec4& color) = 0;
+ virtual void clear() = 0;
+ virtual void enable_depth_test() = 0;
+ virtual void disable_depth_test() = 0;
+ virtual void set_face_culling(bool enabled) = 0;
+ virtual void enable_blending() = 0;
+ virtual void disable_blending() = 0;
virtual void draw_indexed(const Ref<VertexArray>& vertex_array,
- uint32_t index_count = 0) = 0;
+ uint32_t index_count = 0) = 0;
+
+ virtual void draw_arrays(uint32_t vertex_count, uint32_t first = 0) = 0;
+ virtual void draw_lines(const Ref<VertexArray>& vertex_array,
+ uint32_t index_count = 0) = 0;
+ virtual void bind_texture(uint32_t texture_id, uint32_t slot = 0) = 0;
+ virtual void bind_image_texture(uint32_t texture_id,
+ uint32_t slot = 0,
+ bool read_only = false) = 0;
inline static API get_api() { return s_api; }
inline static void set_api(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_renderer_api->draw_indexed(vertex_array, index_count);
}
+ inline static void draw_arrays(uint32_t vertex_count, uint32_t first = 0)
+ {
+ s_renderer_api->draw_arrays(vertex_count, first);
+ }
+
+ inline static void draw_lines(const Ref<VertexArray>& vertex_array, uint32_t index_count = 0)
+ {
+ s_renderer_api->draw_lines(vertex_array, index_count);
+ }
+
+ inline static void bind_texture(uint32_t texture_id, uint32_t slot = 0)
+ {
+ s_renderer_api->bind_texture(texture_id, slot);
+ }
+
+ inline static void bind_image_texture(uint32_t texture_id, uint32_t slot = 0, bool read_only = false)
+ {
+ s_renderer_api->bind_image_texture(texture_id, slot, read_only);
+ }
+
private:
- static Ref<RendererAPI> s_renderer_api;
+ static Scope<RendererAPI> s_renderer_api;
};
class Renderer