Skip to content

Commit 2ca0337

Browse files
committed
Multiple cameras
1 parent 43fc0a8 commit 2ca0337

16 files changed

+47
-59
lines changed

engine/renderer/camera.cpp

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,11 +51,6 @@ namespace egkr
5151
return view_;
5252
}
5353

54-
float4x4 camera::get_projection() const
55-
{
56-
return glm::perspective(fov_, aspect_ratio_, near_clip_, far_clip_);
57-
}
58-
5954
float3 camera::get_forward() const
6055
{
6156
return -glm::normalize(glm::inverse(view_)[2]);
@@ -152,11 +147,6 @@ namespace egkr
152147
is_dirty_ = true;
153148
}
154149

155-
float camera::get_fov() const
156-
{
157-
return fov_;
158-
}
159-
160150
float camera::get_near_clip() const
161151
{
162152
return near_clip_;

engine/renderer/camera.h

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ namespace egkr
2222
void set_aspect(float aspect);
2323

2424
[[nodiscard]] float4x4 get_view();
25-
[[nodiscard]] float4x4 get_projection() const;
2625

2726
[[nodiscard]] float3 get_forward() const;
2827
[[nodiscard]] float3 get_back() const;
@@ -31,7 +30,6 @@ namespace egkr
3130
[[nodiscard]] float3 get_up() const;
3231
[[nodiscard]] float3 get_down() const;
3332

34-
[[nodiscard]] float get_fov() const;
3533
[[nodiscard]] float get_far_clip() const;
3634
[[nodiscard]] float get_near_clip() const;
3735

@@ -53,7 +51,6 @@ namespace egkr
5351

5452
float4x4 view_{};
5553

56-
float fov_{glm::radians(45.F)};
5754
float near_clip_{0.1F};
5855
float far_clip_{ 1000.F };
5956
float aspect_ratio_{ 1.333f };

engine/renderer/render_view.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,6 @@ namespace egkr
3535
type_{ view_configuration.view_type },
3636
custom_shader_name_{ view_configuration.custom_shader_name }
3737
{
38-
camera_ = camera_system::get_default();
39-
4038
for (const auto& pass : view_configuration.passes)
4139
{
4240
auto renderpass = renderpass::renderpass::create(pass);

engine/renderer/render_view.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ namespace egkr
7070
virtual bool on_create() = 0;
7171
virtual bool on_destroy() = 0;
7272
virtual void on_resize(uint32_t width, uint32_t height) = 0;
73-
virtual render_view_packet on_build_packet(void* data, viewport* viewport) = 0;
73+
virtual render_view_packet on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport) = 0;
7474
virtual bool on_render(render_view_packet* render_view_packet, const frame_data& frame_data) const = 0;
7575

7676
virtual bool regenerate_attachment_target(uint32_t /*pass_index*/, const render_target::attachment& /*attachment*/) { return true; }
@@ -87,7 +87,6 @@ namespace egkr
8787
uint32_t mode_{};
8888
std::vector<renderpass::renderpass::shared_ptr> renderpasses_;
8989
std::string custom_shader_name_;
90-
camera::shared_ptr camera_;
9190
};
9291

9392
struct skybox_packet_data

engine/renderer/views/render_view_editor.cpp

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,10 +21,10 @@ namespace egkr
2121
shader_system::create_shader(*properties, renderpasses_[0].get());
2222
resource_system::unload(colour_shader);
2323

24-
auto col_shader = shader_system::get_shader(colour_3d_shader_name);
25-
locations_.projection = col_shader->get_uniform_index("projection");
26-
locations_.view = col_shader->get_uniform_index("view");
27-
locations_.model = col_shader->get_uniform_index("model");
24+
colour_shader_ = shader_system::get_shader(colour_3d_shader_name);
25+
locations_.projection = colour_shader_->get_uniform_index("projection");
26+
locations_.view = colour_shader_->get_uniform_index("view");
27+
locations_.model = colour_shader_->get_uniform_index("model");
2828
event::register_event(event::code::render_target_refresh_required, this, on_event);
2929
return true;
3030
}
@@ -43,13 +43,13 @@ namespace egkr
4343
height_ = height;
4444
}
4545
}
46-
render_view_packet render_view_editor::on_build_packet(void* data, viewport* viewport)
46+
render_view_packet render_view_editor::on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport)
4747
{
4848
render_view_packet packet{};
4949

5050
packet.view = this;
51-
packet.view_matrix = camera_->get_view();
52-
packet.view_position = camera_->get_position();
51+
packet.view_matrix = camera->get_view();
52+
packet.view_position = camera->get_position();
5353
packet.ambient_colour = ambient_colour_;
5454
packet.view_viewport = viewport;
5555
gizmo_ = *(editor::gizmo*)data;
@@ -65,21 +65,19 @@ namespace egkr
6565
{
6666
pass->begin(pass->get_render_targets()[frame_data.render_target_index].get());
6767

68-
auto colour_shader = shader_system::get_shader("Shader.Builtin.Colour3DShader");
69-
shader_system::use(colour_shader->get_id());
70-
colour_shader->bind_globals();
71-
bool needs_update = (frame_data.frame_number != colour_shader->get_frame_number()) || (frame_data.draw_index != colour_shader->get_draw_index());
68+
shader_system::use(colour_shader_->get_id());
69+
colour_shader_->bind_globals();
70+
bool needs_update = (frame_data.frame_number != colour_shader_->get_frame_number()) || (frame_data.draw_index != colour_shader_->get_draw_index());
7271
if (needs_update)
7372
{
7473
shader_system::set_uniform(locations_.projection, &render_view_packet->view_viewport->projection);
7574
shader_system::set_uniform(locations_.view, &render_view_packet->view_matrix);
7675
}
7776
shader_system::apply_global(needs_update);
7877

79-
const auto& camera_position = camera_->get_position();
8078
const auto& gizmo_position = gizmo_.get_position();
8179

82-
const auto distance = glm::distance(camera_position, gizmo_position);
80+
const auto distance = glm::distance(render_view_packet->view_position, gizmo_position);
8381

8482
gizmo_.get_selected_model()
8583
.and_then([&](float4x4 model) -> std::optional<float4x4>
@@ -91,7 +89,7 @@ namespace egkr
9189
glm::quat rotation;
9290
glm::decompose(model, model_scale, rotation, translation, skew, perspective);
9391
const float fixed_size{ 0.1F };
94-
auto scale_factor = (2 * std::tan(camera_->get_fov() / 2) * distance) * fixed_size;
92+
auto scale_factor = (2 * std::tan(render_view_packet->view_viewport->fov / 2) * distance) * fixed_size;
9593
editor::gizmo::set_scale(scale_factor);
9694
float4x4 scale = glm::scale(glm::mat4x4(1.f), { scale_factor, scale_factor, scale_factor });
9795

engine/renderer/views/render_view_editor.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ namespace egkr
1414
bool on_create() override;
1515
bool on_destroy() override;
1616
void on_resize(uint32_t width, uint32_t height) override;
17-
render_view_packet on_build_packet(void* data, viewport* viewport) override;
17+
render_view_packet on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport) override;
1818
bool on_render(render_view_packet* render_view_packet, const frame_data& frame_data) const override;
1919

2020
private:
2121
shader::shader::shared_ptr shader_{};
22+
shader::shader::shared_ptr colour_shader_{};
2223
float4 ambient_colour_{};
2324
int render_mode{};
2425
debug_colour_shader_locations locations_{};

engine/renderer/views/render_view_ui.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ namespace egkr
5050
}
5151
}
5252

53-
render_view_packet render_view_ui::on_build_packet(void* data, viewport* viewport)
53+
render_view_packet render_view_ui::on_build_packet(void* data, const camera::shared_ptr& /*camera*/, viewport* viewport)
5454
{
5555
auto* ui_data = (ui_packet_data*)data;
5656

engine/renderer/views/render_view_ui.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ namespace egkr
1414
bool on_create() override;
1515
bool on_destroy() override;
1616
void on_resize(uint32_t width, uint32_t height) override;
17-
render_view_packet on_build_packet(void* data, viewport* viewport) override;
17+
render_view_packet on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport) override;
1818
bool on_render(render_view_packet* render_view_packet, const frame_data& frame_data) const override;
1919
private:
2020

engine/renderer/views/render_view_world.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,15 +66,15 @@ namespace egkr
6666
height_ = height;
6767
}
6868
}
69-
render_view_packet render_view_world::on_build_packet(void* data, viewport* viewport)
69+
render_view_packet render_view_world::on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport)
7070
{
7171
auto* mesh_data = (frame_geometry_data*)data;
7272

7373
render_view_packet packet{};
7474

7575
packet.view = this;
76-
packet.view_matrix = camera_->get_view();
77-
packet.view_position = camera_->get_position();
76+
packet.view_matrix = camera->get_view();
77+
packet.view_position = camera->get_position();
7878
packet.ambient_colour = ambient_colour_;
7979
packet.render_packet_data = mesh_data->world_geometries;
8080
packet.debug_render_data = mesh_data->debug_geometries;
@@ -94,7 +94,7 @@ namespace egkr
9494
{
9595

9696
shader_system::use(skybox_shader_->get_id());
97-
float4x4 view = camera_->get_view();
97+
float4x4 view = render_view_packet->view_matrix;
9898
view[3][0] = 0.F;
9999
view[3][1] = 0.F;
100100
view[3][2] = 0.F;

engine/renderer/views/render_view_world.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ namespace egkr
1919
bool on_create() override;
2020
bool on_destroy() override;
2121
void on_resize(uint32_t width, uint32_t height) override;
22-
render_view_packet on_build_packet(void* data, viewport* viewport) override;
22+
render_view_packet on_build_packet(void* data, const camera::shared_ptr& camera, viewport* viewport) override;
2323
bool on_render(render_view_packet* render_view_packet, const frame_data& frame_data) const override;
2424
private:
2525
shader::shader::shared_ptr skybox_shader_{};

0 commit comments

Comments
 (0)