protected override void Dispose(bool disposing) { base.Dispose(disposing); if (current == this) { current = null; } iRunnableObjects.Dispose(); CustomDrawRequest.Dispose(); if (m_afterFrameBuffer != null) { m_afterFrameBuffer.Dispose(); m_afterFrameBuffer = null; } if (m_beforeFrameBuffer != null) { m_beforeFrameBuffer.Dispose(); m_beforeFrameBuffer = null; } try { eventsGuideBook.Dispose(); waitReleaseRT.Dispose(); } catch { } SceneController.Dispose(resources); resources.loadingThread.Dispose(); data.buffer.Dispose(); var allEvents = resources.allEvents; for (int i = 0; i < resources.availiableEvents.Length; ++i) { resources.availiableEvents[i].DisposeEvent(); } for (int i = 0; i < resources.availiableEvents.Length; ++i) { resources.availiableEvents[i].DisposeDependEventsList(); } foreach (var camPtr in PipelineCamera.CameraSearchDict) { PipelineCamera cam = MUnsafeUtility.GetObject <PipelineCamera>((void *)camPtr.value); if (cam.allDatas.isCreated) { foreach (var i in cam.allDatas) { IPerCameraData data = ((IPerCameraData)MUnsafeUtility.GetHookedObject(i.value)); data.DisposeProperty(); MUnsafeUtility.RemoveHookedObject(i.value); } cam.allDatas.Dispose(); } } if (motionVectorMatricesBuffer != null) { motionVectorMatricesBuffer.Dispose(); } MotionVectorDrawer.Dispose(); }
public static ComputeBuffer GetTempPropertyBuffer(int length, int stride, ComputeBufferType type = ComputeBufferType.Default) { if (!allTempBuffers.isCreated) { allTempBuffers = new NativeDictionary <BufferKey, int, BufferKey.Equal>(11, Allocator.Persistent, new BufferKey.Equal()); } ComputeBuffer target; int targetIndex; if (allTempBuffers.Get(new BufferKey { size = stride, type = type }, out targetIndex)) { target = MUnsafeUtility.GetHookedObject(targetIndex) as ComputeBuffer; if (target.count < length) { target.Dispose(); target = new ComputeBuffer(length, stride, type); MUnsafeUtility.SetHookedObject(targetIndex, target); } return(target); } else { target = new ComputeBuffer(length, stride); allTempBuffers[new BufferKey { size = stride, type = type }] = MUnsafeUtility.HookObject(target); return(target); } }
public static void RemoveProperty <T>(PipelineCamera camera) { int index = camera.allDatas[(ulong)MUnsafeUtility.GetManagedPtr(typeof(T))]; IPerCameraData data = MUnsafeUtility.GetHookedObject(index) as IPerCameraData; if (data != null) { data.DisposeProperty(); } MUnsafeUtility.RemoveHookedObject(index); }
public static T GetProperty <T, R>(PipelineCamera camera, R runnable) where T : IPerCameraData where R : struct, IGetCameraData { int index; IPerCameraData data; if (!camera.allDatas.isCreated) { camera.allDatas = new NativeDictionary <ulong, int, PipelineCamera.PtrEqual>(20, Unity.Collections.Allocator.Persistent, new PipelineCamera.PtrEqual()); } if (!camera.allDatas.Get((ulong)MUnsafeUtility.GetManagedPtr(typeof(T)), out index)) { data = runnable.Run(); index = MUnsafeUtility.HookObject(data); camera.allDatas.Add((ulong)MUnsafeUtility.GetManagedPtr(typeof(T)), index); } return(MUnsafeUtility.GetHookedObject(index) as T); }
public static void Dispose(PipelineResources res) { singletonReady = false; PipelineFunctions.Dispose(baseBuffer); if (Application.isPlaying && res.clusterResources) { res.clusterResources.Dispose(); } addList.Dispose(); if (allTempBuffers.isCreated) { foreach (var i in allTempBuffers) { ComputeBuffer bf = MUnsafeUtility.GetHookedObject(i.value) as ComputeBuffer; bf.Dispose(); } } }
private void OnDestroy() { if (allDatas.isCreated) { foreach (var i in allDatas) { IPerCameraData data = ((IPerCameraData)MUnsafeUtility.GetHookedObject(i.value)); data.DisposeProperty(); MUnsafeUtility.RemoveHookedObject(i.value); } allDatas.Dispose(); } cam = null; /* foreach (var i in commandBuffers.Values) * { * i.Dispose(); * } * commandBuffers = null; */ }