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/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..1d11e7fde0 100644 --- a/modules/base/rendering/screenspaceframebuffer.cpp +++ b/modules/base/rendering/screenspaceframebuffer.cpp @@ -40,12 +40,13 @@ 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)); + _scale.setValue(1.0f); } ScreenSpaceFramebuffer::~ScreenSpaceFramebuffer(){} @@ -55,14 +56,8 @@ bool ScreenSpaceFramebuffer::initialize(){ createPlane(); createShaders(); - createFragmentbuffer(); - // Setting spherical/euclidean onchange handler - _useFlatScreen.onChange([this](){ - useEuclideanCoordinates(_useFlatScreen.value()); - }); - return isReady(); } @@ -82,7 +77,6 @@ bool ScreenSpaceFramebuffer::deinitialize(){ } _framebuffer->detachAll(); - removeAllRenderFunctions(); return true; @@ -104,14 +98,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 +125,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 +137,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..25b98b6c2f 100644 --- a/modules/base/rendering/screenspaceframebuffer.h +++ b/modules/base/rendering/screenspaceframebuffer.h @@ -50,17 +50,17 @@ public: void setSize(glm::vec4); void addRenderFunction(std::shared_ptr> renderFunction); void removeAllRenderFunctions(); + 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 a26d1cce7e..1002b5732b 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/renderengine.cpp b/src/rendering/renderengine.cpp index d586619eea..991325387a 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -213,6 +213,18 @@ bool RenderEngine::initialize() { ghoul::io::TextureReader::ref().addReader(std::make_shared()); + //For testing screenspacerenderables + + + std::shared_ptr ssfb = std::make_shared(); + ssfb->addRenderFunction(std::make_shared>([this](){renderInformation();})); + ssfb->addRenderFunction(std::make_shared>([this](){ssr->render();})); + registerScreenSpaceRenderable(ssfb); + + + ssr = std::make_shared("${OPENSPACE_DATA}/test2.jpg"); + registerScreenSpaceRenderable(ssr); + return true; } 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)); }