diff --git a/src/graphics/ui/elements/ModelViewer.cpp b/src/graphics/ui/elements/ModelViewer.cpp index 727110f8b..748eabae5 100644 --- a/src/graphics/ui/elements/ModelViewer.cpp +++ b/src/graphics/ui/elements/ModelViewer.cpp @@ -13,6 +13,7 @@ #include "window/Window.hpp" #include "../GUI.hpp" +// TODO: remove // TODO: remove #include @@ -24,8 +25,7 @@ ModelViewer::ModelViewer( : Container(gui, size), modelName(modelName), camera(), - batch(std::make_unique(1024)), - fbo(std::make_unique(size.x, size.y)) { + batch(std::make_unique(1024)) { camera.perspective = true; camera.position = glm::vec3(2, 2, 2); } @@ -115,7 +115,13 @@ void ModelViewer::draw(const DrawContext& pctx, const Assets& assets) { return; } auto& prevShader = Shader::getUsed(); - + + if (!fbo) { + if (size.x <= 0 || size.y <= 0) { + return; + } + fbo = std::make_unique(size.x, size.y); + } fbo->resize(size.x, size.y); { glDisable(GL_SCISSOR_TEST); @@ -154,6 +160,13 @@ void ModelViewer::draw(const DrawContext& pctx, const Assets& assets) { Container::draw(pctx, assets); } +void ModelViewer::setVisible(bool flag) { + if (!flag && fbo) { + fbo.reset(); + } + Container::setVisible(flag); +} + void ModelViewer::setCenter(const glm::vec3& center) { this->center = center; } diff --git a/src/graphics/ui/elements/ModelViewer.hpp b/src/graphics/ui/elements/ModelViewer.hpp index 4e841faae..8cf999bb9 100644 --- a/src/graphics/ui/elements/ModelViewer.hpp +++ b/src/graphics/ui/elements/ModelViewer.hpp @@ -23,7 +23,6 @@ namespace gui { bool grabbing = false; public: ModelViewer(GUI& gui, const glm::vec2& size, const std::string& modelName); - ~ModelViewer(); void setModel(const std::string& modelName); @@ -34,6 +33,7 @@ namespace gui { void act(float delta) override; void draw(const DrawContext& pctx, const Assets& assets) override; + void setVisible(bool flag) override; void setRotation(const glm::vec3& euler); void setCenter(const glm::vec3& center);