// SPDX-FileCopyrightText: 2023 Unity Technologies and the Draco for Unity authors // SPDX-License-Identifier: Apache-2.0 using System; using System.Threading.Tasks; using Unity.Collections; using UnityEngine; namespace Draco { /// /// Obsolete! Please use instead. Provides Draco mesh decoding. /// /// [Obsolete("Use DracoDecoder.DecodeMesh methods instead.")] public class DracoMeshLoader { /// /// If true, coordinate space is converted from right-hand (like in glTF) to left-hand (Unity). /// readonly bool m_ConvertSpace; /// /// Create a DracoMeshLoader instance which let's you decode Draco data. /// /// If true, coordinate space is converted from right-hand (like in glTF) to left-hand (Unity). public DracoMeshLoader(bool convertSpace = true) { m_ConvertSpace = convertSpace; } /// /// Decodes a Draco mesh /// /// Compressed Draco data /// If draco does not contain normals and this is set to true, normals are calculated. /// If draco does not contain tangents and this is set to true, tangents and normals are calculated. /// Draco attribute ID that contains bone weights (for skinning) /// Draco attribute ID that contains bone joint indices (for skinning) /// Enforces vertex buffer layout with highest compatibility. Enable this if you want to use blend shapes on the resulting mesh /// Unity Mesh or null in case of errors /// [Obsolete("Use DracoDecoder.DecodeMesh instead.")] public async Task ConvertDracoMeshToUnity( NativeSlice encodedData, bool requireNormals = false, bool requireTangents = false, int weightsAttributeId = -1, int jointsAttributeId = -1, bool forceUnityLayout = false ) { return await DracoDecoder.DecodeMesh( encodedData, CreateDecodeSettings(requireNormals, requireTangents, forceUnityLayout), DracoDecoder.CreateAttributeIdMap(weightsAttributeId, jointsAttributeId) ); } /// /// Decodes a Draco mesh /// /// Compressed Draco data /// If draco does not contain normals and this is set to true, normals are calculated. /// If draco does not contain tangents and this is set to true, tangents and normals are calculated. /// Draco attribute ID that contains bone weights (for skinning) /// Draco attribute ID that contains bone joint indices (for skinning) /// Enforces vertex buffer layout with highest compatibility. Enable this if you want to use blend shapes on the resulting mesh /// Unity Mesh or null in case of errors /// [Obsolete("Use DracoDecoder.DecodeMesh instead.")] public async Task ConvertDracoMeshToUnity( byte[] encodedData, bool requireNormals = false, bool requireTangents = false, int weightsAttributeId = -1, int jointsAttributeId = -1, bool forceUnityLayout = false ) { return await DracoDecoder.DecodeMesh( encodedData, CreateDecodeSettings(requireNormals, requireTangents, forceUnityLayout), DracoDecoder.CreateAttributeIdMap(weightsAttributeId, jointsAttributeId) ); } /// /// Decodes a Draco mesh /// /// MeshData used to create the mesh /// Compressed Draco data /// If draco does not contain normals and this is set to true, normals are calculated. /// If draco does not contain tangents and this is set to true, tangents and normals are calculated. /// Draco attribute ID that contains bone weights (for skinning) /// Draco attribute ID that contains bone joint indices (for skinning) /// Enforces vertex buffer layout with highest compatibility. Enable this if you want to use blend shapes on the resulting mesh /// A DecodeResult /// [Obsolete("Use DracoDecoder.DecodeMesh instead.")] public async Task ConvertDracoMeshToUnity( Mesh.MeshData mesh, byte[] encodedData, bool requireNormals = false, bool requireTangents = false, int weightsAttributeId = -1, int jointsAttributeId = -1, bool forceUnityLayout = false ) { return await DracoDecoder.DecodeMesh( mesh, encodedData, CreateDecodeSettings(requireNormals, requireTangents, forceUnityLayout), DracoDecoder.CreateAttributeIdMap(weightsAttributeId, jointsAttributeId) ); } /// /// Decodes a Draco mesh /// /// MeshData used to create the mesh /// Compressed Draco data /// If draco does not contain normals and this is set to true, normals are calculated. /// If draco does not contain tangents and this is set to true, tangents and normals are calculated. /// Draco attribute ID that contains bone weights (for skinning) /// Draco attribute ID that contains bone joint indices (for skinning) /// Enforces vertex buffer layout with highest compatibility. Enable this if you want to use blend shapes on the resulting mesh /// A DecodeResult /// [Obsolete("Use DracoDecoder.DecodeMesh instead.")] public async Task ConvertDracoMeshToUnity( Mesh.MeshData mesh, NativeArray encodedData, bool requireNormals = false, bool requireTangents = false, int weightsAttributeId = -1, int jointsAttributeId = -1, bool forceUnityLayout = false ) { return await DracoDecoder.DecodeMesh( mesh, encodedData, CreateDecodeSettings(requireNormals, requireTangents, forceUnityLayout), DracoDecoder.CreateAttributeIdMap(weightsAttributeId, jointsAttributeId) ); } DecodeSettings CreateDecodeSettings(bool requireNormals, bool requireTangents, bool forceUnityLayout) { var flags = DecodeSettings.None; if (requireNormals) flags |= DecodeSettings.RequireNormals; if (requireTangents) flags |= DecodeSettings.RequireTangents; if (forceUnityLayout) flags |= DecodeSettings.ForceUnityVertexLayout; if (m_ConvertSpace) flags |= DecodeSettings.ConvertSpace; return flags; } } }