length
This commit is contained in:
60
gltf.cm
60
gltf.cm
@@ -24,7 +24,7 @@ function join_paths(base, rel) {
|
||||
}
|
||||
|
||||
function ends_with(path, suffix) {
|
||||
return path.length >= suffix.length && text(path, path.length - suffix.length) == suffix
|
||||
return length(path) >= length(suffix) && text(path, length(path) - length(suffix)) == suffix
|
||||
}
|
||||
|
||||
function spaces(count) {
|
||||
@@ -60,10 +60,10 @@ function parse_data_uri(uri) {
|
||||
var mime = "text/plain"
|
||||
var is_base64 = false
|
||||
|
||||
if (meta.length > 0) {
|
||||
if (length(meta) > 0) {
|
||||
var parts = array(meta, ";")
|
||||
if (parts[0]) mime = parts[0]
|
||||
for (var i = 1; i < parts.length; i++) {
|
||||
for (var i = 1; i < length(parts); i++) {
|
||||
if (parts[i]) == "base64") is_base64 = true
|
||||
}
|
||||
}
|
||||
@@ -127,8 +127,8 @@ function make_glb_from_json_and_bin(doc, bin_blob) {
|
||||
var json_text = json.encode(doc, null, 0)
|
||||
var json_blob = blob(json_text)
|
||||
|
||||
var json_bytes = json_blob.length / 8
|
||||
var bin_bytes = bin_blob.length / 8
|
||||
var json_bytes = length(json_blob) / 8
|
||||
var bin_bytes = length(bin_blob) / 8
|
||||
|
||||
var json_pad = (4 - (json_bytes % 4)) % 4
|
||||
var bin_pad = (4 - (bin_bytes % 4)) % 4
|
||||
@@ -162,7 +162,7 @@ function make_glb_from_json_and_bin(doc, bin_blob) {
|
||||
|
||||
function ensure_image_slots(asset) {
|
||||
if (!asset.images) asset.images = []
|
||||
for (var i = 0; i < asset.images.length; i++) {
|
||||
for (var i = 0; i < length(asset.images); i++) {
|
||||
var im = asset.images[i]
|
||||
if (!im) continue
|
||||
if (im.encoded == null) im.encoded = null
|
||||
@@ -171,8 +171,8 @@ function ensure_image_slots(asset) {
|
||||
}
|
||||
|
||||
function synthesize_glb_from_gltf_json(doc, base_dir, uri_loader) {
|
||||
if (!doc.buffers || doc.buffers.length == 0) throw Error("gltf: .gltf has no buffers")
|
||||
if (doc.buffers.length != 1) throw Error("gltf: only .gltf with exactly 1 buffer is supported")
|
||||
if (!doc.buffers || length(doc.buffers) == 0) throw Error("gltf: .gltf has no buffers")
|
||||
if (length(doc.buffers) != 1) throw Error("gltf: only .gltf with exactly 1 buffer is supported")
|
||||
|
||||
var uri = doc.buffers[0].uri
|
||||
if (!uri) throw Error("gltf: buffer[0] has no uri")
|
||||
@@ -274,7 +274,7 @@ function used_texture_indices(asset) {
|
||||
used[ti.texture] = true
|
||||
}
|
||||
|
||||
for (var i = 0; i < mats.length; i++) {
|
||||
for (var i = 0; i < length(mats); i++) {
|
||||
var m = mats[i]
|
||||
if (!m) continue
|
||||
if (m.pbr) {
|
||||
@@ -333,14 +333,14 @@ gltf.collect_dependencies = function(asset) {
|
||||
if (!doc) return deps
|
||||
|
||||
if (doc.buffers) {
|
||||
for (var i = 0; i < doc.buffers.length; i++) {
|
||||
for (var i = 0; i < length(doc.buffers); i++) {
|
||||
var b = doc.buffers[i]
|
||||
if (b && b.uri) deps.buffers.push(b.uri)
|
||||
}
|
||||
}
|
||||
|
||||
if (doc.images) {
|
||||
for (var i = 0; i < doc.images.length; i++) {
|
||||
for (var i = 0; i < length(doc.images); i++) {
|
||||
var im = doc.images[i]
|
||||
if (im && im.uri) deps.images.push(im.uri)
|
||||
}
|
||||
@@ -375,7 +375,7 @@ gltf.pull_images = function(asset, opts) {
|
||||
var cache = {}
|
||||
var total = 0
|
||||
|
||||
for (var i = 0; i < asset.images.length; i++) {
|
||||
for (var i = 0; i < length(asset.images); i++) {
|
||||
if (used && !used[i]) continue
|
||||
var img = asset.images[i]
|
||||
if (!img) continue
|
||||
@@ -389,7 +389,7 @@ gltf.pull_images = function(asset, opts) {
|
||||
continue
|
||||
}
|
||||
img.encoded = encoded
|
||||
total += encoded.length / 8
|
||||
total += length(encoded) / 8
|
||||
continue
|
||||
}
|
||||
|
||||
@@ -411,7 +411,7 @@ gltf.pull_images = function(asset, opts) {
|
||||
if (!stone.p(encoded)) stone(encoded)
|
||||
img.encoded = encoded
|
||||
if (dedupe) cache[key] = encoded
|
||||
total += encoded.length / 8
|
||||
total += length(encoded) / 8
|
||||
if (max_total_bytes > 0 && total > max_total_bytes) throw Error("max_total_bytes exceeded")
|
||||
} catch (e) {
|
||||
if (on_missing == "throw") throw e
|
||||
@@ -436,7 +436,7 @@ function guess_mime(img) {
|
||||
|
||||
function premultiply_rgba(pixels_blob) {
|
||||
if (!stone.p(pixels_blob)) stone(pixels_blob)
|
||||
var bytes = pixels_blob.length / 8
|
||||
var bytes = length(pixels_blob) / 8
|
||||
var out = blob(bytes * 8)
|
||||
for (var i = 0; i < bytes; i += 4) {
|
||||
var r = pixels_blob.read_fit((i + 0) * 8, 8)
|
||||
@@ -486,7 +486,7 @@ gltf.decode_images = function(asset, opts) {
|
||||
var used = null
|
||||
if (mode == "used") used = used_image_indices(asset)
|
||||
|
||||
for (var i = 0; i < asset.images.length; i++) {
|
||||
for (var i = 0; i < length(asset.images); i++) {
|
||||
if (used && !used[i]) continue
|
||||
var img = asset.images[i]
|
||||
if (!img) continue
|
||||
@@ -527,7 +527,7 @@ gltf.drop_images = function(asset, what) {
|
||||
if (what == null) what = "all"
|
||||
ensure_image_slots(asset)
|
||||
|
||||
for (var i = 0; i < asset.images.length; i++) {
|
||||
for (var i = 0; i < length(asset.images); i++) {
|
||||
var img = asset.images[i]
|
||||
if (!img) continue
|
||||
if (what == "encoded" || what == "all") img.encoded = null
|
||||
@@ -539,37 +539,37 @@ gltf.drop_images = function(asset, what) {
|
||||
|
||||
gltf.stats = function(asset) {
|
||||
var stats = {
|
||||
meshes: (asset.meshes ? asset.meshes.length : 0),
|
||||
nodes: (asset.nodes ? asset.nodes.length : 0),
|
||||
images: (asset.images ? asset.images.length : 0),
|
||||
textures: (asset.textures ? asset.textures.length : 0),
|
||||
materials: (asset.materials ? asset.materials.length : 0),
|
||||
animations: (asset.animations ? asset.animations.length : 0),
|
||||
skins: (asset.skins ? asset.skins.length : 0),
|
||||
meshes: (asset.meshes ? length(asset.meshes) : 0),
|
||||
nodes: (asset.nodes ? length(asset.nodes) : 0),
|
||||
images: (asset.images ? length(asset.images) : 0),
|
||||
textures: (asset.textures ? length(asset.textures) : 0),
|
||||
materials: (asset.materials ? length(asset.materials) : 0),
|
||||
animations: (asset.animations ? length(asset.animations) : 0),
|
||||
skins: (asset.skins ? length(asset.skins) : 0),
|
||||
bin_bytes: 0,
|
||||
encoded_image_bytes: 0,
|
||||
triangles: 0
|
||||
}
|
||||
|
||||
if (asset.buffers) {
|
||||
for (var i = 0; i < asset.buffers.length; i++) {
|
||||
for (var i = 0; i < length(asset.buffers); i++) {
|
||||
var b = asset.buffers[i]
|
||||
if (b && b.blob) stats.bin_bytes += b.blob.length / 8
|
||||
if (b && b.blob) stats.bin_bytes += length(b.blob) / 8
|
||||
}
|
||||
}
|
||||
|
||||
if (asset.images) {
|
||||
for (var i = 0; i < asset.images.length; i++) {
|
||||
for (var i = 0; i < length(asset.images); i++) {
|
||||
var im = asset.images[i]
|
||||
if (im && im.encoded) stats.encoded_image_bytes += im.encoded.length / 8
|
||||
if (im && im.encoded) stats.encoded_image_bytes += length(im.encoded) / 8
|
||||
}
|
||||
}
|
||||
|
||||
if (asset.meshes) {
|
||||
for (var mi = 0; mi < asset.meshes.length; mi++) {
|
||||
for (var mi = 0; mi < length(asset.meshes); mi++) {
|
||||
var m = asset.meshes[mi]
|
||||
if (!m || !m.primitives) continue
|
||||
for (var pi = 0; pi < m.primitives.length; pi++) {
|
||||
for (var pi = 0; pi < length(m.primitives); pi++) {
|
||||
var p = m.primitives[pi]
|
||||
if (!p) continue
|
||||
if (p.topology != "triangles") continue
|
||||
|
||||
@@ -3,7 +3,7 @@ var obj = use('obj')
|
||||
var fbx = use('fbx')
|
||||
var fs = use('cellfs')
|
||||
|
||||
if (args.length < 1) {
|
||||
if (length(args) < 1) {
|
||||
log.console("Usage: cell run tests/readout.ce <model_file>")
|
||||
log.console("Supported formats: .gltf, .glb, .obj, .fbx")
|
||||
$stop()
|
||||
@@ -33,11 +33,11 @@ if (ext == '.gltf' || ext == '.glb') {
|
||||
}
|
||||
|
||||
def print_array = function(arr, indent) {
|
||||
if (!arr || arr.length == 0) {
|
||||
if (!arr || length(arr) == 0) {
|
||||
log.console(`${indent}(empty)`)
|
||||
return
|
||||
}
|
||||
for (var i = 0; i < arr.length; i++) {
|
||||
for (var i = 0; i < length(arr); i++) {
|
||||
var item = arr[i]
|
||||
if (is_object(item)) {
|
||||
log.console(`${indent}[${i}]:`)
|
||||
@@ -51,22 +51,22 @@ def print_array = function(arr, indent) {
|
||||
def print_object = function(obj, indent) {
|
||||
if (!indent) indent = ""
|
||||
var keys = array(obj)
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
for (var i = 0; i < length(keys); i++) {
|
||||
var key = keys[i]
|
||||
var val = obj[key]
|
||||
if (val == null) {
|
||||
log.console(`${indent}${key}: null`)
|
||||
} else if (val.constructor && val.constructor.name == 'Blob') {
|
||||
log.console(`${indent}${key}: <Blob ${val.length} bytes>`)
|
||||
log.console(`${indent}${key}: <Blob ${length(val)} bytes>`)
|
||||
} else if (is_array(val)) {
|
||||
if (val.length == 0) {
|
||||
if (length(val) == 0) {
|
||||
log.console(`${indent}${key}: []`)
|
||||
} else if (val.length <= 4 && !is_object(val[0])) {
|
||||
} else if (length(val) <= 4 && !is_object(val[0])) {
|
||||
log.console(`${indent}${key}: [${text(val, ', ')}]`)
|
||||
} else if (!is_object(val[0])) {
|
||||
log.console(`${indent}${key}: [${text(array(val, 0, 4), ', ')}...] (${val.length} items)`)
|
||||
log.console(`${indent}${key}: [${text(array(val, 0, 4), ', ')}...] (${length(val)} items)`)
|
||||
} else {
|
||||
log.console(`${indent}${key}: (${val.length} items)`)
|
||||
log.console(`${indent}${key}: (${length(val)} items)`)
|
||||
print_array(val, indent + " ")
|
||||
}
|
||||
} else {
|
||||
@@ -81,40 +81,40 @@ def print_object = function(obj, indent) {
|
||||
|
||||
log.console(`\n=== Model Structure: ${filepath} ===\n`)
|
||||
|
||||
log.console(`Buffers: ${model.buffers.length}`)
|
||||
for (var i = 0; i < model.buffers.length; i++) {
|
||||
log.console(`Buffers: ${length(model.buffers)}`)
|
||||
for (var i = 0; i < length(model.buffers); i++) {
|
||||
var buf = model.buffers[i]
|
||||
log.console(` [${i}] byte_length: ${buf.byte_length}`)
|
||||
}
|
||||
|
||||
log.console(`\nViews: ${model.views.length}`)
|
||||
for (var i = 0; i < model.views.length; i++) {
|
||||
log.console(`\nViews: ${length(model.views)}`)
|
||||
for (var i = 0; i < length(model.views); i++) {
|
||||
var v = model.views[i]
|
||||
log.console(` [${i}] buffer: ${v.buffer}, offset: ${v.byte_offset}, length: ${v.byte_length}, stride: ${v.byte_stride}, usage: ${v.usage}`)
|
||||
}
|
||||
|
||||
log.console(`\nAccessors: ${model.accessors.length}`)
|
||||
for (var i = 0; i < model.accessors.length; i++) {
|
||||
log.console(`\nAccessors: ${length(model.accessors)}`)
|
||||
for (var i = 0; i < length(model.accessors); i++) {
|
||||
var a = model.accessors[i]
|
||||
log.console(` [${i}] view: ${a.view}, offset: ${a.byte_offset}, count: ${a.count}, type: ${a.component_type}/${a.type}, normalized: ${a.normalized}`)
|
||||
}
|
||||
|
||||
log.console(`\nMeshes: ${model.meshes.length}`)
|
||||
for (var i = 0; i < model.meshes.length; i++) {
|
||||
log.console(`\nMeshes: ${length(model.meshes)}`)
|
||||
for (var i = 0; i < length(model.meshes); i++) {
|
||||
var m = model.meshes[i]
|
||||
log.console(` [${i}] name: ${m.name}`)
|
||||
for (var j = 0; j < m.primitives.length; j++) {
|
||||
for (var j = 0; j < length(m.primitives); j++) {
|
||||
var p = m.primitives[j]
|
||||
log.console(` primitive[${j}]: topology: ${p.topology}, indices: ${p.indices}, material: ${p.material}`)
|
||||
var ak = array(p.attributes)
|
||||
var parts = []
|
||||
for (var k = 0; k < ak.length; k++) parts.push(ak[k] + ': ' + text(p.attributes[ak[k]]))
|
||||
for (var k = 0; k < length(ak); k++) parts.push(ak[k] + ': ' + text(p.attributes[ak[k]]))
|
||||
log.console(' attributes: {' + text(parts, ', ') + '}')
|
||||
}
|
||||
}
|
||||
|
||||
log.console(`\nMaterials: ${model.materials.length}`)
|
||||
for (var i = 0; i < model.materials.length; i++) {
|
||||
log.console(`\nMaterials: ${length(model.materials)}`)
|
||||
for (var i = 0; i < length(model.materials); i++) {
|
||||
var m = model.materials[i]
|
||||
log.console(` [${i}] name: ${m.name}, alpha_mode: ${m.alpha_mode}, double_sided: ${m.double_sided}`)
|
||||
if (m.pbr) {
|
||||
@@ -122,26 +122,26 @@ for (var i = 0; i < model.materials.length; i++) {
|
||||
}
|
||||
}
|
||||
|
||||
log.console(`\nImages: ${model.images.length}`)
|
||||
for (var i = 0; i < model.images.length; i++) {
|
||||
log.console(`\nImages: ${length(model.images)}`)
|
||||
for (var i = 0; i < length(model.images); i++) {
|
||||
var im = model.images[i]
|
||||
log.console(` [${i}] kind: ${im.kind}, ${im.kind == 'uri' ? 'uri: ' + im.uri : 'view: ' + im.view}, mime: ${im.mime}`)
|
||||
}
|
||||
|
||||
log.console(`\nTextures: ${model.textures.length}`)
|
||||
for (var i = 0; i < model.textures.length; i++) {
|
||||
log.console(`\nTextures: ${length(model.textures)}`)
|
||||
for (var i = 0; i < length(model.textures); i++) {
|
||||
var t = model.textures[i]
|
||||
log.console(` [${i}] image: ${t.image}, sampler: ${t.sampler}`)
|
||||
}
|
||||
|
||||
log.console(`\nSamplers: ${model.samplers.length}`)
|
||||
for (var i = 0; i < model.samplers.length; i++) {
|
||||
log.console(`\nSamplers: ${length(model.samplers)}`)
|
||||
for (var i = 0; i < length(model.samplers); i++) {
|
||||
var s = model.samplers[i]
|
||||
log.console(` [${i}] min: ${s.min_filter}, mag: ${s.mag_filter}, wrap_s: ${s.wrap_s}, wrap_t: ${s.wrap_t}`)
|
||||
}
|
||||
|
||||
log.console(`\nNodes: ${model.nodes.length}`)
|
||||
for (var i = 0; i < model.nodes.length; i++) {
|
||||
log.console(`\nNodes: ${length(model.nodes)}`)
|
||||
for (var i = 0; i < length(model.nodes); i++) {
|
||||
var n = model.nodes[i]
|
||||
log.console(` [${i}] name: ${n.name}, mesh: ${n.mesh}, children: [${n.children}], skin: ${n.skin}`)
|
||||
if (n.matrix) {
|
||||
@@ -151,22 +151,22 @@ for (var i = 0; i < model.nodes.length; i++) {
|
||||
}
|
||||
}
|
||||
|
||||
log.console(`\nScenes: ${model.scenes.length}, default: ${model.scene}`)
|
||||
for (var i = 0; i < model.scenes.length; i++) {
|
||||
log.console(`\nScenes: ${length(model.scenes)}, default: ${model.scene}`)
|
||||
for (var i = 0; i < length(model.scenes); i++) {
|
||||
var s = model.scenes[i]
|
||||
log.console(` [${i}] nodes: [${s.nodes}]`)
|
||||
}
|
||||
|
||||
log.console(`\nAnimations: ${model.animations.length}`)
|
||||
for (var i = 0; i < model.animations.length; i++) {
|
||||
log.console(`\nAnimations: ${length(model.animations)}`)
|
||||
for (var i = 0; i < length(model.animations); i++) {
|
||||
var a = model.animations[i]
|
||||
log.console(` [${i}] name: ${a.name}, samplers: ${a.samplers.length}, channels: ${a.channels.length}`)
|
||||
log.console(` [${i}] name: ${a.name}, samplers: ${length(a.samplers)}, channels: ${length(a.channels)}`)
|
||||
}
|
||||
|
||||
log.console(`\nSkins: ${model.skins.length}`)
|
||||
for (var i = 0; i < model.skins.length; i++) {
|
||||
log.console(`\nSkins: ${length(model.skins)}`)
|
||||
for (var i = 0; i < length(model.skins); i++) {
|
||||
var s = model.skins[i]
|
||||
log.console(` [${i}] name: ${s.name}, joints: ${s.joints.length}, ibm: ${s.inverse_bind_matrices}, skeleton: ${s.skeleton}`)
|
||||
log.console(` [${i}] name: ${s.name}, joints: ${length(s.joints)}, ibm: ${s.inverse_bind_matrices}, skeleton: ${s.skeleton}`)
|
||||
}
|
||||
|
||||
log.console(`\nExtensions:`)
|
||||
|
||||
Reference in New Issue
Block a user