// 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;
}
}
}