Skip to content

Commit

Permalink
Merge pull request #46 from camnewnham/feature/encode-point-clouds
Browse files Browse the repository at this point in the history
support point cloud encoding
  • Loading branch information
atteneder authored Jan 24, 2023
2 parents 4041c67 + 44d7008 commit 655937b
Showing 1 changed file with 13 additions and 8 deletions.
21 changes: 13 additions & 8 deletions Runtime/Scripts/Encoder/DracoEncoder.cs
Original file line number Diff line number Diff line change
Expand Up @@ -178,14 +178,12 @@ public static unsafe EncodeResult[] EncodeMesh(

var submesh = mesh.GetSubMesh(submeshIndex);

if (submesh.topology != MeshTopology.Triangles) {
Debug.LogError("Only triangles are supported");
if (submesh.topology != MeshTopology.Triangles && submesh.topology != MeshTopology.Points) {
Debug.LogError($"Mesh topology {submesh.topology} is not supported");
return null;
}
var indices = mesh.GetIndices(submeshIndex);
var faceCount = indices.Length / 3;

var dracoEncoder = dracoEncoderCreate(mesh.vertexCount);
var dracoEncoder = submesh.topology == MeshTopology.Triangles ? dracoEncoderCreate(mesh.vertexCount) : dracoEncoderCreatePointCloud(mesh.vertexCount);

var attributeIds = new Dictionary<VertexAttribute, uint>();

Expand All @@ -199,9 +197,13 @@ public static unsafe EncodeResult[] EncodeMesh(
attributeIds[attribute] = dracoEncoderSetAttribute(dracoEncoder, (int) GetAttributeType(attribute), GetDataType(format), dimension, stride, baseAddr);
}

var indicesData = (IntPtr) UnsafeUtility.PinGCArrayAndGetDataAddress(indices, out var gcHandle);
dracoEncoderSetIndices(dracoEncoder, DataType.DT_UINT32, (uint) indices.Length, indicesData);
UnsafeUtility.ReleaseGCObject(gcHandle);
if (submesh.topology == MeshTopology.Triangles)
{
var indices = mesh.GetIndices(submeshIndex);
var indicesData = (IntPtr)UnsafeUtility.PinGCArrayAndGetDataAddress(indices, out var gcHandle);
dracoEncoderSetIndices(dracoEncoder, DataType.DT_UINT32, (uint)indices.Length, indicesData);
UnsafeUtility.ReleaseGCObject(gcHandle);
}

// For both encoding and decoding (0 = slow and best compression; 10 = fast)
dracoEncoderSetCompressionSpeed(dracoEncoder, Mathf.Clamp(encodingSpeed,0,10), Mathf.Clamp(decodingSpeed,0,10));
Expand Down Expand Up @@ -327,6 +329,9 @@ static unsafe int GetAttributeSize(VertexAttributeFormat format) {
[DllImport (DRACOENC_UNITY_LIB)]
static extern IntPtr dracoEncoderCreate(int vertexCount);

[DllImport(DRACOENC_UNITY_LIB)]
static extern IntPtr dracoEncoderCreatePointCloud(int vertexCount);

[DllImport (DRACOENC_UNITY_LIB)]
static extern void dracoEncoderRelease(IntPtr encoder);

Expand Down

0 comments on commit 655937b

Please sign in to comment.