From 63f844a20da907bc090f56eb62c2d5b75f768a28 Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Fri, 5 Feb 2021 19:35:13 -0500 Subject: [PATCH] Batch viewport render commands with main render commands I don't know why I did it the other way...? --- engine/core/include/app.hpp | 3 +++ engine/core/src/engine.cpp | 8 +++++++- engine/renderer/include/renderer.hpp | 3 ++- engine/renderer/src/renderer.cpp | 12 ++++++++---- tools/common/include/commoneditor.hpp | 6 ++++++ tools/editor/include/prismeditor.hpp | 1 + tools/editor/src/prismeditor.cpp | 7 ++++++- 7 files changed, 33 insertions(+), 7 deletions(-) diff --git a/engine/core/include/app.hpp b/engine/core/include/app.hpp index 92c3fde..670dc1a 100755 --- a/engine/core/include/app.hpp +++ b/engine/core/include/app.hpp @@ -1,6 +1,7 @@ #pragma once class Engine; +class GFXCommandBuffer; /// The base class for any Prism application. class App { @@ -23,6 +24,8 @@ public: @param delta_time Delta time in milliseconds. */ virtual void update([[maybe_unused]] const float delta_time) {} + + virtual void render([[maybe_unused]] GFXCommandBuffer* command_buffer) {} }; /// This is an app's equivalent main(). You can check command line arguments through Engine::comand_line_arguments. diff --git a/engine/core/src/engine.cpp b/engine/core/src/engine.cpp index ab80353..7d96e3b 100755 --- a/engine/core/src/engine.cpp +++ b/engine/core/src/engine.cpp @@ -759,8 +759,14 @@ void Engine::render(const int index) { _imgui->render(0); } + GFXCommandBuffer* commandbuffer = _gfx->acquire_command_buffer(); + + _app->render(commandbuffer); + if(window->renderer != nullptr) - window->renderer->render(_current_scene, index); + window->renderer->render(commandbuffer, _current_scene, index); + + _gfx->submit(commandbuffer, index); } void Engine::add_timer(Timer& timer) { diff --git a/engine/renderer/include/renderer.hpp b/engine/renderer/include/renderer.hpp index 7d26fc1..0ac6861 100755 --- a/engine/renderer/include/renderer.hpp +++ b/engine/renderer/include/renderer.hpp @@ -70,7 +70,8 @@ public: int elementOffset = 0; }; - void render(Scene* scene, int index); + void start_render(Scene* scene, int index); + void render(GFXCommandBuffer* command_buffer, Scene* scene, int index); void render_screen(GFXCommandBuffer* commandBuffer, ui::Screen* screen, ControllerContinuity& continuity, RenderScreenOptions options = RenderScreenOptions()); void render_camera(GFXCommandBuffer* command_buffer, Scene& scene, Object camera_object, Camera& camera, prism::Extent extent, ControllerContinuity& continuity); diff --git a/engine/renderer/src/renderer.cpp b/engine/renderer/src/renderer.cpp index 42d612c..7abacc0 100755 --- a/engine/renderer/src/renderer.cpp +++ b/engine/renderer/src/renderer.cpp @@ -211,9 +211,15 @@ void Renderer::stopSceneBlur() { blurring = false; } -void Renderer::render(Scene* scene, int index) { +void Renderer::start_render(Scene* scene, int index) { GFXCommandBuffer* commandbuffer = engine->get_gfx()->acquire_command_buffer(); - + + render(commandbuffer, scene, index); + + gfx->submit(commandbuffer, index); +} + +void Renderer::render(GFXCommandBuffer* commandbuffer, Scene* scene, int index) { if(render_options.render_scale != current_render_scale) { if(viewport_mode) resize_viewport(viewport_extent); @@ -406,8 +412,6 @@ void Renderer::render(Scene* scene, int index) { pass->render_post(commandbuffer, index); commandbuffer->pop_group(); - - gfx->submit(commandbuffer, index); } void Renderer::render_camera(GFXCommandBuffer* command_buffer, Scene& scene, Object camera_object, Camera& camera, prism::Extent extent, ControllerContinuity& continuity) { diff --git a/tools/common/include/commoneditor.hpp b/tools/common/include/commoneditor.hpp index 804dccb..adde4f4 100755 --- a/tools/common/include/commoneditor.hpp +++ b/tools/common/include/commoneditor.hpp @@ -116,6 +116,12 @@ public: void begin_frame() override; void update(float deltaTime) override; + + virtual void renderEditor([[maybe_unused]] GFXCommandBuffer* command_buffer) {} + + void render(GFXCommandBuffer* command_buffer) override { + renderEditor(command_buffer); + } virtual void updateEditor([[maybe_unused]] float deltaTime) {} diff --git a/tools/editor/include/prismeditor.hpp b/tools/editor/include/prismeditor.hpp index 9d0b32a..595e17f 100755 --- a/tools/editor/include/prismeditor.hpp +++ b/tools/editor/include/prismeditor.hpp @@ -56,6 +56,7 @@ class PrismEditor : public CommonEditor { public: PrismEditor(); + void renderEditor(GFXCommandBuffer* command_buffer) override; void drawUI() override; void updateEditor(float deltaTime) override; diff --git a/tools/editor/src/prismeditor.cpp b/tools/editor/src/prismeditor.cpp index acf4496..a03120c 100755 --- a/tools/editor/src/prismeditor.cpp +++ b/tools/editor/src/prismeditor.cpp @@ -179,6 +179,12 @@ void PrismEditor::open_asset(const file::Path path) { } } +void PrismEditor::renderEditor(GFXCommandBuffer* command_buffer) { + for (auto& editor : editors) { + editor->renderer->render(command_buffer, editor->get_scene(), -1); + } +} + void PrismEditor::drawUI() { createDockArea(); @@ -316,7 +322,6 @@ void PrismEditor::drawUI() { if(debugPass != nullptr) debugPass->selected_object = selected_object; - editor->renderer->render(editor->get_scene(), -1); engine->set_current_scene(editor->get_scene()); set_undo_stack(&editor->undo_stack); editor->draw(this);