예제 #1
0
//----------------------------------------------------------------------------
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();
}