Browse Source

Fixed control over MergeBuffers, fixes #196

vpenades 2 years ago
parent
commit
9e3904842e

+ 12 - 4
src/SharpGLTF.Toolkit/Geometry/Packed/PackedPrimitiveBuilder.cs

@@ -191,10 +191,18 @@ namespace SharpGLTF.Geometry
 
         public static void MergeBuffers(IEnumerable<PackedPrimitiveBuilder<TMaterial>> primitives)
         {
-            _MergeIndices(primitives);
-            _MergeStridedVertices(primitives.Where(p => p._StridedVertexType != null));
-            _MergeSequentialVertices(primitives.Where(p => p._StridedVertexType == null).Select(p => p._VertexAccessors));
-            _MergeSequentialVertices(primitives.SelectMany(p => p._MorphTargets));
+            try
+            {
+                _MergeIndices(primitives);
+                _MergeStridedVertices(primitives.Where(p => p._StridedVertexType != null));
+                _MergeSequentialVertices(primitives.Where(p => p._StridedVertexType == null).Select(p => p._VertexAccessors));
+                _MergeSequentialVertices(primitives.SelectMany(p => p._MorphTargets));
+            }
+            catch (OverflowException ex)
+            {
+                // https://github.com/vpenades/SharpGLTF/issues/196
+                throw new ArgumentException("the combined size of all the meshes exceeds the maximum capacity of the buffers, try disabling Buffers merging", ex);
+            }
         }
 
         private static void _MergeSequentialVertices(IEnumerable<MACCESSOR[]> primitives)

+ 1 - 1
src/SharpGLTF.Toolkit/Schema2/MeshExtensions.cs

@@ -84,7 +84,7 @@ namespace SharpGLTF.Schema2
                 .CreatePackedMeshes(meshBuilders, settings)
                 .ToList();
 
-            PackedMeshBuilder<TMaterial>.MergeBuffers(srcMeshes);
+            if (settings.MergeBuffers) PackedMeshBuilder<TMaterial>.MergeBuffers(srcMeshes);
 
             // create schema2 meshes