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
|
||||
|
||||
Reference in New Issue
Block a user