public static void AddLoadingFromSession(this ShaderGeneratorContextBase context, Package package) { var previousGetAssetFriendlyName = context.GetAssetFriendlyName; var previousFindAsset = context.FindAsset; // Setup the GetAssetFriendlyName callback context.GetAssetFriendlyName = runtimeAsset => { string assetFriendlyName = null; if (previousGetAssetFriendlyName != null) { assetFriendlyName = previousGetAssetFriendlyName(runtimeAsset); } if (string.IsNullOrEmpty(assetFriendlyName)) { var referenceAsset = AttachedReferenceManager.GetAttachedReference(runtimeAsset); assetFriendlyName = string.Format("{0}:{1}", referenceAsset.Id, referenceAsset.Url); } return(assetFriendlyName); }; // Setup the FindAsset callback context.FindAsset = runtimeAsset => { object newAsset = null; if (previousFindAsset != null) { newAsset = previousFindAsset(runtimeAsset); } if (newAsset != null) { return(newAsset); } var reference = AttachedReferenceManager.GetAttachedReference(runtimeAsset); var assetItem = package.Session.FindAsset(reference.Id) ?? package.Session.FindAsset(reference.Url); if (assetItem == null) { return(null); } return(assetItem.Asset); }; }
public static void AddLoadingFromSession(this ShaderGeneratorContextBase shaderGeneratorContext, Package package) { shaderGeneratorContext.FindAsset = material => { if (material.Descriptor != null) { return(material.Descriptor); } var reference = AttachedReferenceManager.GetAttachedReference(material); var assetItem = package.Session.FindAsset(reference.Id) ?? package.Session.FindAsset(reference.Url); if (assetItem == null) { return(null); } return((IMaterialDescriptor)assetItem.Asset); }; }