Remove screenspacerenderables and iSWACygnets

This commit is contained in:
Sebastian Piwell
2016-04-04 15:30:54 -04:00
16 changed files with 80 additions and 25 deletions

View File

@@ -104,6 +104,7 @@ public:
void registerScreenSpaceRenderable(std::shared_ptr<ScreenSpaceRenderable> s);
void unregisterScreenSpaceRenderable(std::shared_ptr<ScreenSpaceRenderable> s);
void unregisterScreenSpaceRenderable(std::string name);
std::shared_ptr<ScreenSpaceRenderable> screenSpaceRenderable(std::string name);
std::unique_ptr<ghoul::opengl::ProgramObject> buildRenderProgram(
@@ -179,6 +180,7 @@ private:
std::vector<ghoul::opengl::ProgramObject*> _programs;
std::vector<std::shared_ptr<ScreenSpaceRenderable>> _screenSpaceRenderables;
std::vector<std::shared_ptr<ScreenSpaceRenderable>> _deletedScreenSpaceRenderables;
std::shared_ptr<ghoul::fontrendering::Font> _fontInfo = nullptr;
std::shared_ptr<ghoul::fontrendering::Font> _fontDate = nullptr;

View File

@@ -30,6 +30,7 @@
#include <openspace/properties/vectorproperty.h>
#include <openspace/properties/scalarproperty.h>
#include <openspace/properties/stringproperty.h>
#include <openspace/properties/triggerproperty.h>
#include <ghoul/opengl/texture.h>
#include <modules/onscreengui/include/gui.h>
#include <openspace/rendering/renderengine.h>
@@ -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__

View File

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

View File

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

View File

@@ -81,6 +81,8 @@ bool CygnetPlane::isReady(){
void CygnetPlane::render(){}
void CygnetPlane::update(){
ISWACygnet::update();
_time = Time::ref().currentTime();
_stateMatrix = SpiceManager::ref().positionTransformMatrix("GALACTIC", _frame, _time);

View File

@@ -76,7 +76,6 @@ void ISWAContainer::update(const UpdateData& data){
if(!_deletedCygnets.empty())
_deletedCygnets.clear();
for(auto iSWACygnet : _iSWACygnets)
iSWACygnet->update();
}

View File

@@ -52,6 +52,7 @@ public:
private:
std::vector<std::shared_ptr<ISWACygnet>> _iSWACygnets;
std::vector<std::shared_ptr<ISWACygnet>> _deletedCygnets;
};
}//namespace openspace

View File

@@ -39,6 +39,7 @@ ISWACygnet::ISWACygnet()
,_shader(nullptr)
,_texture(nullptr)
,_frame("GALACTIC")
,_toDelete(false)
{
addProperty(_enabled);
addProperty(_cygnetId);

View File

@@ -84,6 +84,8 @@ protected:
float _openSpaceUpdateInterval;
bool _toDelete;
int _id;
};

View File

@@ -54,6 +54,7 @@ ScreenSpaceCygnet::ScreenSpaceCygnet(int cygnetId)
OsEng.gui()._iSWAproperty.registerProperty(&_alpha);
OsEng.gui()._iSWAproperty.registerProperty(&_cygnetId);
OsEng.gui()._iSWAproperty.registerProperty(&_updateInterval);
OsEng.gui()._iSWAproperty.registerProperty(&_delete);
_fileExtension = "";
_path = "";
@@ -83,6 +84,8 @@ bool ScreenSpaceCygnet::initialize(){
}
bool ScreenSpaceCygnet::deinitialize(){
OsEng.gui()._iSWAproperty.unregisterProperties(name());
glDeleteVertexArrays(1, &_quad);
_quad = 0;
@@ -106,6 +109,7 @@ bool ScreenSpaceCygnet::deinitialize(){
void ScreenSpaceCygnet::render(){
if(!isReady()) return;
if(!_enabled) return;
glm::mat4 rotation = rotationMatrix();
glm::mat4 translation = translationMatrix();
@@ -116,6 +120,8 @@ void ScreenSpaceCygnet::render(){
}
void ScreenSpaceCygnet::update(){
if(_toDelete)
OsEng.renderEngine().unregisterScreenSpaceRenderable(name());
if(_path != ""){
_time = Time::ref().currentTime();

View File

@@ -144,8 +144,6 @@ void TexturePlane::render(){
}
void TexturePlane::update(){
//if(_planeIsDirty)
// createPlane();
if(_path != ""){
CygnetPlane::update();
if(_futureTexture && _futureTexture->isFinished){

View File

@@ -72,6 +72,7 @@ public:
GuiPerformanceComponent _performance;
GuiPropertyComponent _property;
GuiPropertyComponent _iSWAproperty;
GuiPropertyComponent _screenSpaceProperty;
GuiTimeComponent _time;
bool _isEnabled;

View File

@@ -204,6 +204,7 @@ void GUI::initialize() {
_property.initialize();
_iSWAproperty.initialize();
_screenSpaceProperty.initialize();
_performance.initialize();
_help.initialize();
}
@@ -251,6 +252,7 @@ void GUI::initializeGL() {
_property.initializeGL();
_iSWAproperty.initializeGL();
_screenSpaceProperty.initializeGL();
_performance.initializeGL();
_help.initializeGL();
}
@@ -263,6 +265,7 @@ void GUI::deinitializeGL() {
_property.deinitializeGL();
_iSWAproperty.deinitializeGL();
_screenSpaceProperty.deinitializeGL();
_performance.deinitializeGL();
_help.deinitializeGL();
}
@@ -293,6 +296,8 @@ void GUI::endFrame() {
_property.render();
if (_iSWAproperty.isEnabled())
_iSWAproperty.render();
if (_screenSpaceProperty.isEnabled())
_screenSpaceProperty.render();
if (_performance.isEnabled())
_performance.render();
if (_help.isEnabled())
@@ -391,7 +396,8 @@ bool GUI::charCallback(unsigned int character, KeyModifier modifier) {
void GUI::renderMainWindow() {
ImGui::Begin("OpenSpace GUI", nullptr);
ImGui::Checkbox("Properties", &_property._isEnabled);
ImGui::Checkbox("Scene Graph Properties", &_property._isEnabled);
ImGui::Checkbox("ScreenSpace Properties", &_screenSpaceProperty._isEnabled);
ImGui::Checkbox("iSWA Properties", &_iSWAproperty._isEnabled);
ImGui::Checkbox("Performance", &_performance._isEnabled);
_origin.render();

View File

@@ -72,15 +72,7 @@ properties::Property* property(const std::string& uri) {
const std::string nameUri = uri.substr(0, nameSeparator);
const std::string remainingUri = uri.substr(nameSeparator + 1);
SceneGraphNode* node = sceneGraphNode("iSWA");
if(node){
std::shared_ptr<ISWACygnet> cygnet = static_cast <ISWAContainer*>(node->renderable())->iSWACygnet(nameUri);
if(cygnet){
return cygnet->property(remainingUri);
}
}
node = sceneGraphNode(nameUri);
SceneGraphNode* node = sceneGraphNode(nameUri);
if (node) {
properties::Property* property = node->property(remainingUri);
return property;
@@ -91,6 +83,11 @@ properties::Property* property(const std::string& uri) {
properties::Property* property = ssr->property(remainingUri);
return property;
}
std::shared_ptr<ISWACygnet> cygnet = ISWAManager::ref().iSWACygnet(nameUri);
if(cygnet){
return cygnet->property(remainingUri);
}
LERROR("Node, iSWACygnet or ScreenSpaceRenderable' " << nameUri << "' did not exist");
return nullptr;

View File

@@ -376,6 +376,9 @@ void RenderEngine::postSynchronizationPreDraw() {
}
}
if(!_deletedScreenSpaceRenderables.empty())
_deletedScreenSpaceRenderables.clear();
for (auto screenspacerenderable : _screenSpaceRenderables) {
screenspacerenderable->update();
}
@@ -1146,10 +1149,17 @@ void RenderEngine::unregisterScreenSpaceRenderable(std::shared_ptr<ScreenSpaceRe
if (it != _screenSpaceRenderables.end()) {
s->deinitialize();
_deletedScreenSpaceRenderables.push_back(s);
_screenSpaceRenderables.erase(it);
}
}
void RenderEngine::unregisterScreenSpaceRenderable(std::string name){
auto s = screenSpaceRenderable(name);
if(s)
unregisterScreenSpaceRenderable(s);
}
std::shared_ptr<ScreenSpaceRenderable> RenderEngine::screenSpaceRenderable(std::string name){
for(auto s : _screenSpaceRenderables){
if(s->name() == name){

View File

@@ -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](){OsEng.renderEngine().unregisterScreenSpaceRenderable(name());});
}
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(){