Browse Source

Added new methods to create buffers and bufferviews instead of trying to reuse existing ones.

Vicente Penades 5 years ago
parent
commit
cfc96e6fec

+ 4 - 4
src/SharpGLTF.Core/Schema2/gltf.AnimationSampler.cs

@@ -103,7 +103,7 @@ namespace SharpGLTF.Schema2
         {
             var root = LogicalParent.LogicalParent;
 
-            var buffer = root.UseBufferView(new Byte[input.Count * 4]);
+            var buffer = root.CreateBufferView(input.Count * 4);
             var accessor = root.CreateAccessor("Animation.Input");
 
             accessor.SetData(buffer, 0, input.Count, DimensionType.SCALAR, EncodingType.FLOAT, false);
@@ -119,7 +119,7 @@ namespace SharpGLTF.Schema2
         {
             var root = LogicalParent.LogicalParent;
 
-            var buffer = root.UseBufferView(new Byte[output.Count * 4 * 3]);
+            var buffer = root.CreateBufferView(output.Count * 4 * 3);
 
             System.Diagnostics.Debug.Assert(buffer.ByteStride == 0);
 
@@ -138,7 +138,7 @@ namespace SharpGLTF.Schema2
         {
             var root = LogicalParent.LogicalParent;
 
-            var buffer = root.UseBufferView(new Byte[output.Count * 4 * 4]);
+            var buffer = root.CreateBufferView(output.Count * 4 * 4);
             var accessor = root.CreateAccessor("Animation.Output");
 
             accessor.SetData(buffer, 0, output.Count, DimensionType.VEC4, EncodingType.FLOAT, false);
@@ -154,7 +154,7 @@ namespace SharpGLTF.Schema2
         {
             var root = LogicalParent.LogicalParent;
 
-            var buffer = root.UseBufferView(new Byte[output.Count * 4 * expandedCount]);
+            var buffer = root.CreateBufferView(output.Count * 4 * expandedCount);
             var accessor = root.CreateAccessor("Animation.Output");
 
             accessor.SetData(buffer, 0, output.Count * expandedCount, DimensionType.SCALAR, EncodingType.FLOAT, false);

+ 13 - 0
src/SharpGLTF.Core/Schema2/gltf.BufferView.cs

@@ -267,6 +267,19 @@ namespace SharpGLTF.Schema2
 
     public partial class ModelRoot
     {
+        public BufferView CreateBufferView(int byteSize, int byteStride = 0, BufferMode? target = null)
+        {
+            Guard.MustBeGreaterThan(byteSize, 0, nameof(byteSize));
+
+            var buffer = CreateBuffer(byteSize);
+
+            var buffView = new BufferView(buffer, 0, null, byteStride, target);
+
+            this._bufferViews.Add(buffView);
+
+            return buffView;
+        }
+
         /// <summary>
         /// Creates or reuses a <see cref="BufferView"/> instance
         /// at <see cref="ModelRoot.LogicalBufferViews"/>.

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

@@ -123,7 +123,7 @@ namespace SharpGLTF.Schema2
             var root = primitive.LogicalParent.LogicalParent;
 
             // create an index buffer and fill it
-            var view = root.UseBufferView(new Byte[4 * values.Count], 0, null, 0, BufferMode.ELEMENT_ARRAY_BUFFER);
+            var view = root.CreateBufferView(4 * values.Count, 0, BufferMode.ELEMENT_ARRAY_BUFFER);
             var array = new IntegerArray(view.Content);
             array.Fill(values);
 
@@ -145,7 +145,7 @@ namespace SharpGLTF.Schema2
             var root = primitive.LogicalParent.LogicalParent;
 
             // create a vertex buffer and fill it
-            var view = root.UseBufferView(new Byte[4 * values.Count], 0, null, 0, BufferMode.ARRAY_BUFFER);
+            var view = root.CreateBufferView(4 * values.Count, 0, BufferMode.ARRAY_BUFFER);
             var array = new ScalarArray(view.Content);
             array.Fill(values);
 
@@ -165,7 +165,7 @@ namespace SharpGLTF.Schema2
             var root = primitive.LogicalParent.LogicalParent;
 
             // create a vertex buffer and fill it
-            var view = root.UseBufferView(new Byte[8 * values.Count], 0, null, 0, BufferMode.ARRAY_BUFFER);
+            var view = root.CreateBufferView(8 * values.Count, 0, BufferMode.ARRAY_BUFFER);
             var array = new Vector2Array(view.Content);
             array.Fill(values);
 
@@ -185,7 +185,7 @@ namespace SharpGLTF.Schema2
             var root = primitive.LogicalParent.LogicalParent;
 
             // create a vertex buffer and fill it
-            var view = root.UseBufferView(new Byte[12 * values.Count], 0, null, 0, BufferMode.ARRAY_BUFFER);
+            var view = root.CreateBufferView(12 * values.Count, 0, BufferMode.ARRAY_BUFFER);
             var array = new Vector3Array(view.Content);
             array.Fill(values);
 
@@ -206,7 +206,7 @@ namespace SharpGLTF.Schema2
             var root = primitive.LogicalParent.LogicalParent;
 
             // create a vertex buffer and fill it
-            var view = root.UseBufferView(new Byte[16 * values.Count], 0, null, 0, BufferMode.ARRAY_BUFFER);
+            var view = root.CreateBufferView(16 * values.Count, 0, BufferMode.ARRAY_BUFFER);
             var array = new Vector4Array(view.Content);
             array.Fill(values);