1
0
Fork 0
mirror of https://github.com/OpenMW/openmw.git synced 2025-06-30 15:11:38 +00:00

consolidates createUnlitMaterial (#3203)

With this PR we remove a few duplicate lines of code by adding a parameter to `createUnlitMaterial`.
This commit is contained in:
Bo Svensson 2021-10-30 17:19:58 +00:00 committed by GitHub
parent 7e6533f0f3
commit 7d34149adc
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 10 additions and 16 deletions

View file

@ -93,26 +93,20 @@ namespace
namespace MWRender
{
osg::ref_ptr<osg::Material> createAlphaTrackingUnlitMaterial()
osg::ref_ptr<osg::Material> createUnlitMaterial(osg::Material::ColorMode colorMode)
{
osg::ref_ptr<osg::Material> 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(osg::Material::DIFFUSE);
mat->setColorMode(colorMode);
return mat;
}
osg::ref_ptr<osg::Material> createUnlitMaterial()
osg::ref_ptr<osg::Material> createAlphaTrackingUnlitMaterial()
{
osg::ref_ptr<osg::Material> 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(osg::Material::OFF);
return mat;
return createUnlitMaterial(osg::Material::DIFFUSE);
}
class SunUpdater : public SceneUtil::StateSetUpdater
@ -126,7 +120,7 @@ namespace MWRender
void setDefaults(osg::StateSet* stateset) override
{
stateset->setAttributeAndModes(MWRender::createUnlitMaterial());
stateset->setAttributeAndModes(createUnlitMaterial());
}
void apply(osg::StateSet* stateset, osg::NodeVisitor*) override
@ -188,7 +182,7 @@ namespace MWRender
if (visibleRatio < fadeThreshold)
{
float fade = 1.f - (fadeThreshold - visibleRatio) / fadeThreshold;
osg::ref_ptr<osg::Material> mat (MWRender::createUnlitMaterial());
osg::ref_ptr<osg::Material> mat (createUnlitMaterial());
mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0,0,0,fade*mGlareView));
stateset = new osg::StateSet;
stateset->setAttributeAndModes(mat, osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
@ -283,7 +277,7 @@ namespace MWRender
{
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet;
osg::ref_ptr<osg::Material> mat = MWRender::createUnlitMaterial();
osg::ref_ptr<osg::Material> mat = createUnlitMaterial();
mat->setDiffuse(osg::Material::FRONT_AND_BACK, osg::Vec4f(0,0,0,fade));
mat->setEmission(osg::Material::FRONT_AND_BACK, mColor);
@ -364,7 +358,7 @@ namespace MWRender
stateset->addUniform(new osg::Uniform("atmosphereFade", osg::Vec4f{}));
stateset->addUniform(new osg::Uniform("diffuseMap", 0));
stateset->addUniform(new osg::Uniform("maskMap", 1));
stateset->setAttributeAndModes(MWRender::createUnlitMaterial(), osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
stateset->setAttributeAndModes(createUnlitMaterial(), osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
}
else
{
@ -386,7 +380,7 @@ namespace MWRender
texEnv2->setSource1_RGB(osg::TexEnvCombine::CONSTANT);
texEnv2->setConstantColor(osg::Vec4f(0.f, 0.f, 0.f, 1.f)); // mAtmosphereColor.rgb, mTransparency
stateset->setTextureAttributeAndModes(1, texEnv2);
stateset->setAttributeAndModes(MWRender::createUnlitMaterial(), osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
stateset->setAttributeAndModes(createUnlitMaterial(), osg::StateAttribute::ON|osg::StateAttribute::OVERRIDE);
}
}

View file

@ -104,7 +104,7 @@ namespace MWRender
};
osg::ref_ptr<osg::Material> createAlphaTrackingUnlitMaterial();
osg::ref_ptr<osg::Material> createUnlitMaterial();
osg::ref_ptr<osg::Material> createUnlitMaterial(osg::Material::ColorMode colorMode = osg::Material::OFF);
class OcclusionCallback
{