Skip to content

Commit

Permalink
Fix MIME type support for glTF buffer Data URIs (pipelined) (#3106)
Browse files Browse the repository at this point in the history
Apply #3101 on top of the `pipelined-rendering` branch, as requested by @cart in #3101 (comment)

# Objective

- The glTF 2.0 spec requires that Data URIs use one of two valid MIME types. `bevy_gltf2` only supports one of these.
- See:
  - https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#_media_type_registrations
  - https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#file-extensions-and-media-types
  - https://www.khronos.org/registry/glTF/specs/2.0/glTF-2.0.html#binary-data-storage

> Buffer data **MAY** alternatively be embedded in the glTF file via `data:` URI with base64 encoding. When `data:` URI is used for buffer storage, its mediatype field **MUST** be set to `application/octet-stream` or `application/gltf-buffer`.

(Emphasis in original.)

## Solution

- Check for both MIME types.
  • Loading branch information
parasyte committed Nov 11, 2021
1 parent db35ffb commit e375add
Showing 1 changed file with 4 additions and 2 deletions.
6 changes: 4 additions & 2 deletions pipelined/bevy_gltf2/src/loader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,7 @@ async fn load_buffers(
load_context: &LoadContext<'_>,
asset_path: &Path,
) -> Result<Vec<Vec<u8>>, GltfError> {
const OCTET_STREAM_URI: &str = "application/octet-stream";
const VALID_MIME_TYPES: &[&str] = &["application/octet-stream", "application/gltf-buffer"];

let mut buffer_data = Vec::new();
for buffer in gltf.buffers() {
Expand All @@ -665,7 +665,9 @@ async fn load_buffers(
.unwrap();
let uri = uri.as_ref();
let buffer_bytes = match DataUri::parse(uri) {
Ok(data_uri) if data_uri.mime_type == OCTET_STREAM_URI => data_uri.decode()?,
Ok(data_uri) if VALID_MIME_TYPES.contains(&data_uri.mime_type) => {
data_uri.decode()?
}
Ok(_) => return Err(GltfError::BufferFormatUnsupported),
Err(()) => {
// TODO: Remove this and add dep
Expand Down

0 comments on commit e375add

Please sign in to comment.