Fix multiviewports crashing on Linux
This commit is contained in:
parent
c7efea5258
commit
aac44f763c
5 changed files with 12 additions and 16 deletions
|
@ -343,15 +343,15 @@ private:
|
|||
prism::Extent extent;
|
||||
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) {
|
||||
for(auto& window : _windows) {
|
||||
if(window->identifier == identifier)
|
||||
return window.get();
|
||||
return window;
|
||||
}
|
||||
|
||||
return nullptr;
|
||||
|
|
|
@ -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* 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<Window>& w) {
|
||||
utility::erase_if(_windows, [identifier](Window*& w) {
|
||||
return w->identifier == identifier;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -112,11 +112,7 @@ public:
|
|||
bool reloading_shader = false;
|
||||
|
||||
std::vector<RenderTarget*> get_all_render_targets() const {
|
||||
std::vector<RenderTarget*> 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<std::unique_ptr<RenderTarget>> render_targets;
|
||||
std::vector<RenderTarget*> render_targets;
|
||||
|
||||
ui::Screen* current_screen = nullptr;
|
||||
|
||||
|
|
|
@ -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<RenderTarget>();
|
||||
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) {
|
||||
|
|
|
@ -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 "~";
|
||||
}
|
||||
|
|
Reference in a new issue