void DeleteCubemapAssets(bool deleteUnusedOnly) { var gameObjects = new List <GameObject>(); var indices = new List <int>(); var scenes = new List <Scene>(); SceneObjectIDMap.GetAllIDsForAllScenes( HDBakingUtilities.SceneObjectCategory.ReflectionProbe, gameObjects, indices, scenes ); var indicesSet = new HashSet <int>(indices); const int bufferLength = 1 << 10; var bufferStart = stackalloc byte[bufferLength]; var buffer = new CoreUnsafeUtils.FixedBufferStringQueue(bufferStart, bufferLength); // Look for baked assets in scene folders for (int sceneI = 0, sceneC = SceneManager.sceneCount; sceneI < sceneC; ++sceneI) { var scene = SceneManager.GetSceneAt(sceneI); var sceneFolder = HDBakingUtilities.GetBakedTextureDirectory(scene); if (!Directory.Exists(sceneFolder)) { continue; } var types = TypeInfo.GetEnumValues <ProbeSettings.ProbeType>(); for (int typeI = 0; typeI < types.Length; ++typeI) { var files = Directory.GetFiles( sceneFolder, HDBakingUtilities.HDProbeAssetPattern(types[typeI]) ); for (int fileI = 0; fileI < files.Length; ++fileI) { if (!HDBakingUtilities.TryParseBakedProbeAssetFileName( files[fileI], out ProbeSettings.ProbeType fileProbeType, out int fileIndex )) { continue; } // This file is a baked asset for a destroyed game object // We can destroy it if (!indicesSet.Contains(fileIndex) && deleteUnusedOnly // Or we delete all assets || !deleteUnusedOnly) { if (!buffer.TryPush(files[fileI])) { DeleteAllAssetsIn(ref buffer); } } } } } DeleteAllAssetsIn(ref buffer); }
public static string GetBakedTextureFilePath(HDProbe probe) { return(GetBakedTextureFilePath( probe.settings.type, SceneObjectIDMap.GetOrCreateSceneObjectID( probe.gameObject, SceneObjectCategory.ReflectionProbe ), probe.gameObject.scene )); }