Integrate AddGlow with material controllers

pull/37/head
scrawl 11 years ago
parent 16b3927f17
commit 6d27ebabb6

@ -141,15 +141,15 @@ void MWBase::Environment::cleanup()
delete mScriptManager; delete mScriptManager;
mScriptManager = 0; mScriptManager = 0;
delete mWindowManager;
mWindowManager = 0;
delete mWorld; delete mWorld;
mWorld = 0; mWorld = 0;
delete mSoundManager; delete mSoundManager;
mSoundManager = 0; mSoundManager = 0;
delete mWindowManager;
mWindowManager = 0;
delete mInputManager; delete mInputManager;
mInputManager = 0; mInputManager = 0;
} }

@ -146,29 +146,21 @@ void Animation::setObjectRoot(const std::string &model, bool baseonly)
struct AddGlow struct AddGlow
{ {
Ogre::Vector3* mColor; Ogre::Vector3* mColor;
AddGlow(Ogre::Vector3* col) : mColor(col) {} NifOgre::MaterialControllerManager* mMaterialControllerMgr;
AddGlow(Ogre::Vector3* col, NifOgre::MaterialControllerManager* materialControllerMgr)
: mColor(col)
, mMaterialControllerMgr(materialControllerMgr)
{}
// TODO: integrate this with material controllers?
void operator()(Ogre::Entity* entity) const void operator()(Ogre::Entity* entity) const
{ {
unsigned int numsubs = entity->getNumSubEntities(); if (!entity->getNumSubEntities())
for(unsigned int i = 0;i < numsubs;++i) return;
{ Ogre::MaterialPtr writableMaterial = mMaterialControllerMgr->getWritableMaterial(entity);
unsigned int numsubs = entity->getNumSubEntities(); sh::MaterialInstance* instance = sh::Factory::getInstance().getMaterialInstance(writableMaterial->getName());
for(unsigned int i = 0;i < numsubs;++i)
{ instance->setProperty("env_map", sh::makeProperty(new sh::BooleanValue(true)));
Ogre::SubEntity* subEnt = entity->getSubEntity(i); instance->setProperty("env_map_color", sh::makeProperty(new sh::Vector3(mColor->x, mColor->y, mColor->z)));
std::string newName = subEnt->getMaterialName() + "@fx";
if (sh::Factory::getInstance().searchInstance(newName) == NULL)
{
sh::MaterialInstance* instance =
sh::Factory::getInstance().createMaterialInstance(newName, subEnt->getMaterialName());
instance->setProperty("env_map", sh::makeProperty(new sh::BooleanValue(true)));
instance->setProperty("env_map_color", sh::makeProperty(new sh::Vector3(mColor->x, mColor->y, mColor->z)));
}
subEnt->setMaterialName(newName);
}
}
} }
}; };
@ -216,7 +208,7 @@ void Animation::setRenderProperties(NifOgre::ObjectScenePtr objlist, Ogre::uint3
if (enchantedGlow) if (enchantedGlow)
std::for_each(objlist->mEntities.begin(), objlist->mEntities.end(), std::for_each(objlist->mEntities.begin(), objlist->mEntities.end(),
AddGlow(glowColor)); AddGlow(glowColor, &objlist->mMaterialControllerMgr));
} }

@ -390,7 +390,6 @@ Ogre::String NIFMaterialLoader::getMaterial(const Nif::ShapeData *shapedata,
instance->setProperty("depth_write", sh::makeProperty(new sh::StringValue(((depthFlags>>1)&1) ? "on" : "off"))); instance->setProperty("depth_write", sh::makeProperty(new sh::StringValue(((depthFlags>>1)&1) ? "on" : "off")));
// depth_func??? // depth_func???
sh::Factory::getInstance()._ensureMaterial(name, "Default");
return name; return name;
} }

@ -45,6 +45,8 @@ class MaterialControllerManager
{ {
public: public:
~MaterialControllerManager(); ~MaterialControllerManager();
/// @attention if \a movable is an Entity, it needs to have *one* SubEntity
Ogre::MaterialPtr getWritableMaterial (Ogre::MovableObject* movable); Ogre::MaterialPtr getWritableMaterial (Ogre::MovableObject* movable);
private: private:

@ -259,9 +259,8 @@ namespace sh
Platform* mPlatform; Platform* mPlatform;
MaterialInstance* findInstance (const std::string& name); MaterialInstance* findInstance (const std::string& name);
public:
MaterialInstance* searchInstance (const std::string& name);
private: private:
MaterialInstance* searchInstance (const std::string& name);
/// @return was anything removed? /// @return was anything removed?
bool removeCache (const std::string& pattern); bool removeCache (const std::string& pattern);

Loading…
Cancel
Save