xml::XMLElement* RenderMaterial::loadXMLSettings(xml::XMLElement* elem){ IResource::loadFromXML(elem); xml::XMLElement*e=elem->getSubElement(mT("Technique")); while(e) { core::string name=e->getValueString("Name"); video::RenderTechnique* t= GetTechniqueByName(name); bool loaded=false; if(!t) t=new RenderTechnique(this); else loaded=true; t->loadXMLSettings(e); if(!loaded) AddTechnique(t); e=e->nextSiblingElement(mT("Technique")); } m_activeTechnique=0; for(int i=0;i<m_techniques.size();++i) { if(m_techniques[i]->IsSupported()) { m_activeTechnique=m_techniques[i]; break; } } return elem; }
bool RenderMaterial::SetActiveTechniqueByName(const core::string& name) { RenderTechnique* t=GetTechniqueByName(name); if(!t) return false; m_activeTechnique=t; return true; }
bool EffectTechniqueGroup::RemoveTechnique( StringRef name ) { EffectTechnique* result=GetTechniqueByName(name); if (result!=nullptr) { mTechniques.Remove(result); mTechniqueDict.RemoveKey(name); result->SetGroup(nullptr); if (result==mCurrentTechnique) { mCurrentTechnique=nullptr; } SAFE_DELETE(result); return true; } return false; }
EffectTechnique* EffectTechniqueGroup::CreateTechnique( StringRef name ,bool setCurrent/*=true*/) { EffectTechnique* result=GetTechniqueByName(name); if (result!=nullptr) { return result; } result=new EffectTechnique(name); mTechniqueDict.Add(name,result); mTechniques.Add(result); result->SetGroup(this); if (setCurrent) { mCurrentTechnique=result; } return result; }
void EffectTechniqueGroup::SetCurrentTechnique( StringRef name ) { mCurrentTechnique=GetTechniqueByName(name); }