public IEnumerator DecodeMesh(NativeArray <byte> data) { Profiler.BeginSample("JobPrepare"); var job = new DracoJob(); job.data = data; job.result = new NativeArray <int>(1, defaultAllocator); job.outMesh = new NativeArray <IntPtr>(1, defaultAllocator); job.weightsId = -1; job.jointsId = -1; var jobHandle = job.Schedule(); Profiler.EndSample(); while (!jobHandle.IsCompleted) { yield return(null); } jobHandle.Complete(); int result = job.result[0]; IntPtr dracoMesh = job.outMesh[0]; job.result.Dispose(); job.outMesh.Dispose(); if (result <= 0) { Debug.LogError("Failed: Decoding error."); yield break; } bool hasTexcoords; bool hasNormals; var mesh = CreateMesh(dracoMesh, out hasNormals, out hasTexcoords); if (!hasNormals) { mesh.RecalculateNormals(); } if (hasTexcoords) { mesh.RecalculateTangents(); } if (onMeshesLoaded != null) { onMeshesLoaded(mesh); } }
public IEnumerator DecodeMesh(NativeArray <byte> data) { Profiler.BeginSample("JobPrepare"); var job = new DracoJob(); job.data = data; job.result = new NativeArray <int>(1, defaultAllocator); job.outMesh = new NativeArray <IntPtr>(1, defaultAllocator); var jobHandle = job.Schedule(); Profiler.EndSample(); while (!jobHandle.IsCompleted) { yield return(null); } jobHandle.Complete(); int result = job.result[0]; IntPtr dracoMesh = job.outMesh[0]; job.result.Dispose(); job.outMesh.Dispose(); if (result <= 0) { Debug.LogError("Failed: Decoding error."); yield break; } var mesh = CreateMesh(dracoMesh); if (onMeshesLoaded != null) { onMeshesLoaded(mesh); } }