From f10973aed69ce164fdc63cba6558a5ecdd8a6d74 Mon Sep 17 00:00:00 2001 From: JoeTwizzle Date: Fri, 23 Oct 2026 21:36:22 +0200 Subject: [PATCH] Add stream open to bufferview & image --- ReFuel.Gltf/GltfBufferView.cs | 8 +++++++- ReFuel.Gltf/GltfImage.cs | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ReFuel.Gltf/GltfBufferView.cs b/ReFuel.Gltf/GltfBufferView.cs index fa2621b..5bb1365 100755 --- a/ReFuel.Gltf/GltfBufferView.cs +++ b/ReFuel.Gltf/GltfBufferView.cs @@ -1,4 +1,5 @@ -using System; +using ReFuel.Gltf.IO; +using System; using System.Text.Json; namespace ReFuel.Gltf @@ -26,6 +27,11 @@ namespace ReFuel.Gltf buffer = new GltfSmartId(document.Buffers); } + public Stream Open() + { + return ((StreamWrapper)buffer.Value.Open()).ForkAbs(ByteOffset, ByteOffset + ByteLength); + } + internal override void Deserialize(JsonElement element) { AssertObject(element); diff --git a/ReFuel.Gltf/GltfImage.cs b/ReFuel.Gltf/GltfImage.cs index a73c251..53f1da8 100644 --- a/ReFuel.Gltf/GltfImage.cs +++ b/ReFuel.Gltf/GltfImage.cs @@ -39,7 +39,7 @@ namespace ReFuel.Gltf { if (Uri == null) { - throw new Exception("Only images with a URI property are to be opened."); + return BufferView!.Open(); } if (Uri.IsAbsoluteUri) @@ -64,9 +64,13 @@ namespace ReFuel.Gltf // otherwise if (provider != null) + { return provider.OpenFile(pwd, Uri) ?? throw new FileNotFoundException(Uri.ToString()); + } else + { return File.OpenRead(Path.Combine(pwd ?? string.Empty, Uri.LocalPath)); + } // throw new Exception("Unrecognized URI scheme."); } @@ -74,7 +78,9 @@ namespace ReFuel.Gltf internal override void Deserialize(JsonElement element) { if (element.ValueKind != JsonValueKind.Object) + { throw new Exception("Expected a JSON object for glTF image node."); + } foreach (JsonProperty property in element.EnumerateObject()) {