hachem.wtf
aboutsummaryrefslogtreecommitdiff
path: root/src/rendering
diff options
context:
space:
mode:
authorhachem <im@hachem.wtf>2025-08-12 18:41:26 +0200
committerhachem <im@hachem.wtf>2025-08-12 18:41:26 +0200
commit7e06a916e6a385c37075abcb83d14b8c1fef7bc0 (patch)
tree8054d96e89d43b0f98b75af726079d723a70ca2a /src/rendering
parent50cdd344a3ed87c75a67739e2ffd34762e9b0895 (diff)
feat: camera
Diffstat (limited to 'src/rendering')
-rw-r--r--src/rendering/renderer.cpp45
-rw-r--r--src/rendering/renderer.h34
2 files changed, 40 insertions, 39 deletions
diff --git a/src/rendering/renderer.cpp b/src/rendering/renderer.cpp
index 1da5034..19917a6 100644
--- a/src/rendering/renderer.cpp
+++ b/src/rendering/renderer.cpp
@@ -3,10 +3,12 @@
#include <memory>
#include <glm/gtc/matrix_transform.hpp>
-namespace Donut {
-
- Scope<RendererAPI> RendererAPI::create() {
- switch (s_api) {
+namespace Donut
+{
+ Scope<RendererAPI> RendererAPI::create()
+ {
+ switch (s_api)
+ {
case API::OpenGL:
return std::make_unique<OpenGLRendererAPI>();
default:
@@ -16,32 +18,28 @@ namespace Donut {
RendererAPI::API RendererAPI::s_api = RendererAPI::API::OpenGL;
- Renderer::SceneData* Renderer::s_scene_data = new Renderer::SceneData;
-
- void Renderer::init() {
+ void Renderer::init()
+ {
RenderCommand::init();
+ RenderCommand::enable_depth_test();
}
- void Renderer::shutdown() {
- delete s_scene_data;
+ void Renderer::shutdown()
+ {
}
- void Renderer::on_window_resize(uint32_t width, uint32_t height) {
+ void Renderer::on_window_resize(uint32_t width, uint32_t height)
+ {
RenderCommand::set_viewport(0, 0, width, height);
}
- void Renderer::begin_scene() {
- s_scene_data->ViewProjectionMatrix = glm::ortho(-1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f);
- }
-
- void Renderer::end_scene() {
- }
-
void Renderer::submit(const std::shared_ptr<Shader>& shader,
const std::shared_ptr<VertexArray>& vertex_array,
- const glm::mat4& transform) {
+ const glm::mat4& transform,
+ const glm::mat4& view_projection)
+ {
shader->bind();
- shader->set_mat4("u_ViewProjection", s_scene_data->ViewProjectionMatrix);
+ shader->set_mat4("u_ViewProjection", view_projection);
shader->set_mat4("u_Transform", transform);
vertex_array->bind();
@@ -50,12 +48,13 @@ namespace Donut {
Scope<RendererAPI> RenderCommand::s_renderer_api = RendererAPI::create();
- void Renderer::set_clear_color(const glm::vec4& color) {
+ void Renderer::set_clear_color(const glm::vec4& color)
+ {
RenderCommand::set_clear_color(color);
}
- void Renderer::clear() {
+ void Renderer::clear()
+ {
RenderCommand::clear();
}
-
-}
+};
diff --git a/src/rendering/renderer.h b/src/rendering/renderer.h
index fd61914..09e9521 100644
--- a/src/rendering/renderer.h
+++ b/src/rendering/renderer.h
@@ -33,6 +33,7 @@ namespace Donut
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 draw_indexed(const std::shared_ptr<VertexArray>& vertex_array, uint32_t index_count = 0) = 0;
@@ -46,23 +47,33 @@ namespace Donut
class RenderCommand
{
public:
- inline static void init() {
+ inline static void init()
+ {
s_renderer_api->init();
}
- inline static void set_viewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height) {
+ inline static void set_viewport(uint32_t x, uint32_t y, uint32_t width, uint32_t height)
+ {
s_renderer_api->set_viewport(x, y, width, height);
}
- inline static void set_clear_color(const glm::vec4& color) {
+ inline static void set_clear_color(const glm::vec4& color)
+ {
s_renderer_api->set_clear_color(color);
}
- inline static void clear() {
+ inline static void clear()
+ {
s_renderer_api->clear();
}
- inline static void draw_indexed(const std::shared_ptr<VertexArray>& vertex_array, uint32_t index_count = 0) {
+ inline static void enable_depth_test()
+ {
+ s_renderer_api->enable_depth_test();
+ }
+
+ inline static void draw_indexed(const std::shared_ptr<VertexArray>& vertex_array, uint32_t index_count = 0)
+ {
s_renderer_api->draw_indexed(vertex_array, index_count);
}
@@ -78,23 +89,14 @@ namespace Donut
static void on_window_resize(uint32_t width, uint32_t height);
- static void begin_scene();
- static void end_scene();
-
static void submit(const std::shared_ptr<Shader>& shader,
const std::shared_ptr<VertexArray>& vertex_array,
- const glm::mat4& transform = glm::mat4(1.0f));
+ const glm::mat4& transform,
+ const glm::mat4& view_projection);
static void set_clear_color(const glm::vec4& color);
static void clear();
inline static RendererAPI::API get_api() { return RendererAPI::get_api(); }
- private:
- struct SceneData
- {
- glm::mat4 ViewProjectionMatrix;
- };
-
- static SceneData* s_scene_data;
};
};