From 3ba03782c0c4241241feb2bed6c0cabd6439b56a Mon Sep 17 00:00:00 2001 From: Alexei Kotov Date: Thu, 4 Jan 2024 00:50:35 +0300 Subject: [PATCH] Silence OSG shininess limit warnings --- components/nifosg/nifloader.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/components/nifosg/nifloader.cpp b/components/nifosg/nifloader.cpp index 5234e700f2..2f7574d68b 100644 --- a/components/nifosg/nifloader.cpp +++ b/components/nifosg/nifloader.cpp @@ -2599,7 +2599,10 @@ namespace NifOsg emissiveMult = matprop->mEmissiveMult; mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(matprop->mSpecular, 1.f)); - mat->setShininess(osg::Material::FRONT_AND_BACK, matprop->mGlossiness); + // NIFs may provide specular exponents way above OpenGL's limit. + // They can't be used properly, but we don't need OSG to constantly harass us about it. + float glossiness = std::clamp(matprop->mGlossiness, 0.f, 128.f); + mat->setShininess(osg::Material::FRONT_AND_BACK, glossiness); if (!matprop->mController.empty()) { @@ -2714,7 +2717,8 @@ namespace NifOsg mat->setAlpha(osg::Material::FRONT_AND_BACK, shaderprop->mAlpha); mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(shaderprop->mEmissive, 1.f)); mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(shaderprop->mSpecular, 1.f)); - mat->setShininess(osg::Material::FRONT_AND_BACK, shaderprop->mGlossiness); + float glossiness = std::clamp(shaderprop->mGlossiness, 0.f, 128.f); + mat->setShininess(osg::Material::FRONT_AND_BACK, glossiness); emissiveMult = shaderprop->mEmissiveMult; specStrength = shaderprop->mSpecStrength; specEnabled = shaderprop->specular();