From 79979fe8dd785c97608e2d6fad85dc47f794a5a0 Mon Sep 17 00:00:00 2001 From: Sebastian Piwell Date: Thu, 31 Mar 2016 14:53:42 -0400 Subject: [PATCH 1/2] Clean up --- .gitignore | 1 + .../rendering/screenspacerenderable.h | 1 - .../base/rendering/screenspaceframebuffer.cpp | 51 ++++++------------- .../base/rendering/screenspaceframebuffer.h | 9 ++-- modules/base/rendering/screenspaceimage.cpp | 20 +++----- modules/base/rendering/screenspaceimage.h | 2 +- src/rendering/screenspacerenderable.cpp | 37 +++++--------- 7 files changed, 43 insertions(+), 78 deletions(-) diff --git a/.gitignore b/.gitignore index ec3414bf7d..1276eddc11 100644 --- a/.gitignore +++ b/.gitignore @@ -120,3 +120,4 @@ data/scene/vestaprojection/textures/projectMe.png data/spice/MAR063.BSP data/spice/de430_1850-2150.bsp data/spice/jup260.bsp +data/BATSRUS.cdf \ No newline at end of file diff --git a/include/openspace/rendering/screenspacerenderable.h b/include/openspace/rendering/screenspacerenderable.h index 3ad85a23eb..5d538eea8c 100644 --- a/include/openspace/rendering/screenspacerenderable.h +++ b/include/openspace/rendering/screenspacerenderable.h @@ -102,7 +102,6 @@ protected: properties::FloatProperty _scale; properties::FloatProperty _alpha; - GLuint _quad; GLuint _vertexPositionBuffer; const std::string _rendererPath; diff --git a/modules/base/rendering/screenspaceframebuffer.cpp b/modules/base/rendering/screenspaceframebuffer.cpp index 30751731cd..18a24f71aa 100644 --- a/modules/base/rendering/screenspaceframebuffer.cpp +++ b/modules/base/rendering/screenspaceframebuffer.cpp @@ -40,12 +40,11 @@ ScreenSpaceFramebuffer::ScreenSpaceFramebuffer() _id = id(); setName("ScreenSpaceFramebuffer" + std::to_string(_id)); registerProperties(); - glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution(); + glm::vec2 resolution = OsEng.windowWrapper().currentWindowResolution(); addProperty(_size); OsEng.gui()._property.registerProperty(&_size); _size.set(glm::vec4(0, 0, resolution.x,resolution.y)); - } ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer(){} @@ -55,14 +54,8 @@ bool ScreenSpaceFramebuffer::initialize(){ createPlane(); createShaders(); - createFragmentbuffer(); - // Setting spherical/euclidean onchange handler - _useFlatScreen.onChange([this](){ - useEuclideanCoordinates(_useFlatScreen.value()); - }); - return isReady(); } @@ -82,7 +75,6 @@ bool ScreenSpaceFramebuffer::deinitialize(){ } _framebuffer->detachAll(); - removeAllRenderFunctions(); return true; @@ -104,14 +96,11 @@ void ScreenSpaceFramebuffer::render(){ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glEnable(GL_ALPHA_TEST); for(auto renderFunction : _renderFunctions){ - (*renderFunction)(); - } _framebuffer->deactivate(); glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); - glViewport (0, 0, resolution.x, resolution.y); glm::mat4 rotation = rotationMatrix(); @@ -134,29 +123,6 @@ bool ScreenSpaceFramebuffer::isReady() const{ return ready; } -int ScreenSpaceFramebuffer::id(){ - static int id = 0; - return id++; -} - -void ScreenSpaceFramebuffer::createFragmentbuffer(){ - _framebuffer = std::make_unique(); - _framebuffer->activate(); - _texture = std::make_unique(glm::uvec3(_originalViewportSize.x, _originalViewportSize.y, 1)); - _texture->uploadTexture(); - _texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear); - _framebuffer->attachTexture(_texture.get(), GL_COLOR_ATTACHMENT0); - _framebuffer->deactivate(); - - // GLuint depthrenderbuffer; - // glGenRenderbuffers(1, &depthrenderbuffer); - // glBindRenderbuffer(GL_RENDERBUFFER, depthrenderbuffer); - // glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, _originalViewportSize.x, _originalViewportSize.y); - // glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthrenderbuffer); - - // GLenum DrawBuffers[1] = {GL_COLOR_ATTACHMENT0}; - // glDrawBuffers(1, DrawBuffers); -} void ScreenSpaceFramebuffer::setSize(glm::vec4 size){ _size.set(size); @@ -169,4 +135,19 @@ void ScreenSpaceFramebuffer::addRenderFunction(std::shared_ptr(); + _framebuffer->activate(); + _texture = std::make_unique(glm::uvec3(_originalViewportSize.x, _originalViewportSize.y, 1)); + _texture->uploadTexture(); + _texture->setFilter(ghoul::opengl::Texture::FilterMode::Linear); + _framebuffer->attachTexture(_texture.get(), GL_COLOR_ATTACHMENT0); + _framebuffer->deactivate(); +} + +int ScreenSpaceFramebuffer::id(){ + static int id = 0; + return id++; +} } //namespace openspace \ No newline at end of file diff --git a/modules/base/rendering/screenspaceframebuffer.h b/modules/base/rendering/screenspaceframebuffer.h index b61243d084..d1a382a7e7 100644 --- a/modules/base/rendering/screenspaceframebuffer.h +++ b/modules/base/rendering/screenspaceframebuffer.h @@ -54,13 +54,12 @@ private: void createFragmentbuffer(); static int id(); - std::unique_ptr _framebuffer; - - int _id; - - std::vector>> _renderFunctions; properties::Vec4Property _size; + std::unique_ptr _framebuffer; + std::vector>> _renderFunctions; + + int _id; }; } //namespace openspace diff --git a/modules/base/rendering/screenspaceimage.cpp b/modules/base/rendering/screenspaceimage.cpp index ec01b63abd..e50b516238 100644 --- a/modules/base/rendering/screenspaceimage.cpp +++ b/modules/base/rendering/screenspaceimage.cpp @@ -31,17 +31,17 @@ namespace { namespace openspace { ScreenSpaceImage::ScreenSpaceImage(std::string texturePath) - :ScreenSpaceRenderable() - ,_texturePath("texturePath", "Texture path", texturePath) + :ScreenSpaceRenderable() + ,_texturePath("texturePath", "Texture path", texturePath) { _id = id(); setName("ScreenSpaceImage" + std::to_string(_id)); - addProperty(_texturePath); registerProperties(); - OsEng.gui()._property.registerProperty(&_texturePath); - + + addProperty(_texturePath); + OsEng.gui()._property.registerProperty(&_texturePath); _texturePath.onChange([this](){ loadTexture(); }); } @@ -52,13 +52,8 @@ bool ScreenSpaceImage::initialize(){ createPlane(); createShaders(); - loadTexture(); - // Setting spherical/euclidean onchange handler - _useFlatScreen.onChange([this](){ - useEuclideanCoordinates(_useFlatScreen.value()); - }); return isReady(); } @@ -69,7 +64,6 @@ bool ScreenSpaceImage::deinitialize(){ glDeleteBuffers(1, &_vertexPositionBuffer); _vertexPositionBuffer = 0; - _texturePath = ""; _texture = nullptr; @@ -119,7 +113,7 @@ void ScreenSpaceImage::loadTexture() { } int ScreenSpaceImage::id(){ - static int id = 0; - return id++; + static int id = 0; + return id++; } } \ No newline at end of file diff --git a/modules/base/rendering/screenspaceimage.h b/modules/base/rendering/screenspaceimage.h index fff5d1da9c..ac61548587 100644 --- a/modules/base/rendering/screenspaceimage.h +++ b/modules/base/rendering/screenspaceimage.h @@ -41,9 +41,9 @@ public: ScreenSpaceImage(std::string texturePath); ~ScreenSpaceImage(); - void render() override; bool initialize() override; bool deinitialize() override; + void render() override; void update() override; bool isReady() const override; diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 2583fe31ef..290938a554 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -54,11 +54,22 @@ ScreenSpaceRenderable::ScreenSpaceRenderable() _rendererData.setValue("windowWidth", OsEng.windowWrapper().currentWindowResolution().x); _rendererData.setValue("windowHeight", OsEng.windowWrapper().currentWindowResolution().y); - _useEuclideanCoordinates = _useFlatScreen.value(); _radius = _planeDepth; - _sphericalPosition.set(toSpherical(_euclideanPosition.value())); + useEuclideanCoordinates(_useFlatScreen.value()); + _euclideanPosition.onChange([this](){ + _sphericalPosition.set(toSpherical(_euclideanPosition.value())); + }); + + _sphericalPosition.onChange([this](){ + _euclideanPosition.set(toEuclidean(_sphericalPosition.value(), _radius)); + }); + + // Setting spherical/euclidean onchange handler + _useFlatScreen.onChange([this](){ + useEuclideanCoordinates(_useFlatScreen.value()); + }); } ScreenSpaceRenderable::~ScreenSpaceRenderable(){} @@ -97,16 +108,8 @@ void ScreenSpaceRenderable::useEuclideanCoordinates(bool b){ _useEuclideanCoordinates = b; if(_useEuclideanCoordinates){ _euclideanPosition.set(toEuclidean(_sphericalPosition.value(), _radius)); - _euclideanPosition.onChange([this](){ - _sphericalPosition.set(toSpherical(_euclideanPosition.value())); - }); - _sphericalPosition.onChange([this](){}); } else { _sphericalPosition.set(toSpherical(_euclideanPosition.value())); - _sphericalPosition.onChange([this](){ - _euclideanPosition.set(toEuclidean(_sphericalPosition.value(), _radius)); - }); - _euclideanPosition.onChange([this](){}); } } @@ -133,21 +136,10 @@ void ScreenSpaceRenderable::registerProperties(){ OsEng.gui()._property.registerProperty(&_depth); OsEng.gui()._property.registerProperty(&_scale); OsEng.gui()._property.registerProperty(&_alpha); - - if(_useEuclideanCoordinates){ - _euclideanPosition.onChange([this](){ - _sphericalPosition.set(toSpherical(_euclideanPosition.value())); - }); - _sphericalPosition.onChange([this](){}); - }else{ - _euclideanPosition.onChange([this](){ - _sphericalPosition.set(toSpherical(_euclideanPosition.value())); - }); - } } void ScreenSpaceRenderable::createShaders(){ - if(_shader == nullptr) { + if(!_shader) { ghoul::Dictionary dict = ghoul::Dictionary(); @@ -197,7 +189,6 @@ glm::mat4 ScreenSpaceRenderable::translationMatrix(){ if(!_useEuclideanCoordinates){ translation = glm::translate(translation, glm::vec3(0.0f, 0.0f, _planeDepth)); }else{ - translation = glm::translate(glm::mat4(1.f), glm::vec3(_euclideanPosition.value(), _planeDepth)); } From d610171441cc736de0942e44f31fe02a2fe39fbe Mon Sep 17 00:00:00 2001 From: Sebastian Piwell Date: Thu, 31 Mar 2016 15:54:29 -0400 Subject: [PATCH 2/2] for simple testing --- include/openspace/rendering/renderengine.h | 3 +-- modules/base/rendering/screenspaceframebuffer.cpp | 2 ++ modules/base/rendering/screenspaceframebuffer.h | 1 + src/rendering/renderengine.cpp | 4 ++-- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/include/openspace/rendering/renderengine.h b/include/openspace/rendering/renderengine.h index 7dab585aee..3ed2fe0d8f 100644 --- a/include/openspace/rendering/renderengine.h +++ b/include/openspace/rendering/renderengine.h @@ -148,8 +148,7 @@ public: unsigned int _size; int _node; } _onScreenInformation; - - std::shared_ptr ssr; + private: void setRenderer(std::unique_ptr renderer); RendererImplementation rendererFromString(const std::string& method); diff --git a/modules/base/rendering/screenspaceframebuffer.cpp b/modules/base/rendering/screenspaceframebuffer.cpp index 18a24f71aa..1d11e7fde0 100644 --- a/modules/base/rendering/screenspaceframebuffer.cpp +++ b/modules/base/rendering/screenspaceframebuffer.cpp @@ -45,6 +45,8 @@ ScreenSpaceFramebuffer::ScreenSpaceFramebuffer() addProperty(_size); OsEng.gui()._property.registerProperty(&_size); _size.set(glm::vec4(0, 0, resolution.x,resolution.y)); + + _scale.setValue(1.0f); } ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer(){} diff --git a/modules/base/rendering/screenspaceframebuffer.h b/modules/base/rendering/screenspaceframebuffer.h index d1a382a7e7..25b98b6c2f 100644 --- a/modules/base/rendering/screenspaceframebuffer.h +++ b/modules/base/rendering/screenspaceframebuffer.h @@ -50,6 +50,7 @@ public: void setSize(glm::vec4); void addRenderFunction(std::shared_ptr> renderFunction); void removeAllRenderFunctions(); + private: void createFragmentbuffer(); static int id(); diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 991325387a..664b9a61ee 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -218,11 +218,11 @@ bool RenderEngine::initialize() { std::shared_ptr ssfb = std::make_shared(); ssfb->addRenderFunction(std::make_shared>([this](){renderInformation();})); - ssfb->addRenderFunction(std::make_shared>([this](){ssr->render();})); + ssfb->setSize(glm::vec4(0,400,400,800)); registerScreenSpaceRenderable(ssfb); - ssr = std::make_shared("${OPENSPACE_DATA}/test2.jpg"); + std::shared_ptrssr = std::make_shared("${OPENSPACE_DATA}/test2.jpg"); registerScreenSpaceRenderable(ssr); return true;