Archived
1
Fork 0

Fix multiviewports crashing on Linux

This commit is contained in:
redstrate 2021-02-24 14:18:51 -05:00
parent c7efea5258
commit aac44f763c
5 changed files with 12 additions and 16 deletions

View file

@ -343,15 +343,15 @@ private:
prism::Extent extent; prism::Extent extent;
bool quitRequested = false; bool quitRequested = false;
RenderTarget* render_target; RenderTarget* render_target = nullptr;
}; };
std::vector<std::unique_ptr<Window>> _windows; std::vector<Window*> _windows;
Window* get_window(const int identifier) { Window* get_window(const int identifier) {
for(auto& window : _windows) { for(auto& window : _windows) {
if(window->identifier == identifier) if(window->identifier == identifier)
return window.get(); return window;
} }
return nullptr; return nullptr;

View file

@ -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); _gfx->initialize_view(native_handle, identifier, drawable_extent.width, drawable_extent.height);
_windows.push_back(std::make_unique<Window>()); Window* window = new Window();
_windows.push_back(window);
Window* window = _windows.back().get();
window->identifier = identifier; window->identifier = identifier;
window->extent = extent; window->extent = extent;
window->render_target = _renderer->allocate_render_target(drawable_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) { void Engine::remove_window(const int identifier) {
Expects(identifier >= 0); Expects(identifier >= 0);
utility::erase_if(_windows, [identifier](std::unique_ptr<Window>& w) { utility::erase_if(_windows, [identifier](Window*& w) {
return w->identifier == identifier; return w->identifier == identifier;
}); });
} }

View file

@ -112,11 +112,7 @@ public:
bool reloading_shader = false; bool reloading_shader = false;
std::vector<RenderTarget*> get_all_render_targets() const { std::vector<RenderTarget*> get_all_render_targets() const {
std::vector<RenderTarget*> targets; return render_targets;
for(auto& target : render_targets)
targets.push_back(target.get());
return targets;
} }
private: private:
@ -131,7 +127,7 @@ private:
GFX* gfx = nullptr; GFX* gfx = nullptr;
std::vector<std::unique_ptr<RenderTarget>> render_targets; std::vector<RenderTarget*> render_targets;
ui::Screen* current_screen = nullptr; ui::Screen* current_screen = nullptr;

View file

@ -119,13 +119,13 @@ Renderer::Renderer(GFX* gfx, const bool enable_imgui) : gfx(gfx) {
Renderer::~Renderer() {} Renderer::~Renderer() {}
RenderTarget* Renderer::allocate_render_target(const prism::Extent extent) { RenderTarget* Renderer::allocate_render_target(const prism::Extent extent) {
auto target = std::make_unique<RenderTarget>(); auto target = new RenderTarget();
resize_render_target(*target, extent); 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) { void Renderer::resize_render_target(RenderTarget& target, const prism::Extent extent) {

View file

@ -7,5 +7,5 @@ void file::set_domain_path(const file::Domain domain, const file::Path path) {
} }
file::Path file::get_writeable_directory() { file::Path file::get_writeable_directory() {
return ""; return "~";
} }