From 625c5040ce6405aee5483b367cfeda7fee2ab5ce Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 1 Feb 2017 15:49:20 +0100 Subject: [PATCH 1/2] Fix build --- apps/opencs/view/render/scenewidget.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/opencs/view/render/scenewidget.cpp b/apps/opencs/view/render/scenewidget.cpp index a8618923f..a072cd0aa 100644 --- a/apps/opencs/view/render/scenewidget.cpp +++ b/apps/opencs/view/render/scenewidget.cpp @@ -80,7 +80,7 @@ RenderWidget::RenderWidget(QWidget *parent, Qt::WindowFlags f) 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()->getOrCreateStateSet()->setAttribute(defaultMat); + mView->getCamera()->getOrCreateStateSet()->setAttribute(defaultMat); mView->setSceneData(mRootNode); From 851f61ac82d0c3cd253820be887b57134fcfe7b9 Mon Sep 17 00:00:00 2001 From: scrawl Date: Wed, 1 Feb 2017 21:10:43 +0100 Subject: [PATCH 2/2] Always assign osg::Material when a material controller is used --- components/nifosg/nifloader.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/components/nifosg/nifloader.cpp b/components/nifosg/nifloader.cpp index 07b92ef2a..30849e49b 100644 --- a/components/nifosg/nifloader.cpp +++ b/components/nifosg/nifloader.cpp @@ -1674,6 +1674,8 @@ namespace NifOsg 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; + for (std::vector::const_reverse_iterator it = properties.rbegin(); it != properties.rend(); ++it) { const Nif::Property* property = *it; @@ -1696,7 +1698,10 @@ namespace NifOsg mat->setShininess(osg::Material::FRONT_AND_BACK, matprop->data.glossiness); if (!matprop->controller.empty()) + { + hasMatCtrl = true; handleMaterialControllers(matprop, composite, animflags); + } break; } @@ -1769,7 +1774,7 @@ namespace NifOsg mat->setColorMode(osg::Material::AMBIENT); } - if (mat->getColorMode() == osg::Material::OFF + if (!hasMatCtrl && mat->getColorMode() == osg::Material::OFF && 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->getSpecular(osg::Material::FRONT_AND_BACK) == osg::Vec4f(0.f, 0.f, 0.f, 0.f))