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;
|
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;
|
||||||
|
|
|
@ -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;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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 "~";
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue