From aac44f763c90eddd6bb0841da0536efbee1314ce Mon Sep 17 00:00:00 2001 From: redstrate <54911369+redstrate@users.noreply.github.com> Date: Wed, 24 Feb 2021 14:18:51 -0500 Subject: [PATCH] Fix multiviewports crashing on Linux --- engine/core/include/engine.hpp | 6 +++--- engine/core/src/engine.cpp | 6 +++--- engine/renderer/include/renderer.hpp | 8 ++------ engine/renderer/src/renderer.cpp | 6 +++--- platforms/linux/file.cpp | 2 +- 5 files changed, 12 insertions(+), 16 deletions(-) diff --git a/engine/core/include/engine.hpp b/engine/core/include/engine.hpp index 657a8e1..69aba0b 100755 --- a/engine/core/include/engine.hpp +++ b/engine/core/include/engine.hpp @@ -343,15 +343,15 @@ private: prism::Extent extent; bool quitRequested = false; - RenderTarget* render_target; + RenderTarget* render_target = nullptr; }; - std::vector> _windows; + std::vector _windows; Window* get_window(const int identifier) { for(auto& window : _windows) { if(window->identifier == identifier) - return window.get(); + return window; } return nullptr; diff --git a/engine/core/src/engine.cpp b/engine/core/src/engine.cpp index 5aa4cb6..c4a46bf 100755 --- a/engine/core/src/engine.cpp +++ b/engine/core/src/engine.cpp @@ -414,9 +414,9 @@ void Engine::add_window(void* native_handle, const int identifier, const prism:: _gfx->initialize_view(native_handle, identifier, drawable_extent.width, drawable_extent.height); - _windows.push_back(std::make_unique()); + Window* window = new Window(); + _windows.push_back(window); - Window* window = _windows.back().get(); window->identifier = identifier; window->extent = extent; window->render_target = _renderer->allocate_render_target(drawable_extent); @@ -427,7 +427,7 @@ void Engine::add_window(void* native_handle, const int identifier, const prism:: void Engine::remove_window(const int identifier) { Expects(identifier >= 0); - utility::erase_if(_windows, [identifier](std::unique_ptr& w) { + utility::erase_if(_windows, [identifier](Window*& w) { return w->identifier == identifier; }); } diff --git a/engine/renderer/include/renderer.hpp b/engine/renderer/include/renderer.hpp index 73ea239..3522718 100755 --- a/engine/renderer/include/renderer.hpp +++ b/engine/renderer/include/renderer.hpp @@ -112,11 +112,7 @@ public: bool reloading_shader = false; std::vector get_all_render_targets() const { - std::vector targets; - for(auto& target : render_targets) - targets.push_back(target.get()); - - return targets; + return render_targets; } private: @@ -131,7 +127,7 @@ private: GFX* gfx = nullptr; - std::vector> render_targets; + std::vector render_targets; ui::Screen* current_screen = nullptr; diff --git a/engine/renderer/src/renderer.cpp b/engine/renderer/src/renderer.cpp index d724856..70e1561 100755 --- a/engine/renderer/src/renderer.cpp +++ b/engine/renderer/src/renderer.cpp @@ -119,13 +119,13 @@ Renderer::Renderer(GFX* gfx, const bool enable_imgui) : gfx(gfx) { Renderer::~Renderer() {} RenderTarget* Renderer::allocate_render_target(const prism::Extent extent) { - auto target = std::make_unique(); + auto target = new RenderTarget(); resize_render_target(*target, extent); - render_targets.push_back(std::move(target)); + render_targets.push_back(target); - return render_targets.back().get(); + return target; } void Renderer::resize_render_target(RenderTarget& target, const prism::Extent extent) { diff --git a/platforms/linux/file.cpp b/platforms/linux/file.cpp index ae7de43..0221fa6 100644 --- a/platforms/linux/file.cpp +++ b/platforms/linux/file.cpp @@ -7,5 +7,5 @@ void file::set_domain_path(const file::Domain domain, const file::Path path) { } file::Path file::get_writeable_directory() { - return ""; + return "~"; }