/// <summary> /// /// </summary> /// <param name="enabled"></param> /// <param name="visibleDist"></param> /// <param name="invisbleDist"></param> public void SetFade(bool enabled, float visibleDist, float invisbleDist) { if (mRenderMethod == BillboardMethod.Accelerated) { if (enabled) { if (mMaterial == null) { throw new Exception("Billboard fading cannot be enabled without a material applied first"); } //Update material reference list if (mFadeEnabled) { Debug.Assert(mFadeMaterial != null); SBMaterialRef.RemoveMaterialRef(mFadeMaterial); } else { Debug.Assert(mMaterial != null); SBMaterialRef.RemoveMaterialRef(mMaterial); } mFadeMaterial = GetFadeMaterial(visibleDist, invisbleDist); SBMaterialRef.AddMaterialRef(mFadeMaterial, mBBOrigin); //Apply material to entity if (mEntity != null) { mEntity.MaterialName = mFadeMaterial.Name; } mFadeEnabled = enabled; mFadeVisibleDist = visibleDist; mFadeInvisibleDist = invisbleDist; } else { if (mFadeEnabled) { //Update material reference list Debug.Assert(mFadeMaterial != null); Debug.Assert(mMaterial != null); SBMaterialRef.RemoveMaterialRef(mFadeMaterial); SBMaterialRef.AddMaterialRef(mMaterial, mBBOrigin); //Apply material to entity if (mEntity != null) { mEntity.MaterialName = mFadeMaterial.Name; } mFadeEnabled = enabled; mFadeVisibleDist = visibleDist; mFadeInvisibleDist = invisbleDist; } } } }
/// <summary> /// /// </summary> /// <param name="matP"></param> public static void RemoveMaterialRef(Material matP) { SBMaterialRef matRef = null; if (mSelfList.TryGetValue(matP, out matRef)) { if (--matRef.mRefCount == 0) { mSelfList.Remove(matRef.Material); } } }
/// <summary> /// /// </summary> /// <param name="matP"></param> /// <param name="origin"></param> public static void AddMaterialRef(Material matP, BillboardOrigin origin) { Material mat = matP; SBMaterialRef matRef = null; if (!mSelfList.TryGetValue(mat, out matRef)) { matRef = new SBMaterialRef(mat, origin); } else { //its allready there, increase the refcount matRef.mRefCount++; } }
/// <summary> /// /// </summary> /// <param name="matP"></param> /// <param name="origin"></param> public static void AddMaterialRef(Material matP, BillboardOrigin origin) { Material mat = matP; SBMaterialRef matRef = null; if (!mSelfList.TryGetValue(mat, out matRef)) { matRef = new SBMaterialRef(mat, origin); } else { //its allready there, increase the refcount matRef.mRefCount++; } }