diff --git a/src/Runtime/Ghost.Graphics/Clod.cs b/src/Runtime/Ghost.Graphics/Clod.cs deleted file mode 100644 index 8d78a36..0000000 --- a/src/Runtime/Ghost.Graphics/Clod.cs +++ /dev/null @@ -1,143 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using Ghost.MeshOptimizer; - -namespace Ghost.Clod; - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct ClodConfig -{ - public nuint MaxVertices; - public nuint MinTriangles; - public nuint MaxTriangles; - - public bool PartitionSpatial; - public bool PartitionSort; - public nuint PartitionSize; - - public bool ClusterSpatial; - public float ClusterFillWeight; - public float ClusterSplitFactor; - - public float SimplifyRatio; - public float SimplifyThreshold; - - public float SimplifyErrorMergePrevious; - public float SimplifyErrorMergeAdditive; - - public float SimplifyErrorFactorSloppy; - - public float SimplifyErrorEdgeLimit; - - public bool SimplifyPermissive; - - public bool SimplifyFallbackPermissive; - public bool SimplifyFallbackSloppy; - - public bool SimplifyRegularize; - - public bool OptimizeBounds; - - public bool OptimizeClusters; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct ClodMesh -{ - public uint* Indices; - public nuint IndexCount; - - public nuint VertexCount; - - public float* VertexPositions; - public nuint VertexPositionsStride; - - public float* VertexAttributes; - public nuint VertexAttributesStride; - - public byte* VertexLock; - - public float* AttributeWeights; - public nuint AttributeCount; - - public uint AttributeProtectMask; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct ClodBounds -{ - public fixed float Center[3]; - public float Radius; - public float Error; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct ClodCluster -{ - public int Refined; - public ClodBounds Bounds; - public uint* Indices; - public nuint IndexCount; - public nuint VertexCount; -} - -[StructLayout(LayoutKind.Sequential)] -public unsafe struct ClodGroup -{ - public int Depth; - public ClodBounds Simplified; -} - -public unsafe delegate int ClodOutputDelegate(void* outputContext, ClodGroup group, ClodCluster* clusters, nuint clusterCount); - -public unsafe static class Clod -{ - public static ClodConfig ClodDefaultConfig(nuint maxTriangles) - { - // assert(max_triangles >= 4 && max_triangles <= 256); - ClodConfig config = new ClodConfig(); - config.MaxVertices = maxTriangles; - config.MinTriangles = maxTriangles / 3; - config.MaxTriangles = maxTriangles; - - // Alignment note: implementation had MESHOPTIMIZER_VERSION < 1000 check. Assuming modern. - - config.PartitionSpatial = true; - config.PartitionSize = 16; - - config.ClusterSpatial = false; - config.ClusterSplitFactor = 2.0f; - - config.OptimizeClusters = true; - - config.SimplifyRatio = 0.5f; - config.SimplifyThreshold = 0.85f; - config.SimplifyErrorMergePrevious = 1.0f; - config.SimplifyErrorFactorSloppy = 2.0f; - config.SimplifyPermissive = true; - config.SimplifyFallbackPermissive = false; - config.SimplifyFallbackSloppy = true; - - return config; - } - - public static ClodConfig ClodDefaultConfigRT(nuint maxTriangles) - { - ClodConfig config = ClodDefaultConfig(maxTriangles); - - config.MinTriangles = maxTriangles / 4; - config.MaxVertices = Math.Min((nuint)256, maxTriangles * 2); - - config.ClusterSpatial = true; - config.ClusterFillWeight = 0.5f; - - return config; - } - - // clodBuild translation would go here, involving the implementation logic. - // Given the complexity of the full implementation (std::vector, etc.), I will continue - // implementing the translation logic iteratively or request for a multi-file approach if needed. - // For now, these structs and headers provide the foundational API mapping requested. -}