MCPcopy Create free account
hub / github.com/Bloom-Engine/engine / resolve_texture

Function resolve_texture

native/watchos/src/models.rs:479–495  ·  view source on GitHub ↗

Chase a material. .index → textures[i].source → images[j] → bufferViews[k] → BIN bytes, register via crate::textures. Returns the texture handle or 0 on any missing link.

(root: &JVal, parent: &JVal, slot_name: &str, bin: &[u8])

Source from the content-addressed store, hash-verified

477/// → bufferViews[k] → BIN bytes, register via crate::textures. Returns the
478/// texture handle or 0 on any missing link.
479fn resolve_texture(root: &JVal, parent: &JVal, slot_name: &str, bin: &[u8]) -> u32 {
480 let Some(slot) = parent.get(slot_name) else { return 0 };
481 let Some(tex_idx) = slot.get("index").and_then(|v| v.num()) else { return 0 };
482 let Some(textures) = root.get("textures").and_then(|v| v.arr()) else { return 0 };
483 let Some(tex) = textures.get(tex_idx as usize) else { return 0 };
484 let Some(src_idx) = tex.get("source").and_then(|v| v.num()) else { return 0 };
485 let Some(images) = root.get("images").and_then(|v| v.arr()) else { return 0 };
486 let Some(img) = images.get(src_idx as usize) else { return 0 };
487 let Some(bv_idx) = img.get("bufferView").and_then(|v| v.num()) else { return 0 };
488 let Some(buf_views) = root.get("bufferViews").and_then(|v| v.arr()) else { return 0 };
489 let Some(bv) = buf_views.get(bv_idx as usize) else { return 0 };
490
491 let off = bv.get("byteOffset").and_then(|v| v.num()).unwrap_or(0.0) as usize;
492 let len = bv.get("byteLength").and_then(|v| v.num()).unwrap_or(0.0) as usize;
493 if off + len > bin.len() { return 0; }
494 crate::textures::register_bytes(&bin[off..off + len])
495}
496
497fn u32_le(b: &[u8], o: usize) -> u32 {
498 u32::from_le_bytes([b[o], b[o+1], b[o+2], b[o+3]])

Callers 1

parse_primitiveFunction · 0.85

Calls 4

register_bytesFunction · 0.85
numMethod · 0.80
arrMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected