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;
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;

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);
_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;
});
}

View file

@ -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;

View file

@ -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) {

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() {
return "";
return "~";
}