From 43b381f592344cabee98be158b652ea1177e9cfd Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sat, 22 Jun 2024 11:57:09 +0300 Subject: [PATCH 1/3] Loop by const ref in activeSpells.add --- apps/openmw/mwlua/magicbindings.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/openmw/mwlua/magicbindings.cpp b/apps/openmw/mwlua/magicbindings.cpp index da689558a2..71971de2fc 100644 --- a/apps/openmw/mwlua/magicbindings.cpp +++ b/apps/openmw/mwlua/magicbindings.cpp @@ -931,7 +931,7 @@ namespace MWLua if (stackable) params.setFlag(ESM::ActiveSpells::Flag_Stackable); - for (auto enam : enams) + for (const ESM::IndexedENAMstruct& enam : enams) { const ESM::MagicEffect* mgef = esmStore.get().find(enam.mData.mEffectID); MWMechanics::ActiveSpells::ActiveEffect effect; From 162ac6a75e623eaffaff35cd319c8b6d1333b092 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sat, 22 Jun 2024 12:08:32 +0300 Subject: [PATCH 2/3] Avoid copying shader material shared_ptr in NifLoader --- components/nifosg/nifloader.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/components/nifosg/nifloader.cpp b/components/nifosg/nifloader.cpp index 7c9ff45f1e..6ec0fe51e0 100644 --- a/components/nifosg/nifloader.cpp +++ b/components/nifosg/nifloader.cpp @@ -2181,14 +2181,14 @@ namespace NifOsg } void handleShaderMaterialNodeProperties( - Bgsm::MaterialFilePtr material, osg::StateSet* stateset, std::vector& boundTextures) + const Bgsm::MaterialFile* material, osg::StateSet* stateset, std::vector& boundTextures) { const unsigned int uvSet = 0; const bool wrapS = material->wrapS(); const bool wrapT = material->wrapT(); if (material->mShaderType == Bgsm::ShaderType::Lighting) { - const Bgsm::BGSMFile* bgsm = static_cast(material.get()); + const Bgsm::BGSMFile* bgsm = static_cast(material); if (!bgsm->mDiffuseMap.empty()) attachExternalTexture( @@ -2205,7 +2205,7 @@ namespace NifOsg } else if (material->mShaderType == Bgsm::ShaderType::Effect) { - const Bgsm::BGEMFile* bgem = static_cast(material.get()); + const Bgsm::BGEMFile* bgem = static_cast(material); if (!bgem->mBaseMap.empty()) attachExternalTexture("diffuseMap", bgem->mBaseMap, wrapS, wrapT, uvSet, stateset, boundTextures); @@ -2288,7 +2288,7 @@ namespace NifOsg } void handleShaderMaterialDrawableProperties( - Bgsm::MaterialFilePtr shaderMat, osg::ref_ptr mat, osg::Node& node, bool& hasSortAlpha) + const Bgsm::MaterialFile* shaderMat, osg::ref_ptr mat, osg::Node& node, bool& hasSortAlpha) { mat->setAlpha(osg::Material::FRONT_AND_BACK, shaderMat->mTransparency); handleAlphaTesting(shaderMat->mAlphaTest, osg::AlphaFunc::GREATER, shaderMat->mAlphaTestThreshold, node); @@ -2297,13 +2297,13 @@ namespace NifOsg handleDecal(shaderMat->mDecal, hasSortAlpha, node); if (shaderMat->mShaderType == Bgsm::ShaderType::Lighting) { - auto bgsm = static_cast(shaderMat.get()); + auto bgsm = static_cast(shaderMat); mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(bgsm->mEmittanceColor, 1.f)); mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(bgsm->mSpecularColor, 1.f)); } else if (shaderMat->mShaderType == Bgsm::ShaderType::Effect) { - auto bgem = static_cast(shaderMat.get()); + auto bgem = static_cast(shaderMat); mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(bgem->mEmittanceColor, 1.f)); if (bgem->mSoft) SceneUtil::setupSoftEffect(node, bgem->mSoftDepth, true, bgem->mSoftDepth); @@ -2537,7 +2537,7 @@ namespace NifOsg clearBoundTextures(stateset, boundTextures); if (Bgsm::MaterialFilePtr material = getShaderMaterial(texprop->mName, mMaterialManager)) { - handleShaderMaterialNodeProperties(material, stateset, boundTextures); + handleShaderMaterialNodeProperties(material.get(), stateset, boundTextures); break; } if (!texprop->mTextureSet.empty()) @@ -2564,7 +2564,7 @@ namespace NifOsg clearBoundTextures(stateset, boundTextures); if (Bgsm::MaterialFilePtr material = getShaderMaterial(texprop->mName, mMaterialManager)) { - handleShaderMaterialNodeProperties(material, stateset, boundTextures); + handleShaderMaterialNodeProperties(material.get(), stateset, boundTextures); break; } if (!texprop->mSourceTexture.empty()) @@ -2783,7 +2783,7 @@ namespace NifOsg auto shaderprop = static_cast(property); if (Bgsm::MaterialFilePtr shaderMat = getShaderMaterial(shaderprop->mName, mMaterialManager)) { - handleShaderMaterialDrawableProperties(shaderMat, mat, *node, hasSortAlpha); + handleShaderMaterialDrawableProperties(shaderMat.get(), mat, *node, hasSortAlpha); if (shaderMat->mShaderType == Bgsm::ShaderType::Lighting) { auto bgsm = static_cast(shaderMat.get()); @@ -2809,7 +2809,7 @@ namespace NifOsg auto shaderprop = static_cast(property); if (Bgsm::MaterialFilePtr shaderMat = getShaderMaterial(shaderprop->mName, mMaterialManager)) { - handleShaderMaterialDrawableProperties(shaderMat, mat, *node, hasSortAlpha); + handleShaderMaterialDrawableProperties(shaderMat.get(), mat, *node, hasSortAlpha); break; } handleDecal(shaderprop->decal(), hasSortAlpha, *node); From b0671c76d87dbc0bed0341979f33a07c28329396 Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Sat, 22 Jun 2024 12:39:59 +0300 Subject: [PATCH 3/3] Throw on setting tags that can't provide the setting name --- apps/openmw/mwgui/windowmanagerimp.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/apps/openmw/mwgui/windowmanagerimp.cpp b/apps/openmw/mwgui/windowmanagerimp.cpp index 3212e8f02b..012c19275c 100644 --- a/apps/openmw/mwgui/windowmanagerimp.cpp +++ b/apps/openmw/mwgui/windowmanagerimp.cpp @@ -1097,6 +1097,9 @@ namespace MWGui { tag = tag.substr(MyGuiPrefix.length()); size_t comma_pos = tag.find(','); + if (comma_pos == std::string_view::npos) + throw std::runtime_error("Invalid setting tag (expected comma): " + std::string(tag)); + std::string_view settingSection = tag.substr(0, comma_pos); std::string_view settingTag = tag.substr(comma_pos + 1, tag.length());