diff --git a/ext/ghoul b/ext/ghoul index 8763a95ad8..c1ab7c1457 160000 --- a/ext/ghoul +++ b/ext/ghoul @@ -1 +1 @@ -Subproject commit 8763a95ad8930dfbe9a1109018b6c409c1698069 +Subproject commit c1ab7c14574b8e8106eb9e68385a31de5fd04c56 diff --git a/modules/base/basemodule.cpp b/modules/base/basemodule.cpp index e67c069e9f..2c7e56e187 100644 --- a/modules/base/basemodule.cpp +++ b/modules/base/basemodule.cpp @@ -69,6 +69,7 @@ namespace openspace { ghoul::opengl::ProgramObjectManager BaseModule::ProgramObjectManager; +ghoul::opengl::TextureManager BaseModule::TextureManager; BaseModule::BaseModule() : OpenSpaceModule(BaseModule::Name) {} @@ -159,6 +160,7 @@ void BaseModule::internalInitialize(const ghoul::Dictionary&) { void BaseModule::internalDeinitializeGL() { ProgramObjectManager.releaseAll(ghoul::opengl::ProgramObjectManager::Warnings::Yes); + TextureManager.releaseAll(ghoul::opengl::TextureManager::Warnings::Yes); } std::vector BaseModule::documentations() const { diff --git a/modules/base/basemodule.h b/modules/base/basemodule.h index 30064dced0..c1160e213a 100644 --- a/modules/base/basemodule.h +++ b/modules/base/basemodule.h @@ -28,6 +28,7 @@ #include #include +#include namespace openspace { @@ -42,6 +43,7 @@ public: std::vector luaLibraries() const override; static ghoul::opengl::ProgramObjectManager ProgramObjectManager; + static ghoul::opengl::TextureManager TextureManager; protected: void internalInitialize(const ghoul::Dictionary&) override; diff --git a/modules/base/rendering/renderablemodel.cpp b/modules/base/rendering/renderablemodel.cpp index a5b670ff72..c3fdb1237f 100644 --- a/modules/base/rendering/renderablemodel.cpp +++ b/modules/base/rendering/renderablemodel.cpp @@ -247,7 +247,7 @@ void RenderableModel::initialize() { } void RenderableModel::initializeGL() { - _programObject = BaseModule::ProgramObjectManager.requestProgramObject( + _programObject = BaseModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -271,7 +271,7 @@ void RenderableModel::deinitializeGL() { } _texture = nullptr; - BaseModule::ProgramObjectManager.releaseProgramObject( + BaseModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/base/rendering/renderableplane.cpp b/modules/base/rendering/renderableplane.cpp index 5dc41e9405..c04a1332c9 100644 --- a/modules/base/rendering/renderableplane.cpp +++ b/modules/base/rendering/renderableplane.cpp @@ -165,7 +165,7 @@ void RenderablePlane::initializeGL() { glGenBuffers(1, &_vertexPositionBuffer); // generate buffer createPlane(); - _shader = BaseModule::ProgramObjectManager.requestProgramObject( + _shader = BaseModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -184,7 +184,7 @@ void RenderablePlane::deinitializeGL() { glDeleteBuffers(1, &_vertexPositionBuffer); _vertexPositionBuffer = 0; - BaseModule::ProgramObjectManager.releaseProgramObject( + BaseModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/base/rendering/renderableplaneimagelocal.cpp b/modules/base/rendering/renderableplaneimagelocal.cpp index ce1cdb2b93..cfa91c2347 100644 --- a/modules/base/rendering/renderableplaneimagelocal.cpp +++ b/modules/base/rendering/renderableplaneimagelocal.cpp @@ -24,13 +24,16 @@ #include +#include #include #include #include #include #include #include +#include #include +#include namespace { constexpr openspace::properties::Property::PropertyInfo TextureInfo = { @@ -91,7 +94,8 @@ void RenderablePlaneImageLocal::initializeGL() { void RenderablePlaneImageLocal::deinitializeGL() { _textureFile = nullptr; - _texture = nullptr; + + BaseModule::TextureManager.release(_texture); RenderablePlane::deinitializeGL(); } @@ -110,27 +114,36 @@ void RenderablePlaneImageLocal::update(const UpdateData& data) { void RenderablePlaneImageLocal::loadTexture() { if (!_texturePath.value().empty()) { - std::unique_ptr texture = - ghoul::io::TextureReader::ref().loadTexture(absPath(_texturePath)); + ghoul::opengl::Texture* t = _texture; - if (texture) { - LDEBUGC( - "RenderablePlane", - fmt::format("Loaded texture from '{}'", absPath(_texturePath)) - ); - texture->uploadTexture(); + unsigned int hash = ghoul::hashCRC32File(_texturePath); + + _texture = BaseModule::TextureManager.request( + std::to_string(hash), + [path = _texturePath]() -> std::unique_ptr { + std::unique_ptr texture = + ghoul::io::TextureReader::ref().loadTexture(absPath(path)); - // Textures of planets looks much smoother with AnisotropicMipMap rather than - // linear - texture->setFilter(ghoul::opengl::Texture::FilterMode::LinearMipMap); + if (texture) { + LDEBUGC( + "RenderablePlaneImageLocal", + fmt::format("Loaded texture from '{}'", absPath(path)) + ); + texture->uploadTexture(); - _texture = std::move(texture); + texture->setFilter(ghoul::opengl::Texture::FilterMode::LinearMipMap); - _textureFile = std::make_unique(_texturePath); - _textureFile->setCallback( - [&](const ghoul::filesystem::File&) { _textureIsDirty = true; } - ); - } + return texture; + } + } + ); + + BaseModule::TextureManager.release(t); + + _textureFile = std::make_unique(_texturePath); + _textureFile->setCallback( + [&](const ghoul::filesystem::File&) { _textureIsDirty = true; } + ); } } diff --git a/modules/base/rendering/renderableplaneimagelocal.h b/modules/base/rendering/renderableplaneimagelocal.h index 6166ebd610..f48314438d 100644 --- a/modules/base/rendering/renderableplaneimagelocal.h +++ b/modules/base/rendering/renderableplaneimagelocal.h @@ -57,7 +57,7 @@ private: void loadTexture(); properties::StringProperty _texturePath; - std::unique_ptr _texture; + ghoul::opengl::Texture* _texture; std::unique_ptr _textureFile; bool _textureIsDirty = false; diff --git a/modules/base/rendering/renderablesphere.cpp b/modules/base/rendering/renderablesphere.cpp index 83d44bc38b..b092c07e62 100644 --- a/modules/base/rendering/renderablesphere.cpp +++ b/modules/base/rendering/renderablesphere.cpp @@ -237,7 +237,7 @@ void RenderableSphere::initializeGL() { ); _sphere->initialize(); - _shader = BaseModule::ProgramObjectManager.requestProgramObject( + _shader = BaseModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -259,7 +259,7 @@ void RenderableSphere::initializeGL() { void RenderableSphere::deinitializeGL() { _texture = nullptr; - BaseModule::ProgramObjectManager.releaseProgramObject( + BaseModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/base/rendering/renderablesphericalgrid.cpp b/modules/base/rendering/renderablesphericalgrid.cpp index 5f07668d06..a66b7d57cb 100644 --- a/modules/base/rendering/renderablesphericalgrid.cpp +++ b/modules/base/rendering/renderablesphericalgrid.cpp @@ -176,7 +176,7 @@ bool RenderableSphericalGrid::isReady() const { } void RenderableSphericalGrid::initializeGL() { - _gridProgram = BaseModule::ProgramObjectManager.requestProgramObject( + _gridProgram = BaseModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -208,7 +208,7 @@ void RenderableSphericalGrid::deinitializeGL() { glDeleteBuffers(1, &_iBufferID); _iBufferID = 0; - BaseModule::ProgramObjectManager.releaseProgramObject( + BaseModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/base/rendering/renderabletrail.cpp b/modules/base/rendering/renderabletrail.cpp index dc67969781..59f363cb33 100644 --- a/modules/base/rendering/renderabletrail.cpp +++ b/modules/base/rendering/renderabletrail.cpp @@ -225,7 +225,7 @@ RenderableTrail::RenderableTrail(const ghoul::Dictionary& dictionary) } void RenderableTrail::initializeGL() { - _programObject = BaseModule::ProgramObjectManager.requestProgramObject( + _programObject = BaseModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -253,7 +253,7 @@ void RenderableTrail::initializeGL() { } void RenderableTrail::deinitializeGL() { - BaseModule::ProgramObjectManager.releaseProgramObject( + BaseModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/base/rotation/fixedrotation.cpp b/modules/base/rotation/fixedrotation.cpp index 1866392333..b01ee117c0 100644 --- a/modules/base/rotation/fixedrotation.cpp +++ b/modules/base/rotation/fixedrotation.cpp @@ -610,6 +610,8 @@ glm::vec3 FixedRotation::yAxis() const { case Axis::Type::Object: if (_yAxis.node && _attachedNode) { glm::vec3 dir = glm::vec3(glm::normalize( + // @TODO(abock): This should be changed to be in the coordinate system + // of the attached node // same with xAxis and zAxis ofc _yAxis.node->worldPosition() - _attachedNode->worldPosition() )); return _yAxis.invertObject ? -dir : dir; diff --git a/modules/digitaluniverse/digitaluniversemodule.cpp b/modules/digitaluniverse/digitaluniversemodule.cpp index 9a6c5994c3..d41365795a 100644 --- a/modules/digitaluniverse/digitaluniversemodule.cpp +++ b/modules/digitaluniverse/digitaluniversemodule.cpp @@ -37,6 +37,7 @@ namespace openspace { ghoul::opengl::ProgramObjectManager DigitalUniverseModule::ProgramObjectManager; +ghoul::opengl::TextureManager DigitalUniverseModule::TextureManager; DigitalUniverseModule::DigitalUniverseModule() : OpenSpaceModule(DigitalUniverseModule::Name) @@ -54,6 +55,7 @@ void DigitalUniverseModule::internalInitialize(const ghoul::Dictionary&) { void DigitalUniverseModule::internalDeinitializeGL() { ProgramObjectManager.releaseAll(ghoul::opengl::ProgramObjectManager::Warnings::Yes); + TextureManager.releaseAll(ghoul::opengl::TextureManager::Warnings::Yes); } std::vector DigitalUniverseModule::documentations() const { diff --git a/modules/digitaluniverse/digitaluniversemodule.h b/modules/digitaluniverse/digitaluniversemodule.h index cff672cebd..74b9e652b3 100644 --- a/modules/digitaluniverse/digitaluniversemodule.h +++ b/modules/digitaluniverse/digitaluniversemodule.h @@ -28,6 +28,7 @@ #include #include +#include namespace openspace { @@ -40,6 +41,7 @@ public: std::vector documentations() const override; static ghoul::opengl::ProgramObjectManager ProgramObjectManager; + static ghoul::opengl::TextureManager TextureManager; protected: void internalInitialize(const ghoul::Dictionary&) override; diff --git a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp index 237d0bb6fb..be42ac03f1 100644 --- a/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp +++ b/modules/digitaluniverse/rendering/renderablebillboardscloud.cpp @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -51,19 +52,19 @@ #include namespace { - constexpr const char* _loggerCat = "RenderableBillboardsCloud"; - constexpr const char* ProgramObjectName = "RenderableBillboardsCloud"; + constexpr const char* _loggerCat = "RenderableBillboardsCloud"; + constexpr const char* ProgramObjectName = "RenderableBillboardsCloud"; constexpr const char* RenderToPolygonProgram = "RenderableBillboardsCloud_Polygon"; - constexpr const char* KeyFile = "File"; - constexpr const char* keyColor = "Color"; - constexpr const char* keyUnit = "Unit"; - constexpr const char* MeterUnit = "m"; - constexpr const char* KilometerUnit = "Km"; - constexpr const char* ParsecUnit = "pc"; - constexpr const char* KiloparsecUnit = "Kpc"; - constexpr const char* MegaparsecUnit = "Mpc"; - constexpr const char* GigaparsecUnit = "Gpc"; + constexpr const char* KeyFile = "File"; + constexpr const char* keyColor = "Color"; + constexpr const char* keyUnit = "Unit"; + constexpr const char* MeterUnit = "m"; + constexpr const char* KilometerUnit = "Km"; + constexpr const char* ParsecUnit = "pc"; + constexpr const char* KiloparsecUnit = "Kpc"; + constexpr const char* MegaparsecUnit = "Mpc"; + constexpr const char* GigaparsecUnit = "Gpc"; constexpr const char* GigalightyearUnit = "Gly"; constexpr int8_t CurrentCacheVersion = 1; @@ -480,14 +481,8 @@ RenderableBillboardsCloud::RenderableBillboardsCloud(const ghoul::Dictionary& di _spriteTexturePath = absPath(dictionary.value( SpriteTextureInfo.identifier )); - _spriteTextureFile = std::make_unique( - _spriteTexturePath - ); - _spriteTexturePath.onChange([&] { _spriteTextureIsDirty = true; }); - _spriteTextureFile->setCallback( - [&](const ghoul::filesystem::File&) { _spriteTextureIsDirty = true; } - ); + _spriteTexturePath.onChange([&]() { _spriteTextureIsDirty = true; }); addProperty(_spriteTexturePath); _hasSpriteTexture = true; @@ -658,29 +653,28 @@ void RenderableBillboardsCloud::initialize() { } void RenderableBillboardsCloud::initializeGL() { - _program = DigitalUniverseModule::ProgramObjectManager.requestProgramObject( + _program = DigitalUniverseModule::ProgramObjectManager.request( ProgramObjectName, []() -> std::unique_ptr { - return OsEng.renderEngine().buildRenderProgram( - ProgramObjectName, - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_vs.glsl"), - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_fs.glsl"), - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_gs.glsl") - ); - } + return OsEng.renderEngine().buildRenderProgram( + ProgramObjectName, + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_vs.glsl"), + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_fs.glsl"), + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboard_gs.glsl") + ); + } ); - _renderToPolygonProgram = - DigitalUniverseModule::ProgramObjectManager.requestProgramObject( - RenderToPolygonProgram, - []() -> std::unique_ptr { - return ghoul::opengl::ProgramObject::Build( - RenderToPolygonProgram, - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_vs.glsl"), - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_fs.glsl"), - absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_gs.glsl") - ); - } + _renderToPolygonProgram = DigitalUniverseModule::ProgramObjectManager.request( + RenderToPolygonProgram, + []() -> std::unique_ptr { + return ghoul::opengl::ProgramObject::Build( + RenderToPolygonProgram, + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_vs.glsl"), + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_fs.glsl"), + absPath("${MODULE_DIGITALUNIVERSE}/shaders/billboardpolygon_gs.glsl") + ); + } ); _uniformCache.cameraViewProjectionMatrix = _program->uniformLocation( @@ -738,22 +732,19 @@ void RenderableBillboardsCloud::deinitializeGL() { glDeleteVertexArrays(1, &_vao); _vao = 0; - DigitalUniverseModule::ProgramObjectManager.releaseProgramObject( + DigitalUniverseModule::ProgramObjectManager.release( ProgramObjectName, [](ghoul::opengl::ProgramObject* p) { - OsEng.renderEngine().removeRenderProgram(p); - } + OsEng.renderEngine().removeRenderProgram(p); + } ); _program = nullptr; - DigitalUniverseModule::ProgramObjectManager.releaseProgramObject( - RenderToPolygonProgram - ); + DigitalUniverseModule::ProgramObjectManager.release(RenderToPolygonProgram); _renderToPolygonProgram = nullptr; - if (_hasSpriteTexture) { - _spriteTexture = nullptr; - } + DigitalUniverseModule::TextureManager.release(_spriteTexture); + _spriteTexture = nullptr; if (_hasPolygon) { _polygonTexture = nullptr; @@ -1077,37 +1068,30 @@ void RenderableBillboardsCloud::update(const UpdateData&) { _dataIsDirty = false; } - if (_hasSpriteTexture && _spriteTextureIsDirty) { - LDEBUG("Reloading Sprite Texture"); - _spriteTexture = nullptr; - if (_spriteTexturePath.value() != "") { - _spriteTexture = ghoul::io::TextureReader::ref().loadTexture( - absPath(_spriteTexturePath) - ); - if (_spriteTexture) { - LINFO(fmt::format( - "Loaded texture from '{}'", - absPath(_spriteTexturePath) - )); - _spriteTexture->uploadTexture(); + if (_hasSpriteTexture && _spriteTextureIsDirty && !_spriteTexturePath.value().empty()) + { + ghoul::opengl::Texture* t = _spriteTexture; + + unsigned int hash = ghoul::hashCRC32File(_spriteTexturePath); + + _spriteTexture = DigitalUniverseModule::TextureManager.request( + std::to_string(hash), + [path = _spriteTexturePath]() -> std::unique_ptr { + LINFO(fmt::format("Loaded texture from '{}'", absPath(path))); + std::unique_ptr t = + ghoul::io::TextureReader::ref().loadTexture( + absPath(path) + ); + + t->uploadTexture(); + t->setFilter(ghoul::opengl::Texture::FilterMode::AnisotropicMipMap); + return t; } - _spriteTexture->setFilter( - ghoul::opengl::Texture::FilterMode::AnisotropicMipMap - ); + ); - _spriteTextureFile = std::make_unique( - _spriteTexturePath); - _spriteTextureFile->setCallback( - [&](const ghoul::filesystem::File&) { _spriteTextureIsDirty = true; } - ); - } + DigitalUniverseModule::TextureManager.release(t); _spriteTextureIsDirty = false; } - - if (_hasLabel && _labelDataIsDirty) { - - _labelDataIsDirty = false; - } } bool RenderableBillboardsCloud::loadData() { diff --git a/modules/digitaluniverse/rendering/renderablebillboardscloud.h b/modules/digitaluniverse/rendering/renderablebillboardscloud.h index 1feb69be5a..5d0b13ba67 100644 --- a/modules/digitaluniverse/rendering/renderablebillboardscloud.h +++ b/modules/digitaluniverse/rendering/renderablebillboardscloud.h @@ -105,7 +105,6 @@ private: bool _hasColorMapFile = false; bool _hasPolygon = false; bool _hasLabel = false; - bool _labelDataIsDirty = true; int _polygonSides = 0; @@ -133,10 +132,8 @@ private: // DEBUG: properties::OptionProperty _renderOption; - - std::unique_ptr _polygonTexture; - std::unique_ptr _spriteTexture; - std::unique_ptr _spriteTextureFile; + ghoul::opengl::Texture* _polygonTexture; + ghoul::opengl::Texture* _spriteTexture; ghoul::opengl::ProgramObject* _program = nullptr; ghoul::opengl::ProgramObject* _renderToPolygonProgram = nullptr; diff --git a/modules/digitaluniverse/rendering/renderabledumeshes.cpp b/modules/digitaluniverse/rendering/renderabledumeshes.cpp index fb2f46f535..0bf8cdfb30 100644 --- a/modules/digitaluniverse/rendering/renderabledumeshes.cpp +++ b/modules/digitaluniverse/rendering/renderabledumeshes.cpp @@ -392,7 +392,7 @@ bool RenderableDUMeshes::isReady() const { } void RenderableDUMeshes::initializeGL() { - _program = DigitalUniverseModule::ProgramObjectManager.requestProgramObject( + _program = DigitalUniverseModule::ProgramObjectManager.request( ProgramObjectName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -437,7 +437,7 @@ void RenderableDUMeshes::deinitializeGL() { } } - DigitalUniverseModule::ProgramObjectManager.releaseProgramObject( + DigitalUniverseModule::ProgramObjectManager.release( ProgramObjectName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/digitaluniverse/rendering/renderableplanescloud.cpp b/modules/digitaluniverse/rendering/renderableplanescloud.cpp index 2907e71a17..923ce1204b 100644 --- a/modules/digitaluniverse/rendering/renderableplanescloud.cpp +++ b/modules/digitaluniverse/rendering/renderableplanescloud.cpp @@ -488,7 +488,7 @@ void RenderablePlanesCloud::initialize() { } void RenderablePlanesCloud::initializeGL() { - _program = DigitalUniverseModule::ProgramObjectManager.requestProgramObject( + _program = DigitalUniverseModule::ProgramObjectManager.request( ProgramObjectName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -534,7 +534,7 @@ void RenderablePlanesCloud::deleteDataGPU() { void RenderablePlanesCloud::deinitializeGL() { deleteDataGPU(); - DigitalUniverseModule::ProgramObjectManager.releaseProgramObject( + DigitalUniverseModule::ProgramObjectManager.release( ProgramObjectName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/digitaluniverse/rendering/renderablepoints.cpp b/modules/digitaluniverse/rendering/renderablepoints.cpp index 6e98ab3547..ddc90745e9 100644 --- a/modules/digitaluniverse/rendering/renderablepoints.cpp +++ b/modules/digitaluniverse/rendering/renderablepoints.cpp @@ -261,7 +261,7 @@ void RenderablePoints::initializeGL() { // end of the program. if (_hasSpriteTexture) { - _program = DigitalUniverseModule::ProgramObjectManager.requestProgramObject( + _program = DigitalUniverseModule::ProgramObjectManager.request( "RenderablePoints Sprite", []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -283,7 +283,7 @@ void RenderablePoints::initializeGL() { _uniformCache.hasColorMap = _program->uniformLocation("hasColorMap"); } else { - _program = DigitalUniverseModule::ProgramObjectManager.requestProgramObject( + _program = DigitalUniverseModule::ProgramObjectManager.request( "RenderablePoints", []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -311,7 +311,7 @@ void RenderablePoints::deinitializeGL() { glDeleteVertexArrays(1, &_vao); _vao = 0; - DigitalUniverseModule::ProgramObjectManager.releaseProgramObject( + DigitalUniverseModule::ProgramObjectManager.release( _program->name(), [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/multiresvolume/rendering/atlasmanager.cpp b/modules/multiresvolume/rendering/atlasmanager.cpp index c10a87c406..366691d03b 100644 --- a/modules/multiresvolume/rendering/atlasmanager.cpp +++ b/modules/multiresvolume/rendering/atlasmanager.cpp @@ -27,6 +27,7 @@ #include #include #include +#include namespace openspace { diff --git a/modules/space/rendering/renderableplanet.cpp b/modules/space/rendering/renderableplanet.cpp index 6ae6f70304..0507bf7239 100644 --- a/modules/space/rendering/renderableplanet.cpp +++ b/modules/space/rendering/renderableplanet.cpp @@ -349,7 +349,7 @@ void RenderablePlanet::initializeGL() { // correct one. if (!_programObject && _shadowEnabled && _hasNightTexture) { - _programObject = SpaceModule::ProgramObjectManager.requestProgramObject( + _programObject = SpaceModule::ProgramObjectManager.request( ShadowNightProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -361,7 +361,7 @@ void RenderablePlanet::initializeGL() { ); } else if (!_programObject && _shadowEnabled) { - _programObject = SpaceModule::ProgramObjectManager.requestProgramObject( + _programObject = SpaceModule::ProgramObjectManager.request( ShadowProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -373,7 +373,7 @@ void RenderablePlanet::initializeGL() { ); } else if (!_programObject && _hasNightTexture) { - _programObject = SpaceModule::ProgramObjectManager.requestProgramObject( + _programObject = SpaceModule::ProgramObjectManager.request( NightProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -385,7 +385,7 @@ void RenderablePlanet::initializeGL() { ); } else if (!_programObject) { - _programObject = SpaceModule::ProgramObjectManager.requestProgramObject( + _programObject = SpaceModule::ProgramObjectManager.request( PlainProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -416,7 +416,7 @@ void RenderablePlanet::deinitializeGL() { _geometry = nullptr; } - SpaceModule::ProgramObjectManager.releaseProgramObject( + SpaceModule::ProgramObjectManager.release( _programObject->name(), [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/spacecraftinstruments/rendering/renderablefov.cpp b/modules/spacecraftinstruments/rendering/renderablefov.cpp index 409bc6f761..c3d0c131f8 100644 --- a/modules/spacecraftinstruments/rendering/renderablefov.cpp +++ b/modules/spacecraftinstruments/rendering/renderablefov.cpp @@ -327,7 +327,7 @@ RenderableFov::RenderableFov(const ghoul::Dictionary& dictionary) void RenderableFov::initializeGL() { _programObject = - SpacecraftInstrumentsModule::ProgramObjectManager.requestProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -493,7 +493,7 @@ void RenderableFov::initializeGL() { } void RenderableFov::deinitializeGL() { - SpacecraftInstrumentsModule::ProgramObjectManager.releaseProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp b/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp index ddd0dace19..ab956b65c5 100644 --- a/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp +++ b/modules/spacecraftinstruments/rendering/renderableplanetprojection.cpp @@ -349,7 +349,7 @@ RenderablePlanetProjection::~RenderablePlanetProjection() {} // NOLINT void RenderablePlanetProjection::initializeGL() { _programObject = - SpacecraftInstrumentsModule::ProgramObjectManager.requestProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.request( ProjectiveProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -388,7 +388,7 @@ void RenderablePlanetProjection::initializeGL() { _mainUniformCache.heightTexture = _programObject->uniformLocation("heightTexture"); _fboProgramObject = - SpacecraftInstrumentsModule::ProgramObjectManager.requestProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.request( FBOPassProgramName, []() -> std::unique_ptr { return ghoul::opengl::ProgramObject::Build( @@ -464,7 +464,7 @@ void RenderablePlanetProjection::deinitializeGL() { glDeleteVertexArrays(1, &_quad); glDeleteBuffers(1, &_vertexPositionBuffer); - SpacecraftInstrumentsModule::ProgramObjectManager.releaseProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.release( ProjectiveProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); @@ -472,7 +472,7 @@ void RenderablePlanetProjection::deinitializeGL() { ); _programObject = nullptr; - SpacecraftInstrumentsModule::ProgramObjectManager.releaseProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.release( FBOPassProgramName ); _fboProgramObject = nullptr; diff --git a/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp b/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp index 1b1aa682ed..5011c1c2cd 100644 --- a/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp +++ b/modules/spacecraftinstruments/rendering/renderableshadowcylinder.cpp @@ -277,7 +277,7 @@ void RenderableShadowCylinder::initializeGL() { glGenVertexArrays(1, &_vao); glGenBuffers(1, &_vbo); - _shader = SpacecraftInstrumentsModule::ProgramObjectManager.requestProgramObject( + _shader = SpacecraftInstrumentsModule::ProgramObjectManager.request( ProgramName, []() -> std::unique_ptr { return OsEng.renderEngine().buildRenderProgram( @@ -301,7 +301,7 @@ void RenderableShadowCylinder::initializeGL() { } void RenderableShadowCylinder::deinitializeGL() { - SpacecraftInstrumentsModule::ProgramObjectManager.releaseProgramObject( + SpacecraftInstrumentsModule::ProgramObjectManager.release( ProgramName, [](ghoul::opengl::ProgramObject* p) { OsEng.renderEngine().removeRenderProgram(p); diff --git a/modules/spacecraftinstruments/util/projectioncomponent.cpp b/modules/spacecraftinstruments/util/projectioncomponent.cpp index 1aa88ac82c..2588b9d611 100644 --- a/modules/spacecraftinstruments/util/projectioncomponent.cpp +++ b/modules/spacecraftinstruments/util/projectioncomponent.cpp @@ -22,6 +22,8 @@ * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. * ****************************************************************************************/ +#pragma optimize ("", off) + #include #include diff --git a/src/util/spicemanager.cpp b/src/util/spicemanager.cpp index 38b5cba88e..e21845b97d 100644 --- a/src/util/spicemanager.cpp +++ b/src/util/spicemanager.cpp @@ -207,12 +207,6 @@ SpiceManager::KernelHandle SpiceManager::loadKernel(std::string filePath) { if (it != _loadedKernels.end()) { it->refCount++; - LDEBUG( - fmt::format( - "Kernel '{}' was already loaded. New reference count: {}", - path, it->refCount - ) - ); return it->id; } diff --git a/tests/test_documentation.inl b/tests/test_documentation.inl index 90ae1a3a06..a16f4807b9 100644 --- a/tests/test_documentation.inl +++ b/tests/test_documentation.inl @@ -2023,9 +2023,12 @@ TEST_F(DocumentationTest, AndOperator) { Documentation doc { { - { "a", new AndVerifier( - new IntGreaterEqualVerifier(2), new IntLessEqualVerifier(5) - ), Optional::No + { + "a", + new AndVerifier({ + new IntGreaterEqualVerifier(2), new IntLessEqualVerifier(5) + }), + Optional::No } } }; @@ -2061,7 +2064,7 @@ TEST_F(DocumentationTest, OrOperator) { using namespace std::string_literals; Documentation doc { - {{ "a", new OrVerifier(new StringVerifier, new IntVerifier), Optional::No}} + {{ "a", new OrVerifier({ new StringVerifier, new IntVerifier }), Optional::No }} }; ghoul::Dictionary positive {