diff --git a/include/renderer.h b/include/renderer.h index dc0f7c1..c96493f 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -33,7 +33,7 @@ class Renderer { void PreRender(bool window_is_resized, glm::mat4 camera_transform); // staticList can be nullptr to render nothing - void Render(const RenderList* static_list, const RenderList* dynamic_list); + void Render(const RenderList& static_list, const RenderList& dynamic_list); // getters @@ -96,4 +96,4 @@ class Renderer { } // namespace engine -#endif \ No newline at end of file +#endif diff --git a/src/application.cpp b/src/application.cpp index b82ae75..d9213d4 100644 --- a/src/application.cpp +++ b/src/application.cpp @@ -183,7 +183,7 @@ void Application::GameLoop() { auto mesh_render_system = scene->GetSystem(); const RenderList* static_list = mesh_render_system->GetStaticRenderList(); const RenderList* dynamic_list = mesh_render_system->GetDynamicRenderList(); - renderer_->Render(static_list, dynamic_list); + renderer_->Render(*static_list, *dynamic_list); } /* poll events */ diff --git a/src/renderer.cpp b/src/renderer.cpp index f3a9c02..008a9f0 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -90,20 +90,17 @@ void Renderer::PreRender(bool window_is_resized, glm::mat4 camera_transform) { &frame_uniform.uniform_buffer_data); } -void Renderer::Render(const RenderList* static_list, - const RenderList* dynamic_list) { - assert(static_list != nullptr); - assert(dynamic_list != nullptr); - +void Renderer::Render(const RenderList& static_list, + const RenderList& dynamic_list) { last_bound_pipeline_ = nullptr; gfx::DrawBuffer* draw_buffer = device_->BeginRender(); - if (!static_list->empty()) { - DrawRenderList(draw_buffer, *static_list); + if (!static_list.empty()) { + DrawRenderList(draw_buffer, static_list); } - if (!dynamic_list->empty()) { - DrawRenderList(draw_buffer, *dynamic_list); + if (!dynamic_list.empty()) { + DrawRenderList(draw_buffer, dynamic_list); } device_->FinishRender(draw_buffer); @@ -138,4 +135,4 @@ void Renderer::DrawRenderList(gfx::DrawBuffer* draw_buffer, } } -} // namespace engine \ No newline at end of file +} // namespace engine diff --git a/src/systems/mesh_render_system.cpp b/src/systems/mesh_render_system.cpp index bb56408..d984471 100644 --- a/src/systems/mesh_render_system.cpp +++ b/src/systems/mesh_render_system.cpp @@ -27,9 +27,11 @@ void MeshRenderSystem::OnComponentInsert(uint32_t entity) { void MeshRenderSystem::OnUpdate(float ts) { // do stuff (void)ts; + // update the static render list only if it needs updating if (list_needs_rebuild_) { RebuildStaticRenderList(); } + // update the dynamic render list always BuildRenderList(dynamic_render_list_, false); }