diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/cellmarker.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/cellmarker.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/cellmarker.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/cellmarker.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,4 +6,5 @@ #include #include +#include #include #include @@ -14,5 +15,4 @@ #include -#include #include @@ -83,6 +83,6 @@ mMarkerNode->getOrCreateStateSet()->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF); mMarkerNode->getOrCreateStateSet()->setRenderBinDetails(11, "RenderBin"); - osg::ref_ptr mat - = new SceneUtil::Material({ .mVertexColorMode = SceneUtil::VertexColorModes::AmbientAndDiffuse }); + osg::ref_ptr mat = new osg::Material; + mat->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); mMarkerNode->getOrCreateStateSet()->setAttribute(mat); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/cellwater.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/cellwater.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/cellwater.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/cellwater.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -24,5 +24,4 @@ #include #include -#include #include @@ -191,6 +190,4 @@ mWaterGeometry->getStateSet()->setTextureAttribute(0, waterTexture, osg::StateAttribute::ON); - mData.getResourceSystem()->getSceneManager()->recreateShaders(mWaterGeometry); - mWaterGroup->addChild(mWaterGeometry); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/objectmarker.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/objectmarker.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/objectmarker.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/objectmarker.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -4,4 +4,5 @@ #include +#include #include #include @@ -9,5 +10,4 @@ #include #include -#include #include @@ -111,9 +111,7 @@ { osg::StateSet* state = node->getStateSet(); - SceneUtil::Material* mat - = static_cast(state->getAttribute(osg::StateAttribute::MATERIAL)); - osg::Vec4f emis = mat->getEmission(); - mat->setEmission(emis / 4); - mat->updateStateSet(state); + osg::Material* mat = static_cast(state->getAttribute(osg::StateAttribute::MATERIAL)); + osg::Vec4f emis = mat->getEmission(osg::Material::FRONT_AND_BACK); + mat->setEmission(osg::Material::FRONT_AND_BACK, emis / 4); mOriginalColors.emplace(name, emis); } @@ -259,5 +257,5 @@ for (const auto& [nodeName, mat] : mLastHighlightedNodes) - mat->setEmission(mat->getEmission() / 4); + mat->setEmission(osg::Material::FRONT_AND_BACK, mat->getEmission(osg::Material::FRONT_AND_BACK) / 4); mLastHighlightedNodes.clear(); @@ -300,7 +298,6 @@ osg::StateAttribute* matAttr = state->getAttribute(osg::StateAttribute::MATERIAL); - SceneUtil::Material* mat = static_cast(matAttr); - mat->setEmission(mOriginalColors[materialNodeName]); - mat->updateStateSet(state); + osg::Material* mat = static_cast(matAttr); + mat->setEmission(osg::Material::FRONT_AND_BACK, mOriginalColors[materialNodeName]); mLastHighlightedNodes.emplace(std::make_pair(matNode->getName(), mat)); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/objectmarker.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/objectmarker.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/objectmarker.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/objectmarker.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -7,8 +7,4 @@ { class Camera; -} - -namespace SceneUtil -{ class Material; } @@ -39,5 +35,5 @@ std::vector mSelectionHistory; std::string mLastHitNode; - std::unordered_map mLastHighlightedNodes; + std::unordered_map mLastHighlightedNodes; float mMarkerScale; int mSubMode; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/scenewidget.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/scenewidget.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/opencs/view/render/scenewidget.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/opencs/view/render/scenewidget.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -22,4 +22,5 @@ #include #include +#include #include #include @@ -47,6 +48,4 @@ #include #include -#include -#include #include #include @@ -118,6 +117,4 @@ , mRootNode(nullptr) { - SceneUtil::registerSerializers(false); - mView = new osgViewer::View; @@ -185,8 +182,9 @@ mView->getCamera()->setName(Constants::SceneCamera); - osg::ref_ptr defaultMat(new SceneUtil::Material); - defaultMat->updateStateSet(mRootNode->getOrCreateStateSet()); - mRootNode->getOrCreateStateSet()->addUniform(new osg::Uniform("alpha", 1.f)); - mRootNode->getOrCreateStateSet()->addUniform(new osg::Uniform("actorFade", 1.f)); + osg::ref_ptr defaultMat(new osg::Material); + defaultMat->setColorMode(osg::Material::OFF); + defaultMat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); mView->getCamera()->getOrCreateStateSet()->setAttribute(defaultMat); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/engine.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/engine.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/engine.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/engine.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -962,6 +962,5 @@ // Setup viewer mViewer = new osgViewer::Viewer; - mViewer->getCamera()->getOrCreateStateSet()->removeAttribute(osg::StateAttribute::MATERIAL); - SceneUtil::disableFFPStateForRenderer(static_cast(mViewer->getCamera()->getRenderer())); + SceneUtil::disableFFPLightModelForRenderer(static_cast(mViewer->getCamera()->getRenderer())); mViewer->setReleaseContextAtEndOfFrameHint(false); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwmechanics/character.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwmechanics/character.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwmechanics/character.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwmechanics/character.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -2878,10 +2878,8 @@ if (!mAnimation) return; - - float alpha = 1.f; - // We should take actor's invisibility in account if (mPtr.getClass().isActor()) { + float alpha = 1.f; if (mPtr.getClass() .getCreatureStats(mPtr) @@ -2904,8 +2902,10 @@ alpha *= std::clamp(1.f - chameleon / 100.f, 0.25f, 0.75f); } + + visibility = std::min(visibility, alpha); } // TODO: implement a dithering shader rather than just change object transparency. - mAnimation->setAlpha(visibility, alpha); + mAnimation->setAlpha(visibility); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/actorspaths.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/actorspaths.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/actorspaths.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/actorspaths.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -10,9 +10,8 @@ #include +#include #include #include -#include - #include "../mwbase/environment.hpp" #include "../mwbase/world.hpp" @@ -26,6 +25,6 @@ osg::ref_ptr makeGroupStateSet() { - osg::ref_ptr material - = new SceneUtil::Material({ .mVertexColorMode = SceneUtil::VertexColorModes::AmbientAndDiffuse }); + osg::ref_ptr material = new osg::Material; + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); osg::ref_ptr stateSet = new osg::StateSet; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/animation.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/animation.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/animation.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/animation.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -5,4 +5,5 @@ #include +#include #include #include @@ -428,15 +429,10 @@ { public: - TransparencyUpdater(float actorFade, float alpha) - : mActorFade(actorFade) - , mAlpha(alpha) + TransparencyUpdater(const float alpha) + : mAlpha(alpha) { } - void setAlpha(float actorFade, float alpha) - { - mActorFade = actorFade; - mAlpha = alpha; - } + void setAlpha(const float alpha) { mAlpha = alpha; } protected: @@ -444,21 +440,27 @@ { osg::BlendFunc* blendfunc(new osg::BlendFunc); - stateset->setAttributeAndModes(blendfunc, osg::StateAttribute::ON); + stateset->setAttributeAndModes(blendfunc, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); stateset->setRenderBinMode(osg::StateSet::OVERRIDE_RENDERBIN_DETAILS); - stateset->addUniform(new osg::Uniform("alpha", mAlpha)); - stateset->addUniform(new osg::Uniform("actorFade", mActorFade)); + // FIXME: overriding diffuse/ambient/emissive colors + osg::Material* material = new osg::Material; + material->setColorMode(osg::Material::OFF); + material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, mAlpha)); + material->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + stateset->setAttributeAndModes(material, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); + stateset->addUniform( + new osg::Uniform("colorMode", 0), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); } void apply(osg::StateSet* stateset, osg::NodeVisitor* /*nv*/) override { - stateset->getUniform("actorFade")->set(mActorFade); - stateset->getUniform("alpha")->set(mAlpha); + osg::Material* material + = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + material->setAlpha(osg::Material::FRONT_AND_BACK, mAlpha); } private: - float mActorFade; float mAlpha; }; @@ -555,5 +557,4 @@ , mHasMagicEffects(false) , mAlpha(1.f) - , mActorFade(1.f) , mPlayScriptedOnly(false) , mRequiresBoneMap(false) @@ -1694,5 +1695,5 @@ mExtraLightSource = SceneUtil::addLight(parent, esmLight, Mask_Lighting, exterior); - mExtraLightSource->setActorFade(mActorFade); + mExtraLightSource->setActorFade(mAlpha); } @@ -1767,6 +1768,4 @@ // Morrowind has a white ambient light attached to the root VFX node of the scenegraph SceneUtil::configureSunAmbientOverride(osg::Vec4f(1, 1, 1, 1), node->getOrCreateStateSet()); - node->getOrCreateStateSet()->addUniform( - new osg::Uniform("alpha", 1.f), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); } @@ -1866,21 +1865,20 @@ } - void Animation::setAlpha(float actorFade, float alpha) + void Animation::setAlpha(float alpha) { - if ((alpha == mAlpha && actorFade == mActorFade) || !mObjectRoot) + if (alpha == mAlpha || !mObjectRoot) return; mAlpha = alpha; - mActorFade = actorFade; // TODO: we use it to fade actors away too, but it would be nice to have a dithering shader instead. - if (mAlpha != 1.f || mActorFade != 1.f) + if (alpha != 1.f) { if (mTransparencyUpdater == nullptr) { - mTransparencyUpdater = new TransparencyUpdater(actorFade, alpha); + mTransparencyUpdater = new TransparencyUpdater(alpha); mObjectRoot->addCullCallback(mTransparencyUpdater); } else - mTransparencyUpdater->setAlpha(actorFade, alpha); + mTransparencyUpdater->setAlpha(alpha); } else @@ -1890,5 +1888,5 @@ } if (mExtraLightSource) - mExtraLightSource->setActorFade(actorFade); + mExtraLightSource->setActorFade(alpha); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/animation.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/animation.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/animation.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/animation.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -242,5 +242,4 @@ float mAlpha; - float mActorFade; mutable std::map> mAnimVelocities; @@ -467,5 +466,6 @@ virtual void setWeaponGroup(const std::string& group, bool relativeDuration) {} virtual void setVampire(bool vampire) {} - void setAlpha(float actorFade, float alpha); + /// A value < 1 makes the animation translucent, 1.f = fully opaque + void setAlpha(float alpha); virtual void setPitchFactor(float factor) {} virtual void attachArrow() {} diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/bulletdebugdraw.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/bulletdebugdraw.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/bulletdebugdraw.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/bulletdebugdraw.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -5,10 +5,9 @@ #include #include +#include #include #include #include -#include - #include #include @@ -60,7 +59,4 @@ mTrisGeometry->setVertexArray(mTrisVertices); mTrisGeometry->setDataVariance(osg::Object::DYNAMIC); - osg::ref_ptr triColors = new osg::Vec4Array; - triColors->push_back({ 1, 1, 1, 1 }); - mTrisGeometry->setColorArray(triColors, osg::Array::BIND_OVERALL); mTrisGeometry->addPrimitiveSet(mTrisDrawArrays); @@ -74,6 +70,6 @@ stateSet->setAttributeAndModes(new osg::PolygonOffset( SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f, SceneUtil::AutoDepth::isReversed() ? 1.f : -1.f)); - osg::ref_ptr material - = new SceneUtil::Material({ .mVertexColorMode = SceneUtil::VertexColorModes::AmbientAndDiffuse }); + osg::ref_ptr material = new osg::Material; + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); stateSet->setAttribute(material); mLinesGeometry->setStateSet(stateSet); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/characterpreview.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/characterpreview.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/characterpreview.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/characterpreview.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,4 +6,5 @@ #include #include +#include #include #include @@ -19,5 +20,4 @@ #include #include -#include #include #include @@ -239,6 +239,9 @@ stateset->setMode(GL_NORMALIZE, osg::StateAttribute::ON); stateset->setMode(GL_CULL_FACE, osg::StateAttribute::ON); - osg::ref_ptr defaultMat(new SceneUtil::Material); - defaultMat->updateStateSet(stateset); + osg::ref_ptr defaultMat(new osg::Material); + defaultMat->setColorMode(osg::Material::OFF); + defaultMat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); stateset->setAttribute(defaultMat); @@ -254,6 +257,6 @@ stateset->addUniform( new osg::Uniform("screenRes", osg::Vec2f{ static_cast(sizeX), static_cast(sizeY) })); - stateset->addUniform(new osg::Uniform("alpha", 1.f)); - stateset->addUniform(new osg::Uniform("actorFade", 1.f)); + + stateset->addUniform(new osg::Uniform("emissiveMult", 1.f)); osg::ref_ptr dummyTexture = new osg::Texture2D(); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/objectpaging.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/objectpaging.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/objectpaging.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/objectpaging.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,4 +6,5 @@ #include +#include #include #include @@ -34,5 +35,4 @@ #include #include -#include #include #include @@ -424,17 +424,19 @@ void apply(osg::Drawable& node) override { - osg::ref_ptr m(new SceneUtil::Material); + osg::ref_ptr m(new osg::Material); osg::Vec4f color( Misc::Rng::rollProbability(), Misc::Rng::rollProbability(), Misc::Rng::rollProbability(), 0.f); color.normalize(); - m->setDiffuse(osg::Vec4f(0.1f, 0.1f, 0.1f, 1.f)); - m->setAmbient(osg::Vec4f(0.1f, 0.1f, 0.1f, 1.f)); - m->setEmission(osg::Vec4f(color)); - m->setVertexColorMode(SceneUtil::VertexColorModes::None); + m->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.1f, 0.1f, 0.1f, 1.f)); + m->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.1f, 0.1f, 0.1f, 1.f)); + m->setColorMode(osg::Material::OFF); + m->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(color)); osg::ref_ptr stateset = node.getStateSet() ? osg::clone(node.getStateSet(), osg::CopyOp::SHALLOW_COPY) : new osg::StateSet; stateset->setAttribute(m); - m->updateStateSet(stateset); + stateset->addUniform(new osg::Uniform("colorMode", 0)); + stateset->addUniform(new osg::Uniform("emissiveMult", 1.f)); + stateset->addUniform(new osg::Uniform("specStrength", 1.f)); node.setStateSet(stateset); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/renderingmanager.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/renderingmanager.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,4 +6,5 @@ #include #include +#include #include #include @@ -32,5 +33,4 @@ #include #include -#include #include #include @@ -272,7 +272,4 @@ mResourceSystem->getSceneManager()->getShaderManager().setGlobalDefines(globalDefines); - // Only set up the shadow casting shaders once our global defines have been set - mShadowManager->setupShaders(mResourceSystem->getSceneManager()->getShaderManager()); - mNavMesh = std::make_unique(mRootNode, mWorkQueue, Settings::navigator().mEnableNavMeshRender, Settings::navigator().mNavMeshRenderMode); @@ -348,10 +345,13 @@ sceneRoot->getOrCreateStateSet()->setMode(GL_CULL_FACE, osg::StateAttribute::ON); sceneRoot->getOrCreateStateSet()->setMode(GL_NORMALIZE, osg::StateAttribute::ON); - osg::ref_ptr defaultMat(new SceneUtil::Material); - defaultMat->updateStateSet(sceneRoot->getOrCreateStateSet()); + osg::ref_ptr defaultMat(new osg::Material); + defaultMat->setColorMode(osg::Material::OFF); + defaultMat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + defaultMat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); sceneRoot->getOrCreateStateSet()->setAttribute(defaultMat); + sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("emissiveMult", 1.f)); + sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("specStrength", 1.f)); sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("distortionStrength", 0.f)); - sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("alpha", 1.f)); - sceneRoot->getOrCreateStateSet()->addUniform(new osg::Uniform("actorFade", 1.f)); resourceSystem->getSceneManager()->setUpNormalsRTForStateSet(sceneRoot->getOrCreateStateSet(), true); @@ -391,5 +391,5 @@ // Hopefully, anything genuinely requiring the default alpha func of GL_ALWAYS explicitly sets it - mViewer->getSceneData()->getOrCreateStateSet()->setAttribute(Shader::RemovedAlphaFunc::getInstance(GL_ALWAYS)); + mRootNode->getOrCreateStateSet()->setAttribute(Shader::RemovedAlphaFunc::getInstance(GL_ALWAYS)); // The transparent renderbin sets alpha testing on because that was faster on old GPUs. It's now slower and // breaks things. diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/ripplesimulation.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/ripplesimulation.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/ripplesimulation.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/ripplesimulation.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -5,4 +5,5 @@ #include +#include #include #include @@ -18,5 +19,4 @@ #include #include -#include #include "vismask.hpp" @@ -71,9 +71,9 @@ stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); - osg::ref_ptr mat(new SceneUtil::Material); - mat->setAmbient(osg::Vec4f(0.f, 0.f, 0.f, 1.f)); - mat->setEmission(osg::Vec4f(1.f, 1.f, 1.f, 1.f)); - mat->setSpecular(osg::Vec4f(0.f, 0.f, 0.f, 0.f)); - mat->setVertexColorMode(SceneUtil::VertexColorModes::Diffuse); + osg::ref_ptr mat(new osg::Material); + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 1.f)); + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(1.f, 1.f, 1.f, 1.f)); + mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); + mat->setColorMode(osg::Material::DIFFUSE); stateset->setAttributeAndModes(mat, osg::StateAttribute::ON); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/sky.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/sky.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/sky.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/sky.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -14,5 +14,4 @@ #include #include -#include #include #include @@ -146,6 +145,5 @@ { // need to create a deep copy of StateAttributes we will modify - SceneUtil::Material* mat - = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); stateset->setAttribute(osg::clone(mat, osg::CopyOp::DEEP_COPY_ALL), osg::StateAttribute::ON); } @@ -153,7 +151,6 @@ void apply(osg::StateSet* stateset, osg::NodeVisitor* nv) override { - SceneUtil::Material* mat - = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); - mat->setDiffuse(osg::Vec4f(0.f, 0.f, 0.f, mAlpha)); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, mAlpha)); } @@ -315,4 +312,6 @@ else atmosphereNight = mSceneManager->getInstance(Settings::models().mSkynight01.get(), mAtmosphereNightNode); + atmosphereNight->getOrCreateStateSet()->setAttributeAndModes( + createAlphaTrackingUnlitMaterial(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); ModVertexAlphaVisitor modStars(ModVertexAlphaVisitor::Stars); @@ -401,8 +400,8 @@ stateset->setMode(GL_BLEND, osg::StateAttribute::ON); - osg::ref_ptr mat = new SceneUtil::Material; - mat->setAmbient(osg::Vec4f(1, 1, 1, 1)); - mat->setDiffuse(osg::Vec4f(1, 1, 1, 1)); - mat->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); + osg::ref_ptr mat = new osg::Material; + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + mat->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); stateset->setAttributeAndModes(mat); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/sky.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/sky.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/sky.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/sky.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -18,4 +18,5 @@ class Group; class Node; + class Material; class PositionAttitudeTransform; class Camera; @@ -36,5 +37,4 @@ { class RTTNode; - class Material; } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/skyutil.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/skyutil.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/skyutil.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/skyutil.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -9,4 +9,5 @@ #include #include +#include #include #include @@ -90,4 +91,20 @@ namespace MWRender { + osg::ref_ptr createUnlitMaterial(osg::Material::ColorMode colorMode) + { + osg::ref_ptr mat = new osg::Material; + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 1.f)); + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 1.f)); + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(1.f, 1.f, 1.f, 1.f)); + mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); + mat->setColorMode(colorMode); + return mat; + } + + osg::ref_ptr createAlphaTrackingUnlitMaterial() + { + return createUnlitMaterial(osg::Material::DIFFUSE); + } + class SunUpdater : public SceneUtil::StateSetUpdater { @@ -100,12 +117,11 @@ } - void setDefaults(osg::StateSet* stateset) override - { - stateset->addUniform(new osg::Uniform("opacity", mColor.a())); - } + void setDefaults(osg::StateSet* stateset) override { stateset->setAttributeAndModes(createUnlitMaterial()); } void apply(osg::StateSet* stateset, osg::NodeVisitor*) override { - stateset->getUniform("opacity")->set(mColor.a()); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 0, mColor.a())); + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(mColor.r(), mColor.g(), mColor.b(), 1)); } }; @@ -168,7 +184,8 @@ { float fade = 1.f - (fadeThreshold - visibleRatio) / fadeThreshold; + osg::ref_ptr mat(createUnlitMaterial()); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 0, fade * mGlareView)); stateset = new osg::StateSet; - stateset->addUniform(new osg::Uniform("opacity", fade * mGlareView), - osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); + stateset->setAttributeAndModes(mat, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); } else if (visibleRatio < 1.f) @@ -260,6 +277,10 @@ osg::ref_ptr stateset = new osg::StateSet; - stateset->addUniform( - new osg::Uniform("diffuseColor", osg::Vec4f(mColor.x(), mColor.y(), mColor.z(), fade))); + osg::ref_ptr mat = createUnlitMaterial(); + + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 0, fade)); + mat->setEmission(osg::Material::FRONT_AND_BACK, mColor); + + stateset->setAttributeAndModes(mat); cv->pushStateSet(stateset); @@ -319,4 +340,5 @@ stateset->setAttributeAndModes( new osg::BlendFunc(osg::BlendFunc::ONE, osg::BlendFunc::ONE_MINUS_SRC_ALPHA), osg::StateAttribute::ON); + stateset->setAttributeAndModes(createUnlitMaterial(), osg::StateAttribute::ON); } @@ -396,11 +418,13 @@ void AtmosphereUpdater::setDefaults(osg::StateSet* stateset) { + stateset->setAttributeAndModes( + createAlphaTrackingUnlitMaterial(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); stateset->addUniform(new osg::Uniform("pass", static_cast(Pass::Atmosphere))); - stateset->addUniform(new osg::Uniform("diffuseColor", mEmissionColor)); } void AtmosphereUpdater::apply(osg::StateSet* stateset, osg::NodeVisitor* /*nv*/) { - stateset->getUniform("diffuseColor")->set(mEmissionColor); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + mat->setEmission(osg::Material::FRONT_AND_BACK, mEmissionColor); } @@ -456,4 +480,7 @@ void CloudUpdater::setDefaults(osg::StateSet* stateset) { + stateset->setAttribute( + createAlphaTrackingUnlitMaterial(), osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); + SceneUtil::setupTexMatForStateSet(*stateset, 0, osg::Matrixf{}); @@ -462,5 +489,4 @@ stateset->addUniform(new osg::Uniform("opacity", 1.f)); stateset->addUniform(new osg::Uniform("pass", static_cast(Pass::Clouds))); - stateset->addUniform(new osg::Uniform("diffuseColor", mEmissionColor)); } @@ -469,8 +495,10 @@ stateset->setTextureAttribute(0, mTexture, osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + mat->setEmission(osg::Material::FRONT_AND_BACK, mEmissionColor); + SceneUtil::setupTexMatForStateSet(*stateset, 0, mTexMat); stateset->getUniform("opacity")->set(mOpacity); - stateset->getUniform("diffuseColor")->set(mEmissionColor); } @@ -648,4 +676,5 @@ stateset->setTextureAttribute(0, sunTex); stateset->setTextureAttribute(0, new SceneUtil::TextureType("diffuseMap"), osg::StateAttribute::ON); + stateset->setAttributeAndModes(createUnlitMaterial()); stateset->addUniform(new osg::Uniform("pass", static_cast(Pass::Sunflash_Query))); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/skyutil.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/skyutil.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/skyutil.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/skyutil.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -2,4 +2,5 @@ #define OPENMW_MWRENDER_SKYUTIL_H +#include #include #include @@ -11,5 +12,4 @@ #include -#include #include #include @@ -129,4 +129,7 @@ }; + osg::ref_ptr createAlphaTrackingUnlitMaterial(); + osg::ref_ptr createUnlitMaterial(osg::Material::ColorMode colorMode = osg::Material::OFF); + class OcclusionCallback { diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/transparentpass.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/transparentpass.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/transparentpass.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/transparentpass.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -3,4 +3,5 @@ #include #include +#include #include #include @@ -9,5 +10,4 @@ #include -#include #include #include @@ -123,7 +123,7 @@ if (ss->getAttribute(osg::StateAttribute::MATERIAL)) { - const SceneUtil::Material* mat - = static_cast(ss->getAttribute(osg::StateAttribute::MATERIAL)); - if (mat->getDiffuse().a() < 0.5) + const osg::Material* mat + = static_cast(ss->getAttribute(osg::StateAttribute::MATERIAL)); + if (mat->getDiffuse(osg::Material::FRONT).a() < 0.5) continue; } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/water.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/water.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/apps/openmw/mwrender/water.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/apps/openmw/mwrender/water.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -9,4 +9,5 @@ #include #include +#include #include #include @@ -21,5 +22,4 @@ #include #include -#include #include #include diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/CMakeLists.txt /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/CMakeLists.txt --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/CMakeLists.txt 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/CMakeLists.txt 2026-08-22 16:25:48.000000000 +0000 @@ -142,5 +142,5 @@ detourdebugdraw navmesh agentpath animblendrules shadow mwshadowtechnique recastmesh shadowsbin osgacontroller rtt screencapture depth color riggeometryosgaextension extradata unrefqueue lightcommon clearcolor - cullsafeboundsvisitor keyframe nodecallback textkeymap glextensions fog texmat material + cullsafeboundsvisitor keyframe nodecallback textkeymap glextensions fog texmat ) diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/controller.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/controller.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/controller.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/controller.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -1,4 +1,5 @@ #include "controller.hpp" +#include #include #include @@ -10,5 +11,4 @@ #include #include -#include #include #include @@ -432,5 +432,6 @@ AlphaController::AlphaController() {} - AlphaController::AlphaController(const Nif::NiAlphaController* ctrl) + AlphaController::AlphaController(const Nif::NiAlphaController* ctrl, const osg::Material* baseMaterial) + : mBaseMaterial(baseMaterial) { if (!ctrl->mInterpolator.empty()) @@ -447,4 +448,5 @@ , Controller(copy) , mData(copy.mData) + , mBaseMaterial(copy.mBaseMaterial) { } @@ -452,5 +454,6 @@ void AlphaController::setDefaults(osg::StateSet* stateset) { - stateset->addUniform(new osg::Uniform("alpha", 1.f)); + stateset->setAttribute( + static_cast(mBaseMaterial->clone(osg::CopyOp::DEEP_COPY_ALL)), osg::StateAttribute::ON); } @@ -460,5 +463,8 @@ { float value = mData.interpKey(getInputValue(nv)); - stateset->getUniform("alpha")->set(value); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + osg::Vec4f diffuse = mat->getDiffuse(osg::Material::FRONT_AND_BACK); + diffuse.a() = value; + mat->setDiffuse(osg::Material::FRONT_AND_BACK, diffuse); } } @@ -467,5 +473,5 @@ MaterialColorController::MaterialColorController( - const Nif::NiMaterialColorController* ctrl, const SceneUtil::Material* baseMaterial) + const Nif::NiMaterialColorController* ctrl, const osg::Material* baseMaterial) : mTargetColor(ctrl->mTargetColor) , mBaseMaterial(baseMaterial) @@ -491,6 +497,6 @@ void MaterialColorController::setDefaults(osg::StateSet* stateset) { - stateset->setAttribute(static_cast(mBaseMaterial->clone(osg::CopyOp::DEEP_COPY_ALL)), - osg::StateAttribute::ON); + stateset->setAttribute( + static_cast(mBaseMaterial->clone(osg::CopyOp::DEEP_COPY_ALL)), osg::StateAttribute::ON); } @@ -500,6 +506,5 @@ { osg::Vec3f value = mData.interpKey(getInputValue(nv)); - SceneUtil::Material* mat - = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); + osg::Material* mat = static_cast(stateset->getAttribute(osg::StateAttribute::MATERIAL)); using TargetColor = Nif::NiMaterialColorController::TargetColor; switch (mTargetColor) @@ -507,21 +512,21 @@ case TargetColor::Diffuse: { - osg::Vec4f diffuse = mat->getDiffuse(); + osg::Vec4f diffuse = mat->getDiffuse(osg::Material::FRONT_AND_BACK); diffuse.set(value.x(), value.y(), value.z(), diffuse.a()); - mat->setDiffuse(diffuse); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, diffuse); break; } case TargetColor::Specular: { - osg::Vec4f specular = mat->getSpecular(); + osg::Vec4f specular = mat->getSpecular(osg::Material::FRONT_AND_BACK); specular.set(value.x(), value.y(), value.z(), specular.a()); - mat->setSpecular(specular); + mat->setSpecular(osg::Material::FRONT_AND_BACK, specular); break; } case TargetColor::Emissive: { - osg::Vec4f emissive = mat->getEmission(); + osg::Vec4f emissive = mat->getEmission(osg::Material::FRONT_AND_BACK); emissive.set(value.x(), value.y(), value.z(), emissive.a()); - mat->setEmission(emissive); + mat->setEmission(osg::Material::FRONT_AND_BACK, emissive); break; } @@ -529,10 +534,9 @@ default: { - osg::Vec4f ambient = mat->getAmbient(); + osg::Vec4f ambient = mat->getAmbient(osg::Material::FRONT_AND_BACK); ambient.set(value.x(), value.y(), value.z(), ambient.a()); - mat->setAmbient(ambient); + mat->setAmbient(osg::Material::FRONT_AND_BACK, ambient); } } - mat->updateStateSet(stateset); } } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/controller.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/controller.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/controller.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/controller.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -12,5 +12,4 @@ #include #include -#include #include #include @@ -18,4 +17,5 @@ namespace osg { + class Material; class MatrixTransform; } @@ -30,5 +30,4 @@ class CopyOp; class MorphGeometry; - class Material; } @@ -330,7 +329,8 @@ private: FloatInterpolator mData; + osg::ref_ptr mBaseMaterial; public: - AlphaController(const Nif::NiAlphaController* ctrl); + AlphaController(const Nif::NiAlphaController* ctrl, const osg::Material* baseMaterial); AlphaController(); AlphaController(const AlphaController& copy, const osg::CopyOp& copyop); @@ -346,5 +346,5 @@ { public: - MaterialColorController(const Nif::NiMaterialColorController* ctrl, const SceneUtil::Material* baseMaterial); + MaterialColorController(const Nif::NiMaterialColorController* ctrl, const osg::Material* baseMaterial); MaterialColorController(); MaterialColorController(const MaterialColorController& copy, const osg::CopyOp& copyop); @@ -361,5 +361,5 @@ Nif::NiMaterialColorController::TargetColor::Ambient }; - osg::ref_ptr mBaseMaterial; + osg::ref_ptr mBaseMaterial; }; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/nifloader.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/nifloader.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/nifosg/nifloader.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/nifosg/nifloader.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -36,4 +36,5 @@ #include #include +#include #include #include @@ -53,5 +54,4 @@ #include #include -#include #include #include @@ -1082,5 +1082,5 @@ void handleMaterialControllers(const Nif::NiProperty* materialProperty, - SceneUtil::CompositeStateSetUpdater* composite, int animflags, SceneUtil::Material* baseMaterial) const + SceneUtil::CompositeStateSetUpdater* composite, int animflags, const osg::Material* baseMaterial) const { for (Nif::NiTimeControllerPtr ctrl = materialProperty->mController; !ctrl.empty(); ctrl = ctrl->mNext) @@ -1101,9 +1101,5 @@ continue; } - // AlphaControllers hand off opacity control via dedicated uniforms, not through overriding diffuse - osg::Vec4f opaqueDiffuse = baseMaterial->getDiffuse(); - opaqueDiffuse.a() = 1.f; - baseMaterial->setDiffuse(opaqueDiffuse); - osg::ref_ptr osgctrl = new AlphaController(alphactrl); + osg::ref_ptr osgctrl = new AlphaController(alphactrl, baseMaterial); setupController(alphactrl, osgctrl, animflags); composite->addController(osgctrl); @@ -1663,7 +1659,7 @@ } - // SceneUtil::Material properties are handled here for two reasons: + // osg::Material properties are handled here for two reasons: // - if there are no vertex colors, we need to disable colorMode. - // - there are 3 "overlapping" nif properties that all affect the SceneUtil::Material, handling them + // - there are 3 "overlapping" nif properties that all affect the osg::Material, handling them // above the actual renderable would be tedious. std::vector drawableProps; @@ -1777,6 +1773,5 @@ // Some input geometry may not be used as is so it needs to be converted. - // Normals, tangents and bitangents use a special normal map-like format not equivalent to snorm8 or - // unorm8 + // Normals, tangents and bitangents use a special normal map-like format not equivalent to snorm8 or unorm8 auto normbyteToFloat = [](uint8_t value) { return value / 255.f * 2.f - 1.f; }; // Vertices and UV sets may be half-precision. @@ -2371,7 +2366,7 @@ void handleShaderMaterialDrawableProperties(const Bgsm::MaterialFile* shaderMat, - osg::ref_ptr mat, osg::Node& node, bool& hasSortAlpha) const + osg::ref_ptr mat, osg::Node& node, bool& hasSortAlpha) const { - mat->setAlpha(shaderMat->mTransparency); + mat->setAlpha(osg::Material::FRONT_AND_BACK, shaderMat->mTransparency); handleAlphaTesting(shaderMat->mAlphaTest, osg::AlphaFunc::GREATER, shaderMat->mAlphaTestThreshold, node); handleAlphaBlending(shaderMat->mAlphaBlend, shaderMat->mSourceBlendMode, shaderMat->mDestinationBlendMode, @@ -2381,11 +2376,11 @@ { auto bgsm = static_cast(shaderMat); - mat->setEmission(osg::Vec4f(bgsm->mEmittanceColor, 1.f)); - mat->setSpecular(osg::Vec4f(bgsm->mSpecularColor, 1.f)); + 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); - mat->setEmission(osg::Vec4f(bgem->mEmittanceColor, 1.f)); + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(bgem->mEmittanceColor, 1.f)); if (bgem->mSoft && Loader::getSoftEffectEnabled()) SceneUtil::setupSoftEffect( @@ -2548,6 +2543,6 @@ break; } - // OSG groups the material properties that NIFs have separate, so we have to parse them all again - // when one changed + // OSG groups the material properties that NIFs have separate, so we have to parse them all again when + // one changed case Nif::RC_NiMaterialProperty: case Nif::RC_NiVertexColorProperty: @@ -2713,6 +2708,6 @@ }; - // global sharing of State Attributes will reduce the number of GL calls as the osg::State will check by - // pointer to see if state is the same + // global sharing of State Attributes will reduce the number of GL calls as the osg::State will check by pointer + // to see if state is the same template static Attribute* shareAttribute(const osg::ref_ptr& attr) @@ -2733,11 +2728,10 @@ // Specular lighting is enabled by default, but there's a quirk... bool specEnabled = true; - osg::ref_ptr mat(new SceneUtil::Material); - mat->setVertexColorMode( - hasVertexColors ? SceneUtil::VertexColorModes::AmbientAndDiffuse : SceneUtil::VertexColorModes::None); + osg::ref_ptr mat(new osg::Material); + mat->setColorMode(hasVertexColors ? osg::Material::AMBIENT_AND_DIFFUSE : osg::Material::OFF); // NIF material defaults don't match OpenGL defaults - mat->setDiffuse(osg::Vec4f(1, 1, 1, 1)); - mat->setAmbient(osg::Vec4f(1, 1, 1, 1)); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); bool hasMatCtrl = false; @@ -2748,4 +2742,6 @@ auto lightmode = Nif::NiVertexColorProperty::LightMode::LightMode_EmiAmbDif; + float emissiveMult = 1.f; + float specStrength = 1.f; for (const Nif::NiProperty* property : properties) @@ -2765,11 +2761,14 @@ const Nif::NiMaterialProperty* matprop = static_cast(property); - mat->setDiffuse(osg::Vec4f(matprop->mDiffuse, matprop->mAlpha)); - mat->setAmbient(osg::Vec4f(matprop->mAmbient, 1.f)); - mat->setEmission(osg::Vec4f(matprop->mEmissive, 1.f)); - mat->setEmissiveMultiplier(matprop->mEmissiveMult); - - mat->setSpecular(osg::Vec4f(matprop->mSpecular, 1.f)); - mat->setShininess(matprop->mGlossiness); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(matprop->mDiffuse, matprop->mAlpha)); + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(matprop->mAmbient, 1.f)); + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(matprop->mEmissive, 1.f)); + emissiveMult = matprop->mEmissiveMult; + + mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(matprop->mSpecular, 1.f)); + // 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()) @@ -2791,10 +2790,10 @@ case VertexMode::VertMode_SrcIgnore: { - mat->setVertexColorMode(SceneUtil::VertexColorModes::None); + mat->setColorMode(osg::Material::OFF); break; } case VertexMode::VertMode_SrcEmissive: { - mat->setVertexColorMode(SceneUtil::VertexColorModes::Emission); + mat->setColorMode(osg::Material::EMISSION); break; } @@ -2807,5 +2806,5 @@ case LightMode::LightMode_Emissive: { - mat->setVertexColorMode(SceneUtil::VertexColorModes::None); + mat->setColorMode(osg::Material::OFF); break; } @@ -2813,5 +2812,5 @@ default: { - mat->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); + mat->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); break; } @@ -2849,15 +2848,16 @@ auto bgsm = static_cast(shaderMat.get()); specEnabled = false; // bgsm->mSpecularEnabled; TODO: PBR specular lighting - mat->setSpecularStrength(1.f); // bgsm->mSpecularMult; - mat->setEmissiveMultiplier(bgsm->mEmittanceMult); + specStrength = 1.f; // bgsm->mSpecularMult; + emissiveMult = bgsm->mEmittanceMult; } break; } - mat->setAlpha(shaderprop->mAlpha); - mat->setEmission(osg::Vec4f(shaderprop->mEmissive, 1.f)); - mat->setSpecular(osg::Vec4f(shaderprop->mSpecular, 1.f)); - mat->setShininess(shaderprop->mGlossiness); - mat->setEmissiveMultiplier(shaderprop->mEmissiveMult); - mat->setSpecularStrength(shaderprop->mSpecStrength); + 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)); + 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(); handleDecal(shaderprop->decal(), hasSortAlpha, *node); @@ -2891,15 +2891,15 @@ if (mVersion <= Nif::NIFFile::VER_MW || !specEnabled) { - mat->setSpecular(osg::Vec4f(0.f, 0.f, 0.f, 0.f)); - mat->setShininess(0.f); - mat->setSpecularStrength(1.f); + mat->setSpecular(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 0.f)); + mat->setShininess(osg::Material::FRONT_AND_BACK, 0.f); + specStrength = 1.f; } if (lightmode == Nif::NiVertexColorProperty::LightMode::LightMode_Emissive) { - osg::Vec4f diffuse = mat->getDiffuse(); + osg::Vec4f diffuse = mat->getDiffuse(osg::Material::FRONT_AND_BACK); diffuse = osg::Vec4f(0, 0, 0, diffuse.a()); - mat->setDiffuse(diffuse); - mat->setAmbient(osg::Vec4f()); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, diffuse); + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f()); } @@ -2907,25 +2907,28 @@ if (!hasVertexColors) { - switch (mat->getVertexColorMode()) + switch (mat->getColorMode()) { - case SceneUtil::VertexColorModes::Ambient: - mat->setAmbient(osg::Vec4f(1, 1, 1, 1)); + case osg::Material::AMBIENT: + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); break; - case SceneUtil::VertexColorModes::AmbientAndDiffuse: - mat->setAmbient(osg::Vec4f(1, 1, 1, 1)); - mat->setDiffuse(osg::Vec4f(1, 1, 1, 1)); + case osg::Material::AMBIENT_AND_DIFFUSE: + mat->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); + mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); break; - case SceneUtil::VertexColorModes::Emission: - mat->setEmission(osg::Vec4f(1, 1, 1, 1)); + case osg::Material::EMISSION: + mat->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(1, 1, 1, 1)); break; default: break; } - mat->setVertexColorMode(SceneUtil::VertexColorModes::None); + mat->setColorMode(osg::Material::OFF); } - static const SceneUtil::Material defaultMat{}; - - if (hasMatCtrl || *mat != defaultMat) + if (hasMatCtrl || mat->getColorMode() != osg::Material::OFF + || mat->getEmission(osg::Material::FRONT_AND_BACK) != osg::Vec4f(0, 0, 0, 1) + || mat->getDiffuse(osg::Material::FRONT_AND_BACK) != osg::Vec4f(1, 1, 1, 1) + || mat->getAmbient(osg::Material::FRONT_AND_BACK) != osg::Vec4f(1, 1, 1, 1) + || mat->getShininess(osg::Material::FRONT_AND_BACK) != 0 + || mat->getSpecular(osg::Material::FRONT_AND_BACK) != osg::Vec4f(0.f, 0.f, 0.f, 0.f)) { mat = shareAttribute(mat); @@ -2933,4 +2936,10 @@ } + if (emissiveMult != 1.f) + node->getOrCreateStateSet()->addUniform(new osg::Uniform("emissiveMult", emissiveMult)); + + if (specStrength != 1.f) + node->getOrCreateStateSet()->addUniform(new osg::Uniform("specStrength", specStrength)); + if (!mPushedSorter) { diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/errormarker.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/errormarker.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/errormarker.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/errormarker.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -26,12 +26,12 @@ } AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 5 Name "Error" - Ambient 1 1 1 0.5 - Diffuse 0.8 0.704 0.32 0.5 - Specular 0.5 0.5 0.5 0.5 - Emission 1 0.88 0.4 0.5 - Shininess 28.8 + Ambient TRUE Front 1 1 1 0.5 Back 1 1 1 0.5 + Diffuse TRUE Front 0.8 0.704 0.32 0.5 Back 0.8 0.704 0.32 0.5 + Specular TRUE Front 0.5 0.5 0.5 0.5 Back 0.5 0.5 0.5 0.5 + Emission TRUE Front 1 0.88 0.4 0.5 Back 1 0.88 0.4 0.5 + Shininess TRUE Front 28.8 Back 28.8 } Value OFF @@ -494,12 +494,12 @@ DataVariance STATIC AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 23 Name "ErrorLabel" - Ambient 1 1 1 1 - Diffuse 0.176208 0.176208 0.176208 1 - Specular 0.5 0.5 0.5 1 - Emission 0.22026 0.22026 0.22026 1 - Shininess 28.8 + Ambient TRUE Front 1 1 1 1 Back 1 1 1 1 + Diffuse TRUE Front 0.176208 0.176208 0.176208 1 Back 0.176208 0.176208 0.176208 1 + Specular TRUE Front 0.5 0.5 0.5 1 Back 0.5 0.5 0.5 1 + Emission TRUE Front 0.22026 0.22026 0.22026 1 Back 0.22026 0.22026 0.22026 1 + Shininess TRUE Front 28.8 Back 28.8 } Value OFF @@ -1243,12 +1243,12 @@ DataVariance STATIC AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 41 Name "Material" - Ambient 1 1 1 1 - Diffuse 0.8 0.8 0.8 1 - Specular 0.5 0.5 0.5 1 - Emission 0 0 0 1 - Shininess 41.344 + Ambient TRUE Front 1 1 1 1 Back 1 1 1 1 + Diffuse TRUE Front 0.8 0.8 0.8 1 Back 0.8 0.8 0.8 1 + Specular TRUE Front 0.5 0.5 0.5 1 Back 0.5 0.5 0.5 1 + Emission TRUE Front 0 0 0 1 Back 0 0 0 1 + Shininess TRUE Front 41.344 Back 41.344 } Value OFF diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/scenemanager.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/scenemanager.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/scenemanager.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/scenemanager.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -9,5 +9,4 @@ #include #include -#include #include #include @@ -132,54 +131,4 @@ unsigned int mMask; }; - - class ReplaceMaterialVisitor : public osg::NodeVisitor - { - public: - ReplaceMaterialVisitor() - : osg::NodeVisitor(TRAVERSE_ALL_CHILDREN) - { - } - - void apply(osg::Node& node) override - { - osg::StateSet* stateSet = node.getStateSet(); - - if (stateSet) - { - if (osg::Material* material - = dynamic_cast(stateSet->getAttribute(osg::StateAttribute::MATERIAL))) - stateSet->setAttribute(new SceneUtil::Material({ - .mDiffuse = material->getDiffuse(osg::Material::FRONT_AND_BACK), - .mAmbient = material->getAmbient(osg::Material::FRONT_AND_BACK), - .mSpecular = material->getSpecular(osg::Material::FRONT_AND_BACK), - .mEmission = material->getEmission(osg::Material::FRONT_AND_BACK), - .mShininess = material->getShininess(osg::Material::FRONT_AND_BACK), - .mVertexColorMode = fromOSGColorMode(material->getColorMode()), - })); - }; - - traverse(node); - } - - private: - SceneUtil::VertexColorModes fromOSGColorMode(osg::Material::ColorMode mode) - { - switch (mode) - { - case osg::Material::AMBIENT: - return SceneUtil::VertexColorModes::Ambient; - case osg::Material::DIFFUSE: - return SceneUtil::VertexColorModes::Diffuse; - case osg::Material::SPECULAR: - return SceneUtil::VertexColorModes::Specular; - case osg::Material::EMISSION: - return SceneUtil::VertexColorModes::Emission; - case osg::Material::AMBIENT_AND_DIFFUSE: - return SceneUtil::VertexColorModes::AmbientAndDiffuse; - default: - return SceneUtil::VertexColorModes::None; - } - } - }; } @@ -693,7 +642,4 @@ node->accept(replaceDepthVisitor); - ReplaceMaterialVisitor replaceMaterialVisitor; - node->accept(replaceMaterialVisitor); - for (osg::Node* foundRigNode : rigFinder.mFoundNodes) { @@ -753,4 +699,6 @@ } + node->getOrCreateStateSet()->addUniform(new osg::Uniform("emissiveMult", 1.f)); + node->getOrCreateStateSet()->addUniform(new osg::Uniform("specStrength", 1.f)); node->getOrCreateStateSet()->addUniform(new osg::Uniform("envMapColor", osg::Vec4f(1, 1, 1, 1))); node->getOrCreateStateSet()->addUniform(new osg::Uniform("useFalloff", false)); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/stats.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/stats.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/resource/stats.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/resource/stats.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -330,6 +330,5 @@ mCamera->getOrCreateStateSet()->setGlobalDefaults(); osg::ref_ptr renderer = new osgViewer::Renderer(mCamera); - SceneUtil::disableFFPStateForRenderer(renderer); - mCamera->getOrCreateStateSet()->removeAttribute(osg::StateAttribute::MATERIAL); + SceneUtil::disableFFPLightModelForRenderer(renderer); mCamera->setRenderer(renderer); mCamera->setProjectionResizePolicy(osg::Camera::FIXED); @@ -456,6 +455,5 @@ osg::ref_ptr renderer = new osgViewer::Renderer(mCamera); - SceneUtil::disableFFPStateForRenderer(renderer); - mCamera->getOrCreateStateSet()->removeAttribute(osg::StateAttribute::MATERIAL); + SceneUtil::disableFFPLightModelForRenderer(renderer); mCamera->setRenderer(renderer); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/agentpath.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/agentpath.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/agentpath.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/agentpath.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -3,7 +3,8 @@ #include "detourdebugdraw.hpp" +#include + #include #include -#include #include diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/detourdebugdraw.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/detourdebugdraw.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/detourdebugdraw.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/detourdebugdraw.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -7,10 +7,9 @@ #include #include +#include #include #include -#include - namespace { @@ -113,6 +112,6 @@ osg::ref_ptr makeDetourGroupStateSet() { - osg::ref_ptr material = new SceneUtil::Material; - material->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); + osg::ref_ptr material = new osg::Material; + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); const float polygonOffsetFactor = SceneUtil::AutoDepth::isReversed() ? 1.0f : -1.0f; Only in /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil: material.cpp Only in /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil: material.hpp diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/mwshadowtechnique.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/mwshadowtechnique.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/mwshadowtechnique.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/mwshadowtechnique.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -932,8 +932,11 @@ { auto& program = _castingPrograms[alphaFunc - GL_NEVER]; - program = shaderManager.getProgram(castingVertexShader, - shaderManager.getShader("shadowcasting.frag", - { { "alphaFunc", std::to_string(alphaFunc) }, { "alphaToCoverage", "0" }, { "adjustCoverage", "1" }, - { "useGPUShader4", useGPUShader4 } })); + program = new osg::Program(); + program->addShader(castingVertexShader); + program->addShader(shaderManager.getShader("shadowcasting.frag", { {"alphaFunc", std::to_string(alphaFunc)}, + {"alphaToCoverage", "0"}, + {"adjustCoverage", "1"}, + {"useGPUShader4", useGPUShader4} + })); } } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/mwshadowtechnique.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/mwshadowtechnique.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/mwshadowtechnique.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/mwshadowtechnique.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -26,4 +26,5 @@ #include +#include #include #include diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/pathgridutil.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/pathgridutil.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/pathgridutil.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/pathgridutil.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -2,7 +2,7 @@ #include +#include #include -#include #include @@ -216,6 +216,6 @@ } - osg::ref_ptr material = new SceneUtil::Material; - material->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); + osg::ref_ptr material = new osg::Material; + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); gridGeometry->getOrCreateStateSet()->setAttribute(material); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/recastmesh.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/recastmesh.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/recastmesh.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/recastmesh.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,9 +6,9 @@ #include #include -#include #include #include +#include #include diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/serialize.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/serialize.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/serialize.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/serialize.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -7,5 +7,4 @@ #include -#include #include #include @@ -15,30 +14,4 @@ #include -namespace -{ -#define MATERIAL_FUNC(PROP, TYPE) \ - static bool check##PROP(const SceneUtil::Material& attr) \ - { \ - return true; \ - } \ - static bool read##PROP(osgDB::InputStream& is, SceneUtil::Material& attr) \ - { \ - TYPE value; \ - is >> value; \ - attr.set##PROP(value); \ - return true; \ - } \ - static bool write##PROP(osgDB::OutputStream& os, const SceneUtil::Material& attr) \ - { \ - os << attr.get##PROP(); \ - return true; \ - } - - MATERIAL_FUNC(Ambient, osg::Vec4f) - MATERIAL_FUNC(Diffuse, osg::Vec4f) - MATERIAL_FUNC(Specular, osg::Vec4f) - MATERIAL_FUNC(Emission, osg::Vec4f) -} - namespace SceneUtil { @@ -184,57 +157,4 @@ }; - class MaterialSerializer : public osgDB::ObjectWrapper - { - public: - MaterialSerializer() - : osgDB::ObjectWrapper(createInstanceFunc, "SceneUtil::Material", - "osg::Object osg::StateAttribute SceneUtil::Material") - { - addSerializer( - new osgDB::UserSerializer("Ambient", &checkAmbient, &readAmbient, &writeAmbient)); - - addSerializer( - new osgDB::UserSerializer("Diffuse", &checkDiffuse, &readDiffuse, &writeDiffuse)); - - addSerializer(new osgDB::UserSerializer( - "Specular", &checkSpecular, &readSpecular, &writeSpecular)); - - addSerializer(new osgDB::UserSerializer( - "Emission", &checkEmission, &readEmission, &writeEmission)); - - addSerializer(new osgDB::PropByValSerializer( - "Shininess", 0.f, &SceneUtil::Material::getShininess, &SceneUtil::Material::setShininess), - osgDB::BaseSerializer::RW_FLOAT); - - addSerializer(new osgDB::PropByValSerializer("EmissiveMultiplier", 1.f, - &SceneUtil::Material::getEmissiveMultiplier, &SceneUtil::Material::setEmissiveMultiplier), - osgDB::BaseSerializer::RW_FLOAT); - - addSerializer(new osgDB::PropByValSerializer("SpecularStrength", 1.f, - &SceneUtil::Material::getSpecularStrength, &SceneUtil::Material::setSpecularStrength), - osgDB::BaseSerializer::RW_FLOAT); - - using ColorModeSerializer = osgDB::EnumSerializer; - - osg::ref_ptr colorModeSerializer - = new ColorModeSerializer("VertexColorMode", SceneUtil::VertexColorModes::None, - &SceneUtil::Material::getVertexColorMode, &SceneUtil::Material::setVertexColorMode); - - colorModeSerializer->add("None", SceneUtil::VertexColorModes::None); - - colorModeSerializer->add("Emission", SceneUtil::VertexColorModes::Emission); - - colorModeSerializer->add("AmbientAndDiffuse", SceneUtil::VertexColorModes::AmbientAndDiffuse); - - colorModeSerializer->add("Ambient", SceneUtil::VertexColorModes::Ambient); - - colorModeSerializer->add("Diffuse", SceneUtil::VertexColorModes::Diffuse); - - colorModeSerializer->add("Specular", SceneUtil::VertexColorModes::Specular); - - addSerializer(colorModeSerializer); - } - }; - osgDB::ObjectWrapper* makeDummySerializer(const std::string& classname) { @@ -252,5 +172,5 @@ }; - void registerSerializers(bool skipGeometry) + void registerSerializers() { static bool done = false; @@ -269,13 +189,9 @@ mgr->addWrapper(new AutoTransformSerializer); mgr->addWrapper(new TextureTypeSerializer); - mgr->addWrapper(new MaterialSerializer); - if (skipGeometry) - { - // Don't serialize Geometry data as we are more interested in the overall structure rather than tons of - // vertex data that would make the file large and hard to read. - mgr->removeWrapper(mgr->findWrapper("osg::Geometry")); - mgr->addWrapper(new GeometrySerializer); - } + // Don't serialize Geometry data as we are more interested in the overall structure rather than tons of + // vertex data that would make the file large and hard to read. + mgr->removeWrapper(mgr->findWrapper("osg::Geometry")); + mgr->addWrapper(new GeometrySerializer); // ignore the below for now to avoid warning spam diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/serialize.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/serialize.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/serialize.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/serialize.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -6,5 +6,5 @@ /// Register osg node serializers for certain SceneUtil classes if not already done so - void registerSerializers(bool skipGeometry = true); + void registerSerializers(); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadow.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadow.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadow.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadow.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -82,9 +82,4 @@ } - void ShadowManager::setupShaders(Shader::ShaderManager& shaderManager) const - { - mShadowTechnique->setupCastingShader(shaderManager); - } - void ShadowManager::disableShadowsForStateSet(osg::StateSet& stateset) const { @@ -136,4 +131,5 @@ setupShadowSettings(settings, shaderManager); + mShadowTechnique->setupCastingShader(shaderManager); mShadowTechnique->setWorldMask(worldMask); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadow.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadow.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadow.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadow.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -38,6 +38,4 @@ void setupShadowSettings(const Settings::ShadowsCategory& settings, Shader::ShaderManager& shaderManager); - void setupShaders(Shader::ShaderManager& shaderManager) const; - void disableShadowsForStateSet(osg::StateSet& stateset) const; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadowsbin.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadowsbin.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadowsbin.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadowsbin.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -1,12 +1,9 @@ #include "shadowsbin.hpp" - -#include - #include +#include #include #include #include - -#include +#include using namespace osgUtil; @@ -37,8 +34,8 @@ } - inline bool materialNeedShadows(SceneUtil::Material* m) + inline bool materialNeedShadows(osg::Material* m) { // I'm pretty sure this needs to check the colour mode - vertex colours might override this value. - return m->getDiffuse().a() > 0.5; + return m->getDiffuse(osg::Material::FRONT).a() > 0.5; } } @@ -95,6 +92,6 @@ { const osg::StateSet::RefAttributePair& rap = found->second; - accumulateState(state.mMaterial, static_cast(rap.first.get()), - state.mMaterialOverride, rap.second); + accumulateState( + state.mMaterial, static_cast(rap.first.get()), state.mMaterialOverride, rap.second); if (state.mMaterial && !materialNeedShadows(state.mMaterial)) state.mMaterial = nullptr; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadowsbin.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadowsbin.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/shadowsbin.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/shadowsbin.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -8,4 +8,5 @@ namespace osg { + class Material; class AlphaFunc; } @@ -13,6 +14,4 @@ namespace SceneUtil { - class Material; - /// renderbin which culls redundant state for shadow map rendering class ShadowsBin : public osgUtil::RenderBin @@ -53,5 +52,5 @@ osg::AlphaFunc* mAlphaFunc; bool mAlphaFuncOverride; - SceneUtil::Material* mMaterial; + osg::Material* mMaterial; bool mMaterialOverride; bool mImportantState; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/util.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/util.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/util.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/util.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -401,16 +401,9 @@ } - void disableFFPStateForRenderer(osgViewer::Renderer* renderer) + void disableFFPLightModelForRenderer(osgViewer::Renderer* renderer) { - auto disableFFPState = [](osgUtil::SceneView* sceneView) { - sceneView->setDefaults(osgUtil::SceneView::NO_SCENEVIEW_LIGHT); - sceneView->getGlobalStateSet()->removeMode(GL_LIGHT0); - sceneView->getGlobalStateSet()->removeAttribute(osg::StateAttribute::LIGHTMODEL); - sceneView->getGlobalStateSet()->removeAttribute(osg::StateAttribute::MATERIAL); - sceneView->getGlobalStateSet()->removeAttribute(osg::StateAttribute::ALPHAFUNC); - }; - - disableFFPState(renderer->getSceneView(0)); - disableFFPState(renderer->getSceneView(1)); + constexpr unsigned options = osgUtil::SceneView::NO_SCENEVIEW_LIGHT; + renderer->getSceneView(0)->setDefaults(options); + renderer->getSceneView(1)->setDefaults(options); } } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/util.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/util.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/util.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/util.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -127,5 +127,5 @@ const std::string& getTextureType(const osg::StateSet& stateset, const osg::Texture& texture, unsigned int texUnit); - void disableFFPStateForRenderer(osgViewer::Renderer* renderer); + void disableFFPLightModelForRenderer(osgViewer::Renderer* renderer); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/waterutil.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/waterutil.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/sceneutil/waterutil.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/sceneutil/waterutil.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -3,8 +3,7 @@ #include #include +#include #include -#include - #include "depth.hpp" @@ -71,9 +70,9 @@ osg::ref_ptr stateset(new osg::StateSet); - osg::ref_ptr material(new SceneUtil::Material); - material->setEmission(osg::Vec4f(0.f, 0.f, 0.f, 1.f)); - material->setDiffuse(osg::Vec4f(1.f, 1.f, 1.f, alpha)); - material->setAmbient(osg::Vec4f(1.f, 1.f, 1.f, 1.f)); - material->setVertexColorMode(SceneUtil::VertexColorModes::None); + osg::ref_ptr material(new osg::Material); + material->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(0.f, 0.f, 0.f, 1.f)); + material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(1.f, 1.f, 1.f, alpha)); + material->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(1.f, 1.f, 1.f, 1.f)); + material->setColorMode(osg::Material::OFF); stateset->setAttributeAndModes(material, osg::StateAttribute::ON); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/shader/shadervisitor.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/shader/shadervisitor.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/shader/shadervisitor.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/shader/shadervisitor.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -10,4 +10,5 @@ #include #include +#include #include #include @@ -23,5 +24,4 @@ #include #include -#include #include #include @@ -145,5 +145,7 @@ ShaderVisitor::ShaderRequirements::ShaderRequirements() - : mAlphaTestOverridden(false) + : mColorMode(0) + , mMaterialOverridden(false) + , mAlphaTestOverridden(false) , mAlphaBlendOverridden(false) , mAlphaFunc(GL_ALWAYS) @@ -441,8 +443,39 @@ if (it->first.first == osg::StateAttribute::MATERIAL) { - if (!writableStateSet) - writableStateSet = getWritableStateSet(node); - static_cast(it->second.first.get()) - ->setStateSet(writableStateSet, it->second.second); + // This should probably be moved out of ShaderRequirements and be applied directly now it's a + // uniform instead of a define + if (!mRequirements.back().mMaterialOverridden || it->second.second & osg::StateAttribute::PROTECTED) + { + if (it->second.second & osg::StateAttribute::OVERRIDE) + mRequirements.back().mMaterialOverridden = true; + + const osg::Material* mat = static_cast(it->second.first.get()); + + int colorMode; + switch (mat->getColorMode()) + { + case osg::Material::OFF: + colorMode = 0; + break; + case osg::Material::EMISSION: + colorMode = 1; + break; + default: + case osg::Material::AMBIENT_AND_DIFFUSE: + colorMode = 2; + break; + case osg::Material::AMBIENT: + colorMode = 3; + break; + case osg::Material::DIFFUSE: + colorMode = 4; + break; + case osg::Material::SPECULAR: + colorMode = 5; + break; + } + + mRequirements.back().mColorMode = colorMode; + } } else if (it->first.first == osg::StateAttribute::ALPHAFUNC) @@ -551,5 +584,10 @@ defineMap["parallax"] = reqs.mNormalHeight ? "1" : "0"; defineMap["reconstructNormalZ"] = reqs.mReconstructNormalZ ? "1" : "0"; + + writableStateSet->addUniform(new osg::Uniform("colorMode", reqs.mColorMode)); + addedState->addUniform("colorMode"); + defineMap["alphaFunc"] = std::to_string(reqs.mAlphaFunc); + defineMap["additiveBlending"] = reqs.mAdditiveBlending ? "1" : "0"; @@ -575,5 +613,5 @@ // This prevents redundant glAlphaFunc calls while letting the shadows bin still see the test writableStateSet->setAttribute(RemovedAlphaFunc::getInstance(reqs.mAlphaFunc), - osg::StateAttribute::ON | osg::StateAttribute::PROTECTED); + osg::StateAttribute::ON | osg::StateAttribute::OVERRIDE); addedState->setAttribute(RemovedAlphaFunc::getInstance(reqs.mAlphaFunc)); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/shader/shadervisitor.hpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/shader/shadervisitor.hpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/shader/shadervisitor.hpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/shader/shadervisitor.hpp 2026-08-22 16:25:48.000000000 +0000 @@ -10,9 +10,4 @@ } -namespace SceneUtil -{ - class Material; -} - namespace Shader { @@ -90,4 +85,7 @@ std::map mTextures; + int mColorMode; + + bool mMaterialOverridden; bool mAlphaTestOverridden; bool mAlphaBlendOverridden; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/cellborder.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/cellborder.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/cellborder.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/cellborder.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -2,4 +2,5 @@ #include +#include #include @@ -9,5 +10,4 @@ #include #include -#include #include @@ -69,7 +69,6 @@ osg::StateSet* stateSet = borderGroup->getOrCreateStateSet(); - osg::ref_ptr material(new SceneUtil::Material); - material->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); - material->updateStateSet(stateSet); + osg::ref_ptr material(new osg::Material); + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); stateSet->setAttribute(material); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/chunkmanager.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/chunkmanager.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/chunkmanager.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/chunkmanager.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -1,4 +1,5 @@ #include "chunkmanager.hpp" +#include #include @@ -8,6 +9,6 @@ #include #include + #include -#include #include "compositemaprenderer.hpp" @@ -52,8 +53,6 @@ mMultiPassRoot = new osg::StateSet; mMultiPassRoot->setRenderingHint(osg::StateSet::OPAQUE_BIN); - osg::ref_ptr material( - new SceneUtil::Material({ .mVertexColorMode = SceneUtil::VertexColorModes::AmbientAndDiffuse })); - material->setVertexColorMode(SceneUtil::VertexColorModes::AmbientAndDiffuse); - material->updateStateSet(mMultiPassRoot); + osg::ref_ptr material(new osg::Material); + material->setColorMode(osg::Material::AMBIENT_AND_DIFFUSE); mMultiPassRoot->setAttributeAndModes(material, osg::StateAttribute::ON); } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/quadtreeworld.cpp /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/quadtreeworld.cpp --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/components/terrain/quadtreeworld.cpp 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/components/terrain/quadtreeworld.cpp 2026-08-22 16:25:48.000000000 +0000 @@ -1,4 +1,5 @@ #include "quadtreeworld.hpp" +#include #include #include @@ -12,5 +13,4 @@ #include #include -#include #include @@ -417,9 +417,8 @@ new osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::LINE), osg::StateAttribute::ON); - osg::ref_ptr material = new SceneUtil::Material; - material->setEmission(osg::Vec4f(0, 0, 1, 1)); - material->setDiffuse(osg::Vec4f(0, 0, 0, 1)); - material->setAmbient(osg::Vec4f(0, 0, 0, 1)); - material->updateStateSet(stateSet); + osg::ref_ptr material = new osg::Material; + material->setEmission(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 1, 1)); + material->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 0, 1)); + material->setAmbient(osg::Material::FRONT_AND_BACK, osg::Vec4f(0, 0, 0, 1)); stateSet->setAttributeAndModes(material, osg::StateAttribute::ON); stateSet->setRenderBinDetails(100, "RenderBin"); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/docs/source/reference/modding/texture-modding/texture-basics.rst /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/docs/source/reference/modding/texture-modding/texture-basics.rst --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/docs/source/reference/modding/texture-modding/texture-basics.rst 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/docs/source/reference/modding/texture-modding/texture-basics.rst 2026-08-22 16:25:48.000000000 +0000 @@ -39,5 +39,5 @@ The alpha channel specifies shininess in range [0, 255]. If a specular map is used, it will override the shininess and specular color -set in the NiMaterialProperty / SceneUtil::Material. +set in the NiMaterialProperty / osg::Material. Morrowind format NIF files do not support normal maps or specular maps. diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/opencs/selectionmarker.osgt /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/opencs/selectionmarker.osgt --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/opencs/selectionmarker.osgt 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/opencs/selectionmarker.osgt 2026-08-22 16:25:48.000000000 +0000 @@ -99,11 +99,11 @@ } AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 17 - Ambient 0.8 0.123281 0.11568 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.8 0.123281 0.11568 1 - Shininess 0 + Ambient TRUE Front 0.8 0.123281 0.11568 1 Back 0.8 0.123281 0.11568 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.8 0.123281 0.11568 1 Back 0.8 0.123281 0.11568 1 + Shininess TRUE Front 0 Back 0 } Value OFF @@ -1150,11 +1150,11 @@ } AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 30 - Ambient 0.0512699 0.38982 0.8 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.0512699 0.38982 0.8 1 - Shininess 0 + Ambient TRUE Front 0.0512699 0.38982 0.8 1 Back 0.0512699 0.38982 0.8 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.0512699 0.38982 0.8 1 Back 0.0512699 0.38982 0.8 1 + Shininess TRUE Front 0 Back 0 } Value OFF @@ -2201,11 +2201,11 @@ } AttributeList 1 { - SceneUtil::Material { + osg::Material { UniqueID 43 - Ambient 0.190456 0.8 0.229407 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.190456 0.8 0.229407 1 - Shininess 0 + Ambient TRUE Front 0.190456 0.8 0.229407 1 Back 0.190456 0.8 0.229407 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.190456 0.8 0.229407 1 Back 0.190456 0.8 0.229407 1 + Shininess TRUE Front 0 Back 0 } Value OFF @@ -3473,11 +3473,11 @@ } AttributeList 3 { - SceneUtil::Material { + osg::Material { UniqueID 63 - Ambient 0.05127 0.38982 0.8 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.05127 0.38982 0.8 1 - Shininess 0 + Ambient TRUE Front 0.05127 0.38982 0.8 1 Back 0.05127 0.38982 0.8 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.05127 0.38982 0.8 1 Back 0.05127 0.38982 0.8 1 + Shininess TRUE Front 0 Back 0 } Value OFF @@ -3645,11 +3645,11 @@ } AttributeList 3 { - SceneUtil::Material { + osg::Material { UniqueID 78 - Ambient 0.190456 0.8 0.229407 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.190456 0.8 0.229407 1 - Shininess 0 + Ambient TRUE Front 0.190456 0.8 0.229407 1 Back 0.190456 0.8 0.229407 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.190456 0.8 0.229407 1 Back 0.190456 0.8 0.229407 1 + Shininess TRUE Front 0 Back 0 } Value OFF @@ -4252,11 +4252,11 @@ } AttributeList 3 { - SceneUtil::Material { + osg::Material { UniqueID 105 - Ambient 0.8 0.123281 0.11568 1 - Diffuse 0 0 0 1 - Specular 0 0 0 1 - Emission 0.8 0.123281 0.11568 1 - Shininess 0 + Ambient TRUE Front 0.8 0.123281 0.11568 1 Back 0.8 0.123281 0.11568 1 + Diffuse TRUE Front 0 0 0 1 Back 0 0 0 1 + Specular TRUE Front 0 0 0 1 Back 0 0 0 1 + Emission TRUE Front 0.8 0.123281 0.11568 1 Back 0.8 0.123281 0.11568 1 + Shininess TRUE Front 0 Back 0 } Value OFF diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/CMakeLists.txt /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/CMakeLists.txt --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/CMakeLists.txt 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/CMakeLists.txt 2026-08-22 16:25:48.000000000 +0000 @@ -38,7 +38,4 @@ lib/material/parallax.glsl lib/material/alpha.glsl - lib/material/struct.glsl - lib/material/vertexcolors.glsl - lib/material/colormodes.glsl compatibility/ripples_blobber.frag compatibility/ripples_simulate.frag @@ -60,4 +57,5 @@ compatibility/shadowcasting.vert compatibility/shadowcasting.frag + compatibility/vertexcolors.glsl compatibility/normals.glsl compatibility/multiview_resolve.vert diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/default.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/default.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/default.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/default.frag 2026-08-22 16:25:48.000000000 +0000 @@ -33,4 +33,6 @@ uniform float far; uniform float alphaRef; +uniform float emissiveMult; +uniform float specStrength; uniform bool useTreeAnim; uniform float distortionStrength; @@ -40,16 +42,12 @@ #include "lib/util/distortion.glsl" #include "lib/light/clamp.glsl" -#include "lib/material/vertexcolors.glsl" +#include "compatibility/vertexcolors.glsl" #include "compatibility/shadows_fragment.glsl" #include "compatibility/fog.glsl" #include "compatibility/normals.glsl" -centroid varying vec4 passColor; - void main() { - Material material = getMaterial(); - #if @diffuseMap gl_FragData[0] = texture2D(diffuseMap, diffuseMapUV); @@ -57,5 +55,5 @@ #if defined(DISTORTION) && DISTORTION vec2 screenCoords = gl_FragCoord.xy / (screenRes * @distorionRTRatio); - gl_FragData[0].a *= getDiffuseColor(material, passColor).a; + gl_FragData[0].a *= getDiffuseColor().a; gl_FragData[0] = applyDistortion(gl_FragData[0], distortionStrength, gl_FragCoord.z, sampleOpaqueDepthTex(screenCoords).x); @@ -68,10 +66,10 @@ #endif - vec4 diffuseColor = getDiffuseColor(material, passColor); + vec4 diffuseColor = getDiffuseColor(); if (!useTreeAnim) gl_FragData[0].a *= diffuseColor.a; gl_FragData[0].a = alphaTest(gl_FragData[0].a, alphaRef); - vec3 specularColor = getSpecularColor(material, passColor).xyz; + vec3 specularColor = getSpecularColor().xyz; #if @normalMap vec4 normalTex = texture2D(normalMap, normalMapUV); @@ -88,13 +86,13 @@ float shadowing = unshadowedLightRatio(linearDepth); vec3 diffuseLight, ambientLight, specularLight; - doLighting(gl_FragCoord.xy, passViewPos, viewNormal, material.shininess, shadowing, diffuseLight, ambientLight, specularLight); + doLighting(gl_FragCoord.xy, passViewPos, viewNormal, gl_FrontMaterial.shininess, shadowing, diffuseLight, ambientLight, specularLight); vec3 diffuse = diffuseColor.xyz * diffuseLight; - vec3 ambient = getAmbientColor(material, passColor).xyz * ambientLight; - vec3 emission = getEmissionColor(material, passColor).xyz * material.emissiveMult; + vec3 ambient = getAmbientColor().xyz * ambientLight; + vec3 emission = getEmissionColor().xyz * emissiveMult; #if @emissiveMap emission *= texture2D(emissiveMap, emissiveMapUV).xyz; #endif vec3 lighting = diffuse + ambient + emission; - vec3 specular = specularColor * specularLight * material.specStrength; + vec3 specular = specularColor * specularLight * specStrength; clampLighting(lighting); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/default.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/default.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/default.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/default.vert 2026-08-22 16:25:48.000000000 +0000 @@ -33,11 +33,9 @@ #include "lib/view/depth.glsl" -#include "lib/material/vertexcolors.glsl" +#include "compatibility/vertexcolors.glsl" #include "compatibility/shadows_vertex.glsl" #include "compatibility/normals.glsl" -centroid varying vec4 passColor; - void main(void) { diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/nolighting.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/nolighting.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/nolighting.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/nolighting.frag 2026-08-22 16:25:48.000000000 +0000 @@ -25,6 +25,6 @@ #include "lib/core/fragment.h.glsl" #include "lib/material/alpha.glsl" -#include "lib/material/vertexcolors.glsl" +#include "compatibility/vertexcolors.glsl" #include "compatibility/fog.glsl" #include "compatibility/shadows_fragment.glsl" @@ -38,10 +38,6 @@ #endif -centroid varying vec4 passColor; - void main() { - Material material = getMaterial(); - #if @diffuseMap gl_FragData[0] = texture2D(diffuseMap, diffuseMapUV); @@ -51,5 +47,5 @@ #endif - gl_FragData[0] *= getDiffuseColor(material, passColor); + gl_FragData[0] *= getDiffuseColor(); if (useFalloff) diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/nolighting.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/nolighting.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/bs/nolighting.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/bs/nolighting.vert 2026-08-22 16:25:48.000000000 +0000 @@ -17,6 +17,4 @@ varying float passFalloff; -centroid varying vec4 passColor; - uniform bool useFalloff; uniform vec4 falloffParams; @@ -25,6 +23,6 @@ #include "lib/view/depth.glsl" -#include "lib/material/vertexcolors.glsl" +#include "compatibility/vertexcolors.glsl" #include "compatibility/shadows_vertex.glsl" diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/debug.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/debug.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/debug.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/debug.frag 2026-08-22 16:25:48.000000000 +0000 @@ -1,9 +1,5 @@ #version 120 -#include "lib/core/fragment.h.glsl" - -#include "lib/material/vertexcolors.glsl" - -centroid varying vec4 passColor; +#include "vertexcolors.glsl" varying vec3 vertexNormal; @@ -13,6 +9,4 @@ void main() { - Material material = getMaterial(); - vec3 lightDir = normalize(vec3(-1., -0.5, -2.)); @@ -21,5 +15,5 @@ if(!useAdvancedShader) { - gl_FragData[0] = getDiffuseColor(material, passColor); + gl_FragData[0] = getDiffuseColor(); } else diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/depthclipped.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/depthclipped.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/depthclipped.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/depthclipped.vert 2026-08-22 16:25:48.000000000 +0000 @@ -7,10 +7,8 @@ #include "lib/core/vertex.h.glsl" -#include "lib/material/vertexcolors.glsl" +#include "vertexcolors.glsl" void main() { - Material material = getMaterial(); - gl_Position = modelToClip(gl_Vertex); @@ -18,8 +16,8 @@ gl_ClipVertex = viewPos; - if (material.vertexColorMode == ColorMode_AmbientAndDiffuse) + if (colorMode == 2) alphaPassthrough = gl_Color.a; else - alphaPassthrough = material.diffuse.a; + alphaPassthrough = gl_FrontMaterial.diffuse.a; diffuseMapUV = (texMat0 * gl_MultiTexCoord0).xy; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/groundcover.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/groundcover.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/groundcover.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/groundcover.frag 2026-08-22 16:25:48.000000000 +0000 @@ -45,10 +45,6 @@ #include "compatibility/normals.glsl" -centroid varying vec4 passColor; - void main() { - Material material = getMaterial(); - #if @diffuseMap gl_FragData[0] = texture2D(diffuseMap, diffuseMapUV); @@ -80,5 +76,5 @@ #else vec3 diffuseLight, ambientLight, specularLight; - doLighting(gl_FragCoord.xy, passViewPos, viewNormal, material.shininess, shadowing, diffuseLight, ambientLight, specularLight); + doLighting(gl_FragCoord.xy, passViewPos, viewNormal, gl_FrontMaterial.shininess, shadowing, diffuseLight, ambientLight, specularLight); lighting = diffuseLight + ambientLight; clampLighting(lighting); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/groundcover.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/groundcover.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/groundcover.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/groundcover.vert 2026-08-22 16:25:48.000000000 +0000 @@ -49,6 +49,4 @@ uniform vec3 playerPos; -centroid varying vec4 passColor; - #if @groundcoverStompMode == 0 #else @@ -128,6 +126,4 @@ void main(void) { - Material material = getMaterial(); - vec3 position = aOffset.xyz; float scale = aOffset.w; @@ -173,5 +169,5 @@ passViewPos = viewPos.xyz; #else - float shininess = max(1e-4, material.shininess); + float shininess = max(1e-4, gl_FrontMaterial.shininess); vec3 viewDir = viewPos.xyz / euclideanDepth; diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/objects.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/objects.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/objects.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/objects.frag 2026-08-22 16:25:48.000000000 +0000 @@ -65,11 +65,7 @@ uniform float alphaRef; uniform float distortionStrength; -uniform float alpha; -uniform float actorFade; #define PER_PIXEL_LIGHTING (@normalMap || @specularMap || @forcePPL) -centroid varying vec4 passColor; - #if !PER_PIXEL_LIGHTING centroid varying vec3 shadedLighting; @@ -78,4 +74,6 @@ centroid varying vec3 passSpecular; #else +uniform float emissiveMult; +uniform float specStrength; #include "lib/light/clamp.glsl" #endif @@ -96,5 +94,5 @@ #include "fog.glsl" -#include "lib/material/vertexcolors.glsl" +#include "vertexcolors.glsl" #include "shadows_fragment.glsl" #include "compatibility/normals.glsl" @@ -120,6 +118,4 @@ #endif - Material material = getMaterial(); - // only offset diffuse and normal maps for now, other textures are more likely to be using a completely different UV set vec2 offset = vec2(0.0); @@ -140,5 +136,5 @@ #if defined(DISTORTION) && DISTORTION - gl_FragData[0].a *= getDiffuseColor(material, passColor).a; + gl_FragData[0].a *= getDiffuseColor().a; gl_FragData[0] = applyDistortion(gl_FragData[0], distortionStrength, gl_FragCoord.z, sampleOpaqueDepthTex(screenCoords / @distorionRTRatio).x); return; @@ -154,6 +150,6 @@ #endif - vec4 diffuseColor = getDiffuseColor(material, passColor); - gl_FragData[0].a *= diffuseColor.a * alpha * actorFade; + vec4 diffuseColor = getDiffuseColor(); + gl_FragData[0].a *= diffuseColor.a; #if @darkMap @@ -227,6 +223,6 @@ vec3 specularColor = specTex.xyz; #else - float shininess = material.shininess; - vec3 specularColor = getSpecularColor(material, passColor).xyz; + float shininess = gl_FrontMaterial.shininess; + vec3 specularColor = getSpecularColor().xyz; #endif vec3 diffuseLight, ambientLight, specularLight; @@ -234,6 +230,6 @@ doLighting(gl_FragCoord.xy, passViewPos, viewNormal, shininess, shadowing, diffuseLight, ambientLight, specularLight); - lighting = diffuseColor.xyz * diffuseLight + getAmbientColor(material, passColor).xyz * ambientLight + getEmissionColor(material, passColor).xyz * material.emissiveMult; - specular = specularColor * specularLight * material.specStrength; + lighting = diffuseColor.xyz * diffuseLight + getAmbientColor().xyz * ambientLight + getEmissionColor().xyz * emissiveMult; + specular = specularColor * specularLight * specStrength; clampLighting(lighting); #endif diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/objects.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/objects.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/objects.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/objects.vert 2026-08-22 16:25:48.000000000 +0000 @@ -62,4 +62,6 @@ centroid varying vec3 passLighting; centroid varying vec3 passSpecular; +uniform float emissiveMult; +uniform float specStrength; #include "lib/light/clamp.glsl" #endif @@ -72,5 +74,5 @@ #include "lib/core/vertex.h.glsl" -#include "lib/material/vertexcolors.glsl" +#include "vertexcolors.glsl" #include "shadows_vertex.glsl" #include "compatibility/normals.glsl" @@ -86,10 +88,6 @@ uniform vec2 screenRes; -centroid varying vec4 passColor; - void main(void) { - Material material = getMaterial(); - #if @particleOcclusion mat4 model = osg_ViewMatrixInverse * gl_ModelViewMatrix; @@ -159,8 +157,8 @@ #if !PER_PIXEL_LIGHTING - vec3 emissionColor = getEmissionColor(material, passColor).rgb; - if (skipLighting(material, passColor)) + vec3 emissionColor = getEmissionColor().rgb; + if (skipLighting()) { - shadedLighting = passLighting = emissionColor * material.emissiveMult; + shadedLighting = passLighting = emissionColor * emissiveMult; shadedSpecular = passSpecular = vec3(0.0); } @@ -169,17 +167,17 @@ // Handles edge case of off-screen vertices with clustered shading not being lit due to not mapping to any cluster vec2 screenCoord = clamp(clipToScreen(gl_Position), vec2(0.0), screenRes - vec2(1.0)); - float shininess = max(1e-4, material.shininess); + float shininess = max(1e-4, gl_FrontMaterial.shininess); vec3 viewDir = normalize(passViewPos); - vec3 diffuseColor = getDiffuseColor(material, passColor).rgb; - vec3 ambientColor = getAmbientColor(material, passColor).rgb; - vec3 specularColor = getSpecularColor(material, passColor).rgb; + vec3 diffuseColor = getDiffuseColor().rgb; + vec3 ambientColor = getAmbientColor().rgb; + vec3 specularColor = getSpecularColor().rgb; vec3 sunDiffuse, sunAmbient, sunSpecular, pointDiffuse, pointAmbient, pointSpecular; directionalLighting(viewDir, viewNormal, shininess, sunDiffuse, sunAmbient, sunSpecular); pointLighting(screenCoord, viewDir, passViewPos, viewNormal, shininess, pointDiffuse, pointAmbient, pointSpecular); - shadedLighting = diffuseColor * pointDiffuse + ambientColor * (pointAmbient + sunAmbient) + emissionColor * material.emissiveMult; - shadedSpecular = specularColor * pointSpecular * material.specStrength; + shadedLighting = diffuseColor * pointDiffuse + ambientColor * (pointAmbient + sunAmbient) + emissionColor * emissiveMult; + shadedSpecular = specularColor * pointSpecular * specStrength; passLighting = shadedLighting + diffuseColor * sunDiffuse; - passSpecular = shadedSpecular + specularColor * sunSpecular * material.specStrength; + passSpecular = shadedSpecular + specularColor * sunSpecular * specStrength; } clampLighting(shadedLighting); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/shadowcasting.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/shadowcasting.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/shadowcasting.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/shadowcasting.vert 2026-08-22 16:25:48.000000000 +0000 @@ -1,22 +1,16 @@ #version 120 -#include "lib/core/vertex.h.glsl" -#include "lib/material/colormodes.glsl" - varying vec2 diffuseMapUV; varying float alphaPassthrough; +uniform int colorMode; uniform bool useTreeAnim; uniform bool useDiffuseMapForShadowAlpha = true; uniform bool alphaTestShadows = true; -uniform float alpha; -uniform float actorFade; uniform mat4 texMat0; void main(void) { - Material material = getMaterial(); - gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex; @@ -28,10 +22,8 @@ else diffuseMapUV = vec2(0.0); // Avoid undefined behaviour if running on hardware predating the concept of dynamically uniform expressions - if (material.vertexColorMode == ColorMode_AmbientAndDiffuse) + if (colorMode == 2) alphaPassthrough = useTreeAnim ? 1.0 : gl_Color.a; else // This is uniform, so if it's too low, we might be able to put the position/clip vertex outside the view frustum and skip the fragment shader and rasteriser - alphaPassthrough = material.diffuse.a; - - alphaPassthrough *= actorFade * alpha; + alphaPassthrough = gl_FrontMaterial.diffuse.a; } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/sky.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/sky.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/sky.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/sky.frag 2026-08-22 16:25:48.000000000 +0000 @@ -10,5 +10,4 @@ uniform vec4 moonBlend; // PASS_MOON uniform vec4 atmosphereFade; // PASS_MOON -uniform vec4 diffuseColor; #include "fog.glsl" @@ -19,5 +18,5 @@ void paintAtmosphere(inout vec4 color) { - color = diffuseColor; + color = gl_FrontMaterial.emission; color.a *= passColor.a; } @@ -33,5 +32,5 @@ color = texture2D(diffuseMap, diffuseMapUV); color.a *= passColor.a * opacity; - color.xyz = clamp(color.xyz * diffuseColor.xyz, 0.0, 1.0); + color.xyz = clamp(color.xyz * gl_FrontMaterial.emission.xyz, 0.0, 1.0); // ease transition between clear color and atmosphere/clouds @@ -68,10 +67,11 @@ { color = texture2D(diffuseMap, diffuseMapUV); - color.a *= opacity; + color.a *= gl_FrontMaterial.diffuse.a; } void paintSunglare(inout vec4 color) { - color = diffuseColor; + color = gl_FrontMaterial.emission; + color.a = gl_FrontMaterial.diffuse.a; } diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/terrain.frag /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/terrain.frag --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/terrain.frag 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/terrain.frag 2026-08-22 16:25:48.000000000 +0000 @@ -42,5 +42,5 @@ #include "lib/core/fragment.h.glsl" -#include "lib/material/vertexcolors.glsl" +#include "vertexcolors.glsl" #include "shadows_fragment.glsl" @@ -49,10 +49,6 @@ #include "compatibility/normals.glsl" -centroid varying vec4 passColor; - void main() { - Material material = getMaterial(); - vec2 adjustedUV = (texMat0 * vec4(uv, 0.0, 1.0)).xy; @@ -64,5 +60,5 @@ gl_FragData[0] = vec4(diffuseTex.xyz, 1.0); - vec4 diffuseColor = getDiffuseColor(material, passColor); + vec4 diffuseColor = getDiffuseColor(); gl_FragData[0].a *= diffuseColor.a; @@ -93,10 +89,10 @@ vec3 specularColor = vec3(diffuseTex.a); #else - float shininess = material.shininess; - vec3 specularColor = getSpecularColor(material, passColor).xyz; + float shininess = gl_FrontMaterial.shininess; + vec3 specularColor = getSpecularColor().xyz; #endif vec3 diffuseLight, ambientLight, specularLight; doLighting(gl_FragCoord.xy, passViewPos, viewNormal, shininess, shadowing, diffuseLight, ambientLight, specularLight); - lighting = diffuseColor.xyz * diffuseLight + getAmbientColor(material, passColor).xyz * ambientLight + getEmissionColor(material, passColor).xyz; + lighting = diffuseColor.xyz * diffuseLight + getAmbientColor().xyz * ambientLight + getEmissionColor().xyz; specular = specularColor * specularLight; clampLighting(lighting); diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/terrain.vert /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/terrain.vert --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/compatibility/terrain.vert 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility/terrain.vert 2026-08-22 16:25:48.000000000 +0000 @@ -23,5 +23,5 @@ varying vec3 passNormal; -#include "lib/material/vertexcolors.glsl" +#include "vertexcolors.glsl" #include "shadows_vertex.glsl" #include "compatibility/normals.glsl" @@ -29,10 +29,6 @@ #include "lib/view/depth.glsl" -centroid varying vec4 passColor; - void main(void) { - Material material = getMaterial(); - gl_Position = modelToClip(gl_Vertex); @@ -58,10 +54,10 @@ #if !PER_PIXEL_LIGHTING - float shininess = max(1e-4, material.shininess); + float shininess = max(1e-4, gl_FrontMaterial.shininess); vec3 viewDir = passViewPos / euclideanDepth; - vec3 diffuseColor = getDiffuseColor(material, passColor).rgb; - vec3 ambientColor = getAmbientColor(material, passColor).rgb; - vec3 emissionColor = getEmissionColor(material, passColor).rgb; - vec3 specularColor = getSpecularColor(material, passColor).rgb; + vec3 diffuseColor = getDiffuseColor().rgb; + vec3 ambientColor = getAmbientColor().rgb; + vec3 emissionColor = getEmissionColor().rgb; + vec3 specularColor = getSpecularColor().rgb; vec3 sunDiffuse, sunAmbient, sunSpecular, pointDiffuse, pointAmbient, pointSpecular; Only in /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/compatibility: vertexcolors.glsl diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/fragment.glsl /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/fragment.glsl --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/fragment.glsl 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/fragment.glsl 2026-08-22 16:25:48.000000000 +0000 @@ -4,5 +4,4 @@ uniform sampler2D reflectionMap; -uniform Material material; vec4 sampleReflectionMap(vec2 uv) @@ -49,7 +48,2 @@ return texture2D(opaqueDepthTex, uv); } - -Material getMaterial() -{ - return material; -} \ No newline at end of file diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/fragment.h.glsl /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/fragment.h.glsl --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/fragment.h.glsl 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/fragment.h.glsl 2026-08-22 16:25:48.000000000 +0000 @@ -7,6 +7,4 @@ @link "lib/core/lighting_fragment_legacy.glsl" if !@lightingMethodClustered -#include "lib/material/struct.glsl" - vec4 sampleReflectionMap(vec2 uv); @@ -28,5 +26,3 @@ vec3 doSpecularLighting(vec2 screenCoord, vec3 viewPos, vec3 viewNormal); -Material getMaterial(); - #endif // OPENMW_FRAGMENT_H_GLSL diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/vertex.glsl /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/vertex.glsl --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/vertex.glsl 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/vertex.glsl 2026-08-22 16:25:48.000000000 +0000 @@ -5,5 +5,4 @@ uniform vec2 screenRes; uniform mat4 projectionMatrix; -uniform Material material; vec4 modelToClip(vec4 pos) @@ -26,7 +25,2 @@ return ((pos.xy / pos.w) * 0.5 + 0.5) * screenRes; } - -Material getMaterial() -{ - return material; -} \ No newline at end of file diff -U2 -r /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/vertex.h.glsl /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/vertex.h.glsl --- /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/core/vertex.h.glsl 2026-08-22 23:49:43.000000000 +0000 +++ /var/lib/copr-rpmbuild/results/openmw-git/srpm-unpacked/openmw-master.tar.bz2-extract/openmw-master/files/shaders/lib/core/vertex.h.glsl 2026-08-22 16:25:48.000000000 +0000 @@ -4,6 +4,4 @@ @link "lib/core/lighting_vertex_legacy.glsl" if !@lightingMethodClustered -#include "lib/material/struct.glsl" - vec4 modelToClip(vec4 pos); vec4 modelToView(vec4 pos); @@ -12,3 +10,2 @@ void directionalLighting(vec3 viewDir, vec3 viewNormal, float shininess, out vec3 diffuseLight, out vec3 ambientLight, out vec3 specularLight); void pointLighting(vec2 screenCoord, vec3 viewDir, vec3 viewPos, vec3 viewNormal, float shininess, out vec3 diffuseLight, out vec3 ambientLight, out vec3 specularLight); -Material getMaterial(); Only in /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/material: colormodes.glsl Only in /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/material: struct.glsl Only in /var/lib/copr-rpmbuild/results/openmw-git/upstream-unpacked/Source0/openmw-master/files/shaders/lib/material: vertexcolors.glsl