private void ReleaseBuffer() { if (cameras != null) { for (int i = 0; i < cameras.Count; i++) { var camera = cameras[i]; if (camera != null && command_buffer != null) { camera.RemoveCommandBuffer(camera_event, command_buffer); } } } if (command_buffer != null) { command_buffer.Release(); } if (buffer_manager != null) { buffer_manager.Release(); } buffer_manager = null; command_buffer = null; Camera.onPreCull -= DrawWithCamera; }
private void OnEnable() { if (prefab_material == null || degraded_rectangles == null) { return; } ReleaseBuffer(); bake_mesh = new Mesh(); material = Instantiate(prefab_material); mesh_renderer = GetComponent <SkinnedMeshRenderer>(); mesh_vertices = new List <Vector3>(); command_buffer = new CommandBuffer(); buffer_manager = new MaterialBufferManager(mesh_renderer.sharedMesh, degraded_rectangles.degraded_rectangles, material); degraded_rectangles_count = buffer_manager.GetLines().count; cameras = new List <Camera>(); Camera.onPreCull += DrawWithCamera; command_buffer.name = "Cartoon Line";// 让描边同时在Scene视图和Game视图显示 }