diff --git a/include/openspace/rendering/screenspacerenderable.h b/include/openspace/rendering/screenspacerenderable.h index 40e729f79d..c8c527c8c9 100644 --- a/include/openspace/rendering/screenspacerenderable.h +++ b/include/openspace/rendering/screenspacerenderable.h @@ -34,7 +34,7 @@ namespace openspace { class ScreenSpaceRenderable : public properties::PropertyOwner { public: - ScreenSpaceRenderable(); + ScreenSpaceRenderable(std::string texturePath); ~ScreenSpaceRenderable(); virtual void render() = 0; diff --git a/modules/base/rendering/screenspaceimage.cpp b/modules/base/rendering/screenspaceimage.cpp index a707aa3d6c..5a49c7626f 100644 --- a/modules/base/rendering/screenspaceimage.cpp +++ b/modules/base/rendering/screenspaceimage.cpp @@ -30,11 +30,11 @@ #include namespace openspace { - ScreenSpaceImage::ScreenSpaceImage() - :ScreenSpaceRenderable() +ScreenSpaceImage::ScreenSpaceImage(std::string texturePath) + :ScreenSpaceRenderable(texturePath) { - setName("ScreenSpaceImage"); + setName("ScreenSpaceImage" + std::to_string(id())); OsEng.gui()._property.registerProperty(&_enabled); OsEng.gui()._property.registerProperty(&_flatScreen); OsEng.gui()._property.registerProperty(&_position); @@ -44,13 +44,13 @@ namespace openspace { _texturePath.onChange([this](){ loadTexture(); }); } - ScreenSpaceImage::~ScreenSpaceImage(){} +ScreenSpaceImage::~ScreenSpaceImage(){} void ScreenSpaceImage::render(){ - GLint m_viewport[4]; - glGetIntegerv(GL_VIEWPORT, m_viewport); - float height = (float(m_viewport[2])/m_viewport[3])* + GLfloat m_viewport[4]; + glGetFloatv(GL_VIEWPORT, m_viewport); + float height = (m_viewport[2]/m_viewport[3])* (float(_texture->height())/float(_texture->width())); glm::mat4 transform = glm::translate(glm::mat4(1.f), _position.value()); @@ -125,4 +125,9 @@ void ScreenSpaceImage::loadTexture() { } } } + +int ScreenSpaceImage::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 ac1d53b4be..b67f7635b0 100644 --- a/modules/base/rendering/screenspaceimage.h +++ b/modules/base/rendering/screenspaceimage.h @@ -31,7 +31,7 @@ namespace openspace { class ScreenSpaceImage : public ScreenSpaceRenderable { public: - ScreenSpaceImage(); + ScreenSpaceImage(std::string texturePath); ~ScreenSpaceImage(); void render() override; @@ -41,8 +41,10 @@ public: bool isReady() const override; private: void loadTexture(); + static int id(); + std::unique_ptr _texture; // The image to render - }; +// int ScreenSpaceImage::id = 0; } //namespace openspace #endif //__SCREENSPACEIMAGE_H__ \ No newline at end of file diff --git a/modules/onscreengui/src/gui.cpp b/modules/onscreengui/src/gui.cpp index b984aedd0b..9ac7074d63 100644 --- a/modules/onscreengui/src/gui.cpp +++ b/modules/onscreengui/src/gui.cpp @@ -34,6 +34,9 @@ #include #include #include +#include +#include + #include #include @@ -129,6 +132,16 @@ namespace { } namespace openspace { + void addScreenSpaceRenderable(std::string texturePath){ + std::string filepath ="${OPENSPACE_DATA}/"+texturePath; + if( ! FileSys.fileExists(filepath)) { + LWARNING("Could not find image '" << filepath << "'"); + return; + } + OsEng.renderEngine().registerScreenSpaceRenderable(std::make_shared(filepath)); + } + + namespace gui { GUI::GUI() @@ -392,6 +405,14 @@ void GUI::renderMainWindow() { ImGui::Checkbox("Help", &_help._isEnabled); + static const int bufferSize = 256; + static char buffer[bufferSize]; + ImGui::InputText("", buffer, bufferSize); + + if(ImGui::SmallButton("Add Image")){ + addScreenSpaceRenderable(std::string(buffer)); + } + ImGui::End(); } diff --git a/src/rendering/renderengine.cpp b/src/rendering/renderengine.cpp index 11f1511d33..4d78dabdbd 100644 --- a/src/rendering/renderengine.cpp +++ b/src/rendering/renderengine.cpp @@ -206,8 +206,6 @@ bool RenderEngine::initialize() { ghoul::io::TextureReader::ref().addReader(std::make_shared()); - std::shared_ptr s = std::make_shared(); - registerScreenSpaceRenderable(s); return true; } diff --git a/src/rendering/screenspacerenderable.cpp b/src/rendering/screenspacerenderable.cpp index 2af7f197a0..b7a0888022 100644 --- a/src/rendering/screenspacerenderable.cpp +++ b/src/rendering/screenspacerenderable.cpp @@ -25,12 +25,12 @@ #include namespace openspace { - ScreenSpaceRenderable::ScreenSpaceRenderable() + ScreenSpaceRenderable::ScreenSpaceRenderable(std::string texturePath) : _enabled("enabled", "Is Enabled", true) , _flatScreen("flatScreen", "Flat Screen", true) , _position("position", "Position", glm::vec3(0),glm::vec3(-2),glm::vec3(2)) , _scale("scale", "Scale" , 0.5, 0, 1) - , _texturePath("texturePath", "Texture path", "${OPENSPACE_DATA}/test2.jpg") + , _texturePath("texturePath", "Texture path", texturePath) , _quad(0) , _vertexPositionBuffer(0) {