Parcourir la source

Added a MergeBuffers flag (enabled by default) in SceneBuilder to merge buffers after converting to glTF. This will reduce pressure when saving some files because it will not require an internal deep clone.

Vicente Penades il y a 3 ans
Parent
commit
ff85f0ac53
1 fichiers modifiés avec 13 ajouts et 3 suppressions
  1. 13 3
      src/SharpGLTF.Toolkit/Scenes/SceneBuilder.Schema2.cs

+ 13 - 3
src/SharpGLTF.Toolkit/Scenes/SceneBuilder.Schema2.cs

@@ -22,15 +22,17 @@ namespace SharpGLTF.Scenes
         {
         {
             UseStridedBuffers = true,
             UseStridedBuffers = true,
             CompactVertexWeights = false,
             CompactVertexWeights = false,
-            GpuMeshInstancingMinCount = int.MaxValue
+            GpuMeshInstancingMinCount = int.MaxValue,
+            MergeBuffers = true
         };
         };
 
 
         public static SceneBuilderSchema2Settings WithGpuInstancing => new SceneBuilderSchema2Settings
         public static SceneBuilderSchema2Settings WithGpuInstancing => new SceneBuilderSchema2Settings
         {
         {
             UseStridedBuffers = true,
             UseStridedBuffers = true,
             CompactVertexWeights = false,
             CompactVertexWeights = false,
-            GpuMeshInstancingMinCount = 3
-        };
+            GpuMeshInstancingMinCount = 3,
+            MergeBuffers = true
+        };        
 
 
         /// <summary>
         /// <summary>
         /// When true, meshes will be created using strided vertices when possible.
         /// When true, meshes will be created using strided vertices when possible.
@@ -60,6 +62,12 @@ namespace SharpGLTF.Scenes
         /// </para>
         /// </para>
         /// </remarks>
         /// </remarks>
         public int GpuMeshInstancingMinCount { get; set; }
         public int GpuMeshInstancingMinCount { get; set; }
+
+        /// <summary>
+        /// Merges all the Buffer objects into a single big buffer.<br/>
+        /// Default value is TRUE.
+        /// </summary>
+        public bool MergeBuffers { get; set; }
     }
     }
 
 
     public partial class SceneBuilder : IConvertibleToGltf2
     public partial class SceneBuilder : IConvertibleToGltf2
@@ -111,6 +119,8 @@ namespace SharpGLTF.Scenes
 
 
             dstModel.DefaultScene = dstModel.LogicalScenes[0];
             dstModel.DefaultScene = dstModel.LogicalScenes[0];
 
 
+            if (settings.MergeBuffers) dstModel.MergeBuffers();
+
             return dstModel;
             return dstModel;
         }
         }