From 3fbfb9bb33fd967a3863875b1994d89d20613062 Mon Sep 17 00:00:00 2001 From: Sebastian Piwell Date: Mon, 4 Apr 2016 13:49:21 -0400 Subject: [PATCH] Remove screenspacerenderables --- include/openspace/rendering/renderengine.h | 1 + .../rendering/screenspacerenderable.h | 7 +++- .../base/rendering/screenspaceframebuffer.cpp | 9 +++-- modules/base/rendering/screenspaceimage.cpp | 9 +++-- modules/onscreengui/include/gui.h | 1 + .../include/guipropertycomponent.h | 1 + modules/onscreengui/src/gui.cpp | 6 ++++ .../onscreengui/src/guipropertycomponent.cpp | 33 ++++++++++++++++++- src/rendering/renderengine.cpp | 6 ++++ src/rendering/screenspacerenderable.cpp | 29 ++++++++++++---- 10 files changed, 89 insertions(+), 13 deletions(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 3ed2fe0d8f..3cb6d91a3e 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -104,6 +104,7 @@ public: void registerScreenSpaceRenderable(std::shared_ptr s); void unregisterScreenSpaceRenderable(std::shared_ptr s); + void unregisterScreenSpaceRenderable(std::string name); std::shared_ptr screenSpaceRenderable(std::string name); std::unique_ptr buildRenderProgram( diff --git a/include/openspace/rendering/screenspacerenderable.h b/include/openspace/rendering/screenspacerenderable.h index 5d538eea8c..828060689f 100644 --- a/include/openspace/rendering/screenspacerenderable.h +++ b/include/openspace/rendering/screenspacerenderable.h @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -88,6 +89,8 @@ protected: */ glm::vec2 toSpherical(glm::vec2 euclidean); void registerProperties(); + void unregisterProperties(); + void createShaders(); glm::mat4 scaleMatrix(); glm::mat4 rotationMatrix(); @@ -101,6 +104,7 @@ protected: properties::FloatProperty _depth; properties::FloatProperty _scale; properties::FloatProperty _alpha; + properties::TriggerProperty _delete; GLuint _quad; GLuint _vertexPositionBuffer; @@ -115,7 +119,8 @@ protected: const float _planeDepth = -2.0; glm::vec2 _originalViewportSize; - float _radius; + float _radius; + bool _toDelete; }; } // namespace openspace #endif // __SCREENSPACERENDERABLE_H__ \ No newline at end of file diff --git a/modules/base/rendering/screenspaceframebuffer.cpp b/modules/base/rendering/screenspaceframebuffer.cpp index 1d11e7fde0..fe9e16db1f 100644 --- a/modules/base/rendering/screenspaceframebuffer.cpp +++ b/modules/base/rendering/screenspaceframebuffer.cpp @@ -43,7 +43,7 @@ ScreenSpaceFramebuffer::ScreenSpaceFramebuffer() glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution(); addProperty(_size); - OsEng.gui()._property.registerProperty(&_size); + OsEng.gui()._screenSpaceProperty.registerProperty(&_size); _size.set(glm::vec4(0, 0, resolution.x,resolution.y)); _scale.setValue(1.0f); @@ -62,6 +62,8 @@ bool ScreenSpaceFramebuffer::initialize(){ } bool ScreenSpaceFramebuffer::deinitialize(){ + unregisterProperties(); + glDeleteVertexArrays(1, &_quad); _quad = 0; @@ -114,7 +116,10 @@ void ScreenSpaceFramebuffer::render(){ } } -void ScreenSpaceFramebuffer::update(){} +void ScreenSpaceFramebuffer::update(){ + if(_toDelete) + OsEng.renderEngine().unregisterScreenSpaceRenderable(name()); +} bool ScreenSpaceFramebuffer::isReady() const{ bool ready = true; diff --git a/modules/base/rendering/screenspaceimage.cpp b/modules/base/rendering/screenspaceimage.cpp index e50b516238..386c41630f 100644 --- a/modules/base/rendering/screenspaceimage.cpp +++ b/modules/base/rendering/screenspaceimage.cpp @@ -41,7 +41,7 @@ ScreenSpaceImage::ScreenSpaceImage(std::string texturePath) registerProperties(); addProperty(_texturePath); - OsEng.gui()._property.registerProperty(&_texturePath); + OsEng.gui()._screenSpaceProperty.registerProperty(&_texturePath); _texturePath.onChange([this](){ loadTexture(); }); } @@ -58,6 +58,8 @@ bool ScreenSpaceImage::initialize(){ } bool ScreenSpaceImage::deinitialize(){ + unregisterProperties(); + glDeleteVertexArrays(1, &_quad); _quad = 0; @@ -85,7 +87,10 @@ void ScreenSpaceImage::render(){ draw(modelTransform); } -void ScreenSpaceImage::update(){} +void ScreenSpaceImage::update(){ + if(_toDelete) + OsEng.renderEngine().unregisterScreenSpaceRenderable(name()); +} bool ScreenSpaceImage::isReady() const{ diff --git a/modules/onscreengui/include/gui.h b/modules/onscreengui/include/gui.h index ee3144ceb8..02a0822d67 100644 --- a/modules/onscreengui/include/gui.h +++ b/modules/onscreengui/include/gui.h @@ -71,6 +71,7 @@ public: GuiOriginComponent _origin; GuiPerformanceComponent _performance; GuiPropertyComponent _property; + GuiPropertyComponent _screenSpaceProperty; GuiTimeComponent _time; bool _isEnabled; diff --git a/modules/onscreengui/include/guipropertycomponent.h b/modules/onscreengui/include/guipropertycomponent.h index 8a54c0c591..2fcb94303a 100644 --- a/modules/onscreengui/include/guipropertycomponent.h +++ b/modules/onscreengui/include/guipropertycomponent.h @@ -44,6 +44,7 @@ class GuiPropertyComponent : public GuiComponent { public: //void registerProperty(const std::string& propertyDescription); void registerProperty(properties::Property* prop); + void unregisterProperties(std::string owner); void render(); protected: diff --git a/modules/onscreengui/src/gui.cpp b/modules/onscreengui/src/gui.cpp index 9ac7074d63..bfc49e0763 100644 --- a/modules/onscreengui/src/gui.cpp +++ b/modules/onscreengui/src/gui.cpp @@ -203,6 +203,7 @@ void GUI::initialize() { //io.GetClipboardTextFn = ImImpl_GetClipboardTextFn; // @TODO implement? ---abock _property.initialize(); + _screenSpaceProperty.initialize(); _performance.initialize(); _help.initialize(); } @@ -249,6 +250,7 @@ void GUI::initializeGL() { _property.initializeGL(); + _screenSpaceProperty.initializeGL(); _performance.initializeGL(); _help.initializeGL(); } @@ -260,6 +262,7 @@ void GUI::deinitializeGL() { glDeleteBuffers(1, &vbo); _property.deinitializeGL(); + _screenSpaceProperty.deinitializeGL(); _performance.deinitializeGL(); _help.deinitializeGL(); } @@ -288,6 +291,8 @@ void GUI::endFrame() { if (_property.isEnabled()) _property.render(); + if (_screenSpaceProperty.isEnabled()) + _screenSpaceProperty.render(); if (_performance.isEnabled()) _performance.render(); if (_help.isEnabled()) @@ -387,6 +392,7 @@ void GUI::renderMainWindow() { ImGui::Begin("OpenSpace GUI", nullptr); ImGui::Checkbox("Properties", &_property._isEnabled); + ImGui::Checkbox("ScreenSpace Properties", &_screenSpaceProperty._isEnabled); ImGui::Checkbox("Performance", &_performance._isEnabled); _origin.render(); _time.render(); diff --git a/modules/onscreengui/src/guipropertycomponent.cpp b/modules/onscreengui/src/guipropertycomponent.cpp index bf006eb507..05e853aec1 100644 --- a/modules/onscreengui/src/guipropertycomponent.cpp +++ b/modules/onscreengui/src/guipropertycomponent.cpp @@ -195,7 +195,7 @@ namespace { std::string name = prop->guiName(); bool pressed = ImGui::Button((ownerName + "." + name).c_str()); if (pressed) - executeScript(prop->fullyQualifiedIdentifier(), "0"); + executeScript(prop->fullyQualifiedIdentifier(), "nil"); } //void renderBoolProperty(Property* prop, const std::string& ownerName) { @@ -383,6 +383,37 @@ void GuiPropertyComponent::registerProperty(properties::Property* prop) { //handleProperty(dictionary); } +void GuiPropertyComponent::unregisterProperties(std::string owner){ + auto it = _propertiesByOwner.find(owner); + if(it != _propertiesByOwner.end()){ + for(prop : it->second){ + std::string className = prop->className(); + if (className == "BoolProperty") + _boolProperties.insert(prop); + else if (className == "IntProperty") + _intProperties.insert(prop); + else if (className == "FloatProperty") + _floatProperties.insert(prop); + else if (className == "StringProperty") + _stringProperties.insert(prop); + else if (className == "Vec2Property") + _vec2Properties.insert(prop); + else if (className == "Vec3Property") + _vec3Properties.insert(prop); + else if (className == "Vec4Property") + _vec4Properties.insert(prop); + else if (className == "OptionProperty") + _optionProperties.insert(prop); + else if (className == "TriggerProperty") + _triggerProperties.insert(prop); + else if (className == "SelectionProperty") + _selectionProperties.insert(prop); + } + it->second.clear(); + _propertiesByOwner.erase(it); + } +} + void GuiPropertyComponent::handleProperty(const ghoul::Dictionary& dictionary) { //static const std::string TypeKey = "Type"; //static const std::string IdentifierKey = "Identifier"; diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 664b9a61ee..7d321729a8 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -1157,6 +1157,12 @@ void RenderEngine::unregisterScreenSpaceRenderable(std::shared_ptr RenderEngine::screenSpaceRenderable(std::string name){ for(auto s : _screenSpaceRenderables){ if(s->name() == name){ diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 290938a554..bd2b5d291f 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -33,6 +33,7 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() , _depth("depth", "Depth", 0, 0, 1) , _scale("scale", "Scale" , 0.5, 0, 2) , _alpha("alpha", "Alpha" , 1, 0, 1) + ,_delete("delete", "Delete") , _quad(0) , _vertexPositionBuffer(0) ,_rendererPath("${SHADERS}/framebuffer/renderframebuffer.frag") @@ -40,6 +41,7 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() ,_fragmentPath("${MODULE_BASE}/shaders/screnspace_fs.glsl") ,_texture(nullptr) ,_shader(nullptr) + ,_toDelete(false) { addProperty(_enabled); addProperty(_useFlatScreen); @@ -48,6 +50,7 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() addProperty(_depth); addProperty(_scale); addProperty(_alpha); + addProperty(_delete); _rendererData = ghoul::Dictionary(); _rendererData.setValue("fragmentRendererPath", _rendererPath); @@ -70,11 +73,18 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() _useFlatScreen.onChange([this](){ useEuclideanCoordinates(_useFlatScreen.value()); }); + + _delete.onChange([this](){_toDelete=true;}); } ScreenSpaceRenderable::~ScreenSpaceRenderable(){} +//deinitialzie(){ + // unregisterProperies +// } + + bool ScreenSpaceRenderable::isEnabled() const { return _enabled; } @@ -129,13 +139,18 @@ glm::vec2 ScreenSpaceRenderable::toSpherical(glm::vec2 euclidean){ } void ScreenSpaceRenderable::registerProperties(){ - OsEng.gui()._property.registerProperty(&_enabled); - OsEng.gui()._property.registerProperty(&_useFlatScreen); - OsEng.gui()._property.registerProperty(&_euclideanPosition); - OsEng.gui()._property.registerProperty(&_sphericalPosition); - OsEng.gui()._property.registerProperty(&_depth); - OsEng.gui()._property.registerProperty(&_scale); - OsEng.gui()._property.registerProperty(&_alpha); + OsEng.gui()._screenSpaceProperty.registerProperty(&_enabled); + OsEng.gui()._screenSpaceProperty.registerProperty(&_useFlatScreen); + OsEng.gui()._screenSpaceProperty.registerProperty(&_euclideanPosition); + OsEng.gui()._screenSpaceProperty.registerProperty(&_sphericalPosition); + OsEng.gui()._screenSpaceProperty.registerProperty(&_depth); + OsEng.gui()._screenSpaceProperty.registerProperty(&_scale); + OsEng.gui()._screenSpaceProperty.registerProperty(&_alpha); + OsEng.gui()._screenSpaceProperty.registerProperty(&_delete); +} + +void ScreenSpaceRenderable::unregisterProperties(){ + OsEng.gui()._screenSpaceProperty.unregisterProperties(name()); } void ScreenSpaceRenderable::createShaders(){