Navigation Menu

Skip to content

Commit

Permalink
Merge pull request #17 from Ziriax/master
Browse files Browse the repository at this point in the history
Can load the latest glTF sample models
  • Loading branch information
bghgary committed Jan 9, 2018
2 parents eda33f8 + 1b96c49 commit 5b5dbde
Showing 1 changed file with 16 additions and 11 deletions.
27 changes: 16 additions & 11 deletions glTFLoader/Interface.cs
Expand Up @@ -16,6 +16,8 @@ public static class Interface
const uint CHUNKBIN = 0x004E4942;

const string EMBEDDEDOCTETSTREAM = "data:application/octet-stream;base64,";
const string EMBEDDEDGLTFBUFFER = "data:application/gltf-buffer;base64,";

const string EMBEDDEDPNG = "data:image/png;base64,";
const string EMBEDDEDJPEG = "data:image/jpeg;base64,";

Expand Down Expand Up @@ -49,7 +51,7 @@ public static Gltf LoadModel(Stream stream)
magic |= (uint)stream.ReadByte() << 16;
magic |= (uint)stream.ReadByte() << 24;

if (magic == GLTFHEADER) binaryFile = true;
if (magic == GLTFHEADER) binaryFile = true;

stream.Position = 0; // restart read position

Expand Down Expand Up @@ -227,17 +229,20 @@ public static Byte[] LoadBinaryBuffer(this Gltf model, int bufferIndex, Func<str
return bufferData;
}

private static Byte[] LoadBinaryBufferUnchecked(Schema.Buffer buffer, Func<string, Byte[]> externalReferenceSolver)
private static Byte[] TryLoadBase64BinaryBufferUnchecked(Schema.Buffer buffer, string prefix)
{
if (buffer.Uri == null) return externalReferenceSolver(null);
if (buffer.Uri == null || !buffer.Uri.StartsWith(prefix, StringComparison.OrdinalIgnoreCase))
return null;

if (buffer.Uri.StartsWith(EMBEDDEDOCTETSTREAM))
{
var content = buffer.Uri.Substring(EMBEDDEDOCTETSTREAM.Length);
return Convert.FromBase64String(content);
}
var content = buffer.Uri.Substring(prefix.Length);
return Convert.FromBase64String(content);
}

return externalReferenceSolver(buffer.Uri);
private static Byte[] LoadBinaryBufferUnchecked(Schema.Buffer buffer, Func<string, Byte[]> externalReferenceSolver)
{
return TryLoadBase64BinaryBufferUnchecked(buffer, EMBEDDEDGLTFBUFFER)
?? TryLoadBase64BinaryBufferUnchecked(buffer, EMBEDDEDOCTETSTREAM)
?? externalReferenceSolver(buffer?.Uri);
}

/// <summary>
Expand Down Expand Up @@ -387,11 +392,11 @@ public static void SaveBinaryModel(this Gltf model, byte[] buffer, BinaryWriter
var b = model.Buffers[0];

if (b.ByteLength > buffer.Length) throw new ArgumentException($"{nameof(buffer)} byte size is smaller than declared");
if ((buffer.Length- b.ByteLength) > 3 ) throw new ArgumentException($"{nameof(buffer)} byte size is larger than declared");
if ((buffer.Length - b.ByteLength) > 3) throw new ArgumentException($"{nameof(buffer)} byte size is larger than declared");
}

if (brefcount == 0 && buffer != null)
throw new ArgumentNullException($"{nameof(buffer)} must be null");
throw new ArgumentNullException($"{nameof(buffer)} must be null");


var jsonText = JsonConvert.SerializeObject(model, Formatting.None);
Expand Down

0 comments on commit 5b5dbde

Please sign in to comment.