//---------------------------------------------------------------------------- void MaterialInstance::Update(double appTime, double elapsedTime) { PX2_UNUSED(appTime); PX2_UNUSED(elapsedTime); if (mIsNeedUpdate) { if (!mMaterialFilename.empty() && !mInstanceTechName.empty()) { MaterialPtr newMaterial; int newTechIndex = 0; ShaderParametersPtr *newVertexParameters = 0; ShaderParametersPtr *newPixelParameters = 0; MaterialTechnique *tech = _RefreshMaterial(mMaterialFilename, mInstanceTechName, newVertexParameters, newPixelParameters, mIsShareMtl, newMaterial, newTechIndex); int newNumPasses = tech->GetNumPasses(); if (newNumPasses <= mNumPasses) { for (int i = 0; i < newNumPasses; i++) { _CopyParams(mVertexParameters[i], newVertexParameters[i]); _CopyParams(mPixelParameters[i], newPixelParameters[i]); newMaterial->GetPass(newTechIndex, i)->SetAlphaProperty(mMaterial->GetAlphaProperty(mTechniqueIndex, i)); newMaterial->GetPass(newTechIndex, i)->SetCullProperty(mMaterial->GetCullProperty(mTechniqueIndex, i)); newMaterial->GetPass(newTechIndex, i)->SetDepthProperty(mMaterial->GetDepthProperty(mTechniqueIndex, i)); newMaterial->GetPass(newTechIndex, i)->SetOffsetProperty(mMaterial->GetOffsetProperty(mTechniqueIndex, i)); newMaterial->GetPass(newTechIndex, i)->SetStencilProperty(mMaterial->GetStencilProperty(mTechniqueIndex, i)); newMaterial->GetPass(newTechIndex, i)->SetWireProperty(mMaterial->GetWireProperty(mTechniqueIndex, i)); } } for (int i = 0; i < mNumPasses; i++) { mVertexParameters[i] = 0; mPixelParameters[i] = 0; } delete1(mVertexParameters); delete1(mPixelParameters); mNumPasses = newNumPasses; mMaterial = newMaterial; mTechniqueIndex = newTechIndex; mVertexParameters = newVertexParameters; mPixelParameters = newPixelParameters; } mIsNeedUpdate = false; } _SetDepthTexture(); }