@loaders.gl/gltf 3.1.0-alpha.2 → 4.0.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.js +2 -4
- package/dist/bundle.js.map +1 -1
- package/dist/gltf-loader.js.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/api/gltf-extensions.js +35 -0
- package/dist/lib/api/gltf-extensions.js.map +1 -0
- package/dist/lib/api/gltf-scenegraph.js +1 -1
- package/dist/lib/api/gltf-scenegraph.js.map +1 -1
- package/dist/lib/api/normalize-gltf-v1.js +4 -4
- package/dist/lib/api/normalize-gltf-v1.js.map +1 -1
- package/dist/lib/api/post-process-gltf.js +12 -12
- package/dist/lib/api/post-process-gltf.js.map +1 -1
- package/dist/lib/extensions/EXT_meshopt_compression.js +16 -8
- package/dist/lib/extensions/EXT_meshopt_compression.js.map +1 -1
- package/dist/lib/extensions/EXT_texture_webp.js +32 -0
- package/dist/lib/extensions/EXT_texture_webp.js.map +1 -0
- package/dist/lib/extensions/KHR_binary_gltf.js +8 -8
- package/dist/lib/extensions/KHR_binary_gltf.js.map +1 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.js +9 -1
- package/dist/lib/extensions/KHR_draco_mesh_compression.js.map +1 -1
- package/dist/lib/extensions/KHR_texture_basisu.js +22 -0
- package/dist/lib/extensions/KHR_texture_basisu.js.map +1 -0
- package/dist/lib/extensions/{KHR_lights_punctual.js → deprecated/KHR_lights_punctual.js} +4 -3
- package/dist/lib/extensions/deprecated/KHR_lights_punctual.js.map +1 -0
- package/dist/lib/extensions/{KHR_materials_unlit.js → deprecated/KHR_materials_unlit.js} +3 -2
- package/dist/lib/extensions/deprecated/KHR_materials_unlit.js.map +1 -0
- package/dist/lib/extensions/{KHR_techniques_webgl.js → deprecated/KHR_techniques_webgl.js} +3 -2
- package/dist/lib/extensions/deprecated/KHR_techniques_webgl.js.map +1 -0
- package/dist/lib/gltf-utils/gltf-constants.js +0 -6
- package/dist/lib/gltf-utils/gltf-constants.js.map +1 -1
- package/dist/lib/gltf-utils/resolve-url.js +1 -1
- package/dist/lib/gltf-utils/resolve-url.js.map +1 -1
- package/dist/lib/parsers/parse-glb.js +2 -6
- package/dist/lib/parsers/parse-glb.js.map +1 -1
- package/dist/lib/parsers/parse-gltf.js +42 -7
- package/dist/lib/parsers/parse-gltf.js.map +1 -1
- package/dist/lib/utils/version.js +1 -1
- package/dist/meshopt/meshopt-decoder.js +1 -1
- package/dist/meshopt/meshopt-decoder.js.map +1 -1
- package/dist/webp/webp.js +29 -0
- package/dist/webp/webp.js.map +1 -0
- package/package.json +10 -7
- package/src/bundle.ts +2 -3
- package/src/gltf-loader.ts +7 -4
- package/src/index.ts +8 -4
- package/src/lib/api/gltf-extensions.ts +71 -0
- package/src/lib/api/gltf-scenegraph.ts +4 -6
- package/src/lib/api/normalize-gltf-v1.js +2 -1
- package/src/lib/extensions/EXT_meshopt_compression.ts +32 -23
- package/src/lib/extensions/EXT_texture_webp.ts +45 -0
- package/src/lib/extensions/KHR_binary_gltf.ts +19 -10
- package/src/lib/extensions/KHR_draco_mesh_compression.ts +29 -4
- package/src/lib/extensions/KHR_texture_basisu.ts +36 -0
- package/src/lib/extensions/{KHR_lights_punctual.ts → deprecated/KHR_lights_punctual.ts} +7 -4
- package/src/lib/extensions/{KHR_materials_unlit.ts → deprecated/KHR_materials_unlit.ts} +6 -3
- package/src/lib/extensions/{KHR_techniques_webgl.ts → deprecated/KHR_techniques_webgl.ts} +6 -3
- package/src/lib/gltf-utils/gltf-constants.ts +0 -12
- package/src/lib/parsers/parse-gltf.ts +72 -20
- package/src/lib/types/gltf-json-schema.ts +96 -3
- package/src/lib/types/gltf-types.ts +19 -21
- package/src/webp/webp.ts +41 -0
- package/dist/dist.min.js +0 -2
- package/dist/dist.min.js.map +0 -1
- package/dist/lib/extensions/KHR_lights_punctual.js.map +0 -1
- package/dist/lib/extensions/KHR_materials_unlit.js.map +0 -1
- package/dist/lib/extensions/KHR_techniques_webgl.js.map +0 -1
- package/dist/lib/extensions/gltf-extensions.js +0 -24
- package/dist/lib/extensions/gltf-extensions.js.map +0 -1
- package/src/lib/extensions/gltf-extensions.ts +0 -48
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/api/post-process-gltf.js"],"names":["assert","getAccessorArrayTypeAndLength","COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","GL_SAMPLER","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","REPEAT","LINEAR","NEAREST_MIPMAP_LINEAR","SAMPLER_PARAMETER_GLTF_TO_GL","magFilter","minFilter","wrapS","wrapT","DEFAULT_SAMPLER","TEXTURE_WRAP_","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","GLTFPostProcessor","postProcess","gltf","options","json","buffers","images","baseUri","_resolveTree","bufferViews","map","bufView","i","_resolveBufferView","image","_resolveImage","samplers","sampler","_resolveSampler","textures","texture","_resolveTexture","accessors","accessor","_resolveAccessor","materials","material","_resolveMaterial","meshes","mesh","_resolveMesh","nodes","node","_resolveNode","skins","skin","_resolveSkin","scenes","scene","_resolveScene","undefined","getScene","index","_get","getNode","getSkin","getMesh","getMaterial","getAccessor","getCamera","getTexture","getSampler","getImage","getBufferView","getBuffer","array","object","console","warn","id","children","child","length","reduce","accum","meshIndex","primitives","concat","camera","inverseBindMatrices","primitive","attributes","attribute","indices","normalTexture","occlusionTexture","occlustionTexture","emissiveTexture","emmisiveTexture","emissiveFactor","pbrMetallicRoughness","mr","baseColorTexture","metallicRoughnessTexture","bufferView","bytesPerComponent","components","bytesPerElement","buffer","ArrayType","byteLength","byteOffset","cutBufffer","arrayBuffer","slice","value","source","parameters","key","glEnum","_enumSamplerParameter","preloadedImage","bufferIndex","data","Uint8Array","_resolveCamera","perspective","orthographic","postProcessGLTF"],"mappings":"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","sourcesContent":["import {assert} from '../utils/assert';\nimport {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';\n\n// This is a post processor for loaded glTF files\n// The goal is to make the loaded data easier to use in WebGL applications\n//\n// Functions:\n// * Resolve indexed arrays structure of glTF into a linked tree.\n// * Translate stringified enum keys and values into WebGL constants.\n// * Load images (optional)\n\n// ENUM LOOKUP\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\nconst GL_SAMPLER = {\n // Sampler parameters\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n\n // Sampler default values\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\n\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\n\n// When undefined, a sampler with repeat wrapping and auto filtering should be used.\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\nconst DEFAULT_SAMPLER = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_]: GL_SAMPLER.REPEAT\n};\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n postProcess(gltf, options = {}) {\n const {json, buffers = [], images = [], baseUri = ''} = gltf;\n assert(json);\n\n this.baseUri = baseUri;\n this.json = json;\n this.buffers = buffers;\n this.images = images;\n\n this._resolveTree(this.json, options);\n\n return this.json;\n }\n\n // Convert indexed glTF structure into tree structure\n // cross-link index resolution, enum lookup, convenience calculations\n // eslint-disable-next-line complexity\n _resolveTree(json, options = {}) {\n if (json.bufferViews) {\n json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n if (json.images) {\n json.images = json.images.map((image, i) => this._resolveImage(image, i));\n }\n if (json.samplers) {\n json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n if (json.textures) {\n json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n if (json.accessors) {\n json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n if (json.materials) {\n json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n if (json.meshes) {\n json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n if (json.nodes) {\n json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));\n }\n if (json.skins) {\n json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n if (json.scenes) {\n json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n if (json.scene !== undefined) {\n json.scene = json.scenes[this.json.scene];\n }\n }\n\n getScene(index) {\n return this._get('scenes', index);\n }\n\n getNode(index) {\n return this._get('nodes', index);\n }\n\n getSkin(index) {\n return this._get('skins', index);\n }\n\n getMesh(index) {\n return this._get('meshes', index);\n }\n\n getMaterial(index) {\n return this._get('materials', index);\n }\n\n getAccessor(index) {\n return this._get('accessors', index);\n }\n\n getCamera(index) {\n return null; // TODO: fix this\n }\n\n getTexture(index) {\n return this._get('textures', index);\n }\n\n getSampler(index) {\n return this._get('samplers', index);\n }\n\n getImage(index) {\n return this._get('images', index);\n }\n\n getBufferView(index) {\n return this._get('bufferViews', index);\n }\n\n getBuffer(index) {\n return this._get('buffers', index);\n }\n\n _get(array, index) {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n // PARSING HELPERS\n\n _resolveScene(scene, index) {\n // scene = {...scene};\n scene.id = scene.id || `scene-${index}`;\n scene.nodes = (scene.nodes || []).map((node) => this.getNode(node));\n return scene;\n }\n\n _resolveNode(node, index) {\n // node = {...node};\n node.id = node.id || `node-${index}`;\n if (node.children) {\n node.children = node.children.map((child) => this.getNode(child));\n }\n if (node.mesh !== undefined) {\n node.mesh = this.getMesh(node.mesh);\n } else if (node.meshes !== undefined && node.meshes.length) {\n node.mesh = node.meshes.reduce(\n (accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n },\n {primitives: []}\n );\n }\n if (node.camera !== undefined) {\n node.camera = this.getCamera(node.camera);\n }\n if (node.skin !== undefined) {\n node.skin = this.getSkin(node.skin);\n }\n return node;\n }\n\n _resolveSkin(skin, index) {\n // skin = {...skin};\n skin.id = skin.id || `skin-${index}`;\n skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);\n return skin;\n }\n\n _resolveMesh(mesh, index) {\n // mesh = {...mesh};\n mesh.id = mesh.id || `mesh-${index}`;\n if (mesh.primitives) {\n mesh.primitives = mesh.primitives.map((primitive) => {\n primitive = {...primitive};\n const attributes = primitive.attributes;\n primitive.attributes = {};\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n if (primitive.indices !== undefined) {\n primitive.indices = this.getAccessor(primitive.indices);\n }\n if (primitive.material !== undefined) {\n primitive.material = this.getMaterial(primitive.material);\n }\n return primitive;\n });\n }\n return mesh;\n }\n\n _resolveMaterial(material, index) {\n // material = {...material};\n material.id = material.id || `material-${index}`;\n if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture};\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n if (material.occlusionTexture) {\n material.occlustionTexture = {...material.occlustionTexture};\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n if (material.emissiveTexture) {\n material.emmisiveTexture = {...material.emmisiveTexture};\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = {...material.pbrMetallicRoughness};\n const mr = material.pbrMetallicRoughness;\n if (mr.baseColorTexture) {\n mr.baseColorTexture = {...mr.baseColorTexture};\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = {...mr.metallicRoughnessTexture};\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n return material;\n }\n\n _resolveAccessor(accessor, index) {\n // accessor = {...accessor};\n accessor.id = accessor.id || `accessor-${index}`;\n if (accessor.bufferView !== undefined) {\n // Draco encoded meshes don't have bufferView\n accessor.bufferView = this.getBufferView(accessor.bufferView);\n }\n\n // Look up enums\n accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);\n accessor.components = getSizeFromAccessorType(accessor.type);\n accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;\n\n // Create TypedArray for the accessor\n // Note: The canonical way to instantiate is to ignore this array and create\n // WebGLBuffer's using the bufferViews.\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {ArrayType, byteLength} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset =\n (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n const cutBufffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n accessor.value = new ArrayType(cutBufffer);\n }\n\n return accessor;\n }\n\n _resolveTexture(texture, index) {\n // texture = {...texture};\n texture.id = texture.id || `texture-${index}`;\n texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;\n texture.source = this.getImage(texture.source);\n return texture;\n }\n\n _resolveSampler(sampler, index) {\n // sampler = {...sampler};\n sampler.id = sampler.id || `sampler-${index}`;\n // Map textual parameters to GL parameter values\n sampler.parameters = {};\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n return sampler;\n }\n\n _enumSamplerParameter(key) {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(image, index) {\n // image = {...image};\n image.id = image.id || `image-${index}`;\n if (image.bufferView !== undefined) {\n image.bufferView = this.getBufferView(image.bufferView);\n }\n\n // Check if image has been preloaded by the GLTFLoader\n // If so, link it into the JSON and drop the URI\n const preloadedImage = this.images[index];\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(bufferView, index) {\n // bufferView = {...bufferView};\n bufferView.id = bufferView.id || `bufferView-${index}`;\n const bufferIndex = bufferView.buffer;\n bufferView.buffer = this.buffers[bufferIndex];\n\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n\n if ('byteOffset' in bufferView) {\n byteOffset += bufferView.byteOffset;\n }\n\n bufferView.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n return bufferView;\n }\n\n _resolveCamera(camera, index) {\n camera.id = camera.id || `camera-${index}`;\n // TODO - create 4x4 matrices\n if (camera.perspective) {\n // camera.matrix = createPerspectiveMatrix(camera.perspective);\n }\n if (camera.orthographic) {\n // camera.matrix = createOrthographicMatrix(camera.orthographic);\n }\n return camera;\n }\n}\n\nexport function postProcessGLTF(gltf, options) {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n"],"file":"post-process-gltf.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/api/post-process-gltf.js"],"names":["assert","getAccessorArrayTypeAndLength","COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","GL_SAMPLER","TEXTURE_MAG_FILTER","TEXTURE_MIN_FILTER","TEXTURE_WRAP_S","TEXTURE_WRAP_T","REPEAT","LINEAR","NEAREST_MIPMAP_LINEAR","SAMPLER_PARAMETER_GLTF_TO_GL","magFilter","minFilter","wrapS","wrapT","DEFAULT_SAMPLER","TEXTURE_WRAP_","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","GLTFPostProcessor","postProcess","gltf","options","json","buffers","images","baseUri","_resolveTree","bufferViews","map","bufView","i","_resolveBufferView","image","_resolveImage","samplers","sampler","_resolveSampler","textures","texture","_resolveTexture","accessors","accessor","_resolveAccessor","materials","material","_resolveMaterial","meshes","mesh","_resolveMesh","nodes","node","_resolveNode","skins","skin","_resolveSkin","scenes","scene","_resolveScene","undefined","getScene","index","_get","getNode","getSkin","getMesh","getMaterial","getAccessor","getCamera","getTexture","getSampler","getImage","getBufferView","getBuffer","array","object","console","warn","id","children","child","length","reduce","accum","meshIndex","primitives","concat","camera","inverseBindMatrices","primitive","attributes","attribute","indices","normalTexture","occlusionTexture","occlustionTexture","emissiveTexture","emmisiveTexture","emissiveFactor","pbrMetallicRoughness","mr","baseColorTexture","metallicRoughnessTexture","bufferView","bytesPerComponent","components","bytesPerElement","buffer","ArrayType","byteLength","byteOffset","cutBufffer","arrayBuffer","slice","value","source","parameters","key","glEnum","_enumSamplerParameter","preloadedImage","bufferIndex","data","Uint8Array","_resolveCamera","perspective","orthographic","postProcessGLTF"],"mappings":"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","sourcesContent":["import {assert} from '../utils/assert';\nimport {getAccessorArrayTypeAndLength} from '../gltf-utils/gltf-utils';\n\n// This is a post processor for loaded glTF files\n// The goal is to make the loaded data easier to use in WebGL applications\n//\n// Functions:\n// * Resolve indexed arrays structure of glTF into a linked tree.\n// * Translate stringified enum keys and values into WebGL constants.\n// * Load images (optional)\n\n// ENUM LOOKUP\n\nconst COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\nconst GL_SAMPLER = {\n // Sampler parameters\n TEXTURE_MAG_FILTER: 0x2800,\n TEXTURE_MIN_FILTER: 0x2801,\n TEXTURE_WRAP_S: 0x2802,\n TEXTURE_WRAP_T: 0x2803,\n\n // Sampler default values\n REPEAT: 0x2901,\n LINEAR: 0x2601,\n NEAREST_MIPMAP_LINEAR: 0x2702\n};\n\nconst SAMPLER_PARAMETER_GLTF_TO_GL = {\n magFilter: GL_SAMPLER.TEXTURE_MAG_FILTER,\n minFilter: GL_SAMPLER.TEXTURE_MIN_FILTER,\n wrapS: GL_SAMPLER.TEXTURE_WRAP_S,\n wrapT: GL_SAMPLER.TEXTURE_WRAP_T\n};\n\n// When undefined, a sampler with repeat wrapping and auto filtering should be used.\n// https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#texture\nconst DEFAULT_SAMPLER = {\n [GL_SAMPLER.TEXTURE_MAG_FILTER]: GL_SAMPLER.LINEAR,\n [GL_SAMPLER.TEXTURE_MIN_FILTER]: GL_SAMPLER.NEAREST_MIPMAP_LINEAR,\n [GL_SAMPLER.TEXTURE_WRAP_S]: GL_SAMPLER.REPEAT,\n [GL_SAMPLER.TEXTURE_WRAP_]: GL_SAMPLER.REPEAT\n};\n\nfunction getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nfunction getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nclass GLTFPostProcessor {\n postProcess(gltf, options = {}) {\n const {json, buffers = [], images = [], baseUri = ''} = gltf;\n assert(json);\n\n this.baseUri = baseUri;\n this.json = json;\n this.buffers = buffers;\n this.images = images;\n\n this._resolveTree(this.json, options);\n\n return this.json;\n }\n\n // Convert indexed glTF structure into tree structure\n // cross-link index resolution, enum lookup, convenience calculations\n // eslint-disable-next-line complexity\n _resolveTree(json, options = {}) {\n if (json.bufferViews) {\n json.bufferViews = json.bufferViews.map((bufView, i) => this._resolveBufferView(bufView, i));\n }\n if (json.images) {\n json.images = json.images.map((image, i) => this._resolveImage(image, i));\n }\n if (json.samplers) {\n json.samplers = json.samplers.map((sampler, i) => this._resolveSampler(sampler, i));\n }\n if (json.textures) {\n json.textures = json.textures.map((texture, i) => this._resolveTexture(texture, i));\n }\n if (json.accessors) {\n json.accessors = json.accessors.map((accessor, i) => this._resolveAccessor(accessor, i));\n }\n if (json.materials) {\n json.materials = json.materials.map((material, i) => this._resolveMaterial(material, i));\n }\n if (json.meshes) {\n json.meshes = json.meshes.map((mesh, i) => this._resolveMesh(mesh, i));\n }\n if (json.nodes) {\n json.nodes = json.nodes.map((node, i) => this._resolveNode(node, i));\n }\n if (json.skins) {\n json.skins = json.skins.map((skin, i) => this._resolveSkin(skin, i));\n }\n if (json.scenes) {\n json.scenes = json.scenes.map((scene, i) => this._resolveScene(scene, i));\n }\n if (json.scene !== undefined) {\n json.scene = json.scenes[this.json.scene];\n }\n }\n\n getScene(index) {\n return this._get('scenes', index);\n }\n\n getNode(index) {\n return this._get('nodes', index);\n }\n\n getSkin(index) {\n return this._get('skins', index);\n }\n\n getMesh(index) {\n return this._get('meshes', index);\n }\n\n getMaterial(index) {\n return this._get('materials', index);\n }\n\n getAccessor(index) {\n return this._get('accessors', index);\n }\n\n getCamera(index) {\n return null; // TODO: fix this\n }\n\n getTexture(index) {\n return this._get('textures', index);\n }\n\n getSampler(index) {\n return this._get('samplers', index);\n }\n\n getImage(index) {\n return this._get('images', index);\n }\n\n getBufferView(index) {\n return this._get('bufferViews', index);\n }\n\n getBuffer(index) {\n return this._get('buffers', index);\n }\n\n _get(array, index) {\n // check if already resolved\n if (typeof index === 'object') {\n return index;\n }\n const object = this.json[array] && this.json[array][index];\n if (!object) {\n console.warn(`glTF file error: Could not find ${array}[${index}]`); // eslint-disable-line\n }\n return object;\n }\n\n // PARSING HELPERS\n\n _resolveScene(scene, index) {\n // scene = {...scene};\n scene.id = scene.id || `scene-${index}`;\n scene.nodes = (scene.nodes || []).map((node) => this.getNode(node));\n return scene;\n }\n\n _resolveNode(node, index) {\n // node = {...node};\n node.id = node.id || `node-${index}`;\n if (node.children) {\n node.children = node.children.map((child) => this.getNode(child));\n }\n if (node.mesh !== undefined) {\n node.mesh = this.getMesh(node.mesh);\n } else if (node.meshes !== undefined && node.meshes.length) {\n node.mesh = node.meshes.reduce(\n (accum, meshIndex) => {\n const mesh = this.getMesh(meshIndex);\n accum.id = mesh.id;\n accum.primitives = accum.primitives.concat(mesh.primitives);\n return accum;\n },\n {primitives: []}\n );\n }\n if (node.camera !== undefined) {\n node.camera = this.getCamera(node.camera);\n }\n if (node.skin !== undefined) {\n node.skin = this.getSkin(node.skin);\n }\n return node;\n }\n\n _resolveSkin(skin, index) {\n // skin = {...skin};\n skin.id = skin.id || `skin-${index}`;\n skin.inverseBindMatrices = this.getAccessor(skin.inverseBindMatrices);\n return skin;\n }\n\n _resolveMesh(mesh, index) {\n // mesh = {...mesh};\n mesh.id = mesh.id || `mesh-${index}`;\n if (mesh.primitives) {\n mesh.primitives = mesh.primitives.map((primitive) => {\n primitive = {...primitive};\n const attributes = primitive.attributes;\n primitive.attributes = {};\n for (const attribute in attributes) {\n primitive.attributes[attribute] = this.getAccessor(attributes[attribute]);\n }\n if (primitive.indices !== undefined) {\n primitive.indices = this.getAccessor(primitive.indices);\n }\n if (primitive.material !== undefined) {\n primitive.material = this.getMaterial(primitive.material);\n }\n return primitive;\n });\n }\n return mesh;\n }\n\n _resolveMaterial(material, index) {\n // material = {...material};\n material.id = material.id || `material-${index}`;\n if (material.normalTexture) {\n material.normalTexture = {...material.normalTexture};\n material.normalTexture.texture = this.getTexture(material.normalTexture.index);\n }\n if (material.occlusionTexture) {\n material.occlustionTexture = {...material.occlustionTexture};\n material.occlusionTexture.texture = this.getTexture(material.occlusionTexture.index);\n }\n if (material.emissiveTexture) {\n material.emmisiveTexture = {...material.emmisiveTexture};\n material.emissiveTexture.texture = this.getTexture(material.emissiveTexture.index);\n }\n if (!material.emissiveFactor) {\n material.emissiveFactor = material.emmisiveTexture ? [1, 1, 1] : [0, 0, 0];\n }\n\n if (material.pbrMetallicRoughness) {\n material.pbrMetallicRoughness = {...material.pbrMetallicRoughness};\n const mr = material.pbrMetallicRoughness;\n if (mr.baseColorTexture) {\n mr.baseColorTexture = {...mr.baseColorTexture};\n mr.baseColorTexture.texture = this.getTexture(mr.baseColorTexture.index);\n }\n if (mr.metallicRoughnessTexture) {\n mr.metallicRoughnessTexture = {...mr.metallicRoughnessTexture};\n mr.metallicRoughnessTexture.texture = this.getTexture(mr.metallicRoughnessTexture.index);\n }\n }\n return material;\n }\n\n _resolveAccessor(accessor, index) {\n // accessor = {...accessor};\n accessor.id = accessor.id || `accessor-${index}`;\n if (accessor.bufferView !== undefined) {\n // Draco encoded meshes don't have bufferView\n accessor.bufferView = this.getBufferView(accessor.bufferView);\n }\n\n // Look up enums\n accessor.bytesPerComponent = getBytesFromComponentType(accessor.componentType);\n accessor.components = getSizeFromAccessorType(accessor.type);\n accessor.bytesPerElement = accessor.bytesPerComponent * accessor.components;\n\n // Create TypedArray for the accessor\n // Note: The canonical way to instantiate is to ignore this array and create\n // WebGLBuffer's using the bufferViews.\n if (accessor.bufferView) {\n const buffer = accessor.bufferView.buffer;\n const {ArrayType, byteLength} = getAccessorArrayTypeAndLength(accessor, accessor.bufferView);\n const byteOffset =\n (accessor.bufferView.byteOffset || 0) + (accessor.byteOffset || 0) + buffer.byteOffset;\n const cutBufffer = buffer.arrayBuffer.slice(byteOffset, byteOffset + byteLength);\n accessor.value = new ArrayType(cutBufffer);\n }\n\n return accessor;\n }\n\n _resolveTexture(texture, index) {\n // texture = {...texture};\n texture.id = texture.id || `texture-${index}`;\n texture.sampler = 'sampler' in texture ? this.getSampler(texture.sampler) : DEFAULT_SAMPLER;\n texture.source = this.getImage(texture.source);\n return texture;\n }\n\n _resolveSampler(sampler, index) {\n // sampler = {...sampler};\n sampler.id = sampler.id || `sampler-${index}`;\n // Map textual parameters to GL parameter values\n sampler.parameters = {};\n for (const key in sampler) {\n const glEnum = this._enumSamplerParameter(key);\n if (glEnum !== undefined) {\n sampler.parameters[glEnum] = sampler[key];\n }\n }\n return sampler;\n }\n\n _enumSamplerParameter(key) {\n return SAMPLER_PARAMETER_GLTF_TO_GL[key];\n }\n\n _resolveImage(image, index) {\n // image = {...image};\n image.id = image.id || `image-${index}`;\n if (image.bufferView !== undefined) {\n image.bufferView = this.getBufferView(image.bufferView);\n }\n\n // Check if image has been preloaded by the GLTFLoader\n // If so, link it into the JSON and drop the URI\n const preloadedImage = this.images[index];\n if (preloadedImage) {\n image.image = preloadedImage;\n }\n\n return image;\n }\n\n _resolveBufferView(bufferView, index) {\n // bufferView = {...bufferView};\n bufferView.id = bufferView.id || `bufferView-${index}`;\n const bufferIndex = bufferView.buffer;\n bufferView.buffer = this.buffers[bufferIndex];\n\n const arrayBuffer = this.buffers[bufferIndex].arrayBuffer;\n let byteOffset = this.buffers[bufferIndex].byteOffset || 0;\n\n if ('byteOffset' in bufferView) {\n byteOffset += bufferView.byteOffset;\n }\n\n bufferView.data = new Uint8Array(arrayBuffer, byteOffset, bufferView.byteLength);\n return bufferView;\n }\n\n _resolveCamera(camera, index) {\n camera.id = camera.id || `camera-${index}`;\n // TODO - create 4x4 matrices\n if (camera.perspective) {\n // camera.matrix = createPerspectiveMatrix(camera.perspective);\n }\n if (camera.orthographic) {\n // camera.matrix = createOrthographicMatrix(camera.orthographic);\n }\n return camera;\n }\n}\n\nexport function postProcessGLTF(gltf, options) {\n return new GLTFPostProcessor().postProcess(gltf, options);\n}\n"],"file":"post-process-gltf.js"}
|
|
@@ -1,34 +1,42 @@
|
|
|
1
1
|
import GLTFScenegraph from '../api/gltf-scenegraph';
|
|
2
|
-
import { EXT_MESHOPT_COMPRESSION } from '../gltf-utils/gltf-constants';
|
|
3
2
|
import { isMeshoptSupported, meshoptDecodeGltfBuffer } from '../../meshopt/meshopt-decoder';
|
|
4
3
|
const DEFAULT_MESHOPT_OPTIONS = {
|
|
5
4
|
byteOffset: 0,
|
|
6
5
|
filter: 'NONE'
|
|
7
6
|
};
|
|
7
|
+
const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';
|
|
8
|
+
export const name = EXT_MESHOPT_COMPRESSION;
|
|
9
|
+
export function preprocess(gltfData) {
|
|
10
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
11
|
+
|
|
12
|
+
if (scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) && !isMeshoptSupported()) {
|
|
13
|
+
throw new Error("gltf: Required extension ".concat(EXT_MESHOPT_COMPRESSION, " not supported by browser"));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
8
16
|
export async function decode(gltfData, options) {
|
|
9
17
|
var _options$gltf;
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
20
|
+
|
|
21
|
+
if (!(options !== null && options !== void 0 && (_options$gltf = options.gltf) !== null && _options$gltf !== void 0 && _options$gltf.decompressMeshes)) {
|
|
12
22
|
return;
|
|
13
23
|
}
|
|
14
24
|
|
|
15
25
|
const promises = [];
|
|
16
26
|
|
|
17
27
|
for (const bufferViewIndex of gltfData.json.bufferViews || []) {
|
|
18
|
-
promises.push(decodeMeshoptBufferView(
|
|
28
|
+
promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));
|
|
19
29
|
}
|
|
20
30
|
|
|
21
31
|
await Promise.all(promises);
|
|
22
|
-
const scenegraph = new GLTFScenegraph(gltfData);
|
|
23
32
|
scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);
|
|
24
33
|
}
|
|
25
34
|
|
|
26
|
-
async function decodeMeshoptBufferView(
|
|
27
|
-
const
|
|
28
|
-
const meshoptExtension = bufferView.extensions && bufferView.extensions[EXT_MESHOPT_COMPRESSION];
|
|
35
|
+
async function decodeMeshoptBufferView(scenegraph, bufferView) {
|
|
36
|
+
const meshoptExtension = scenegraph.getObjectExtension(bufferView, EXT_MESHOPT_COMPRESSION);
|
|
29
37
|
|
|
30
38
|
if (meshoptExtension) {
|
|
31
|
-
const buffer =
|
|
39
|
+
const buffer = bufferView.buffer;
|
|
32
40
|
const {
|
|
33
41
|
byteOffset = 0,
|
|
34
42
|
byteLength = 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/extensions/EXT_meshopt_compression.ts"],"names":["GLTFScenegraph","
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/extensions/EXT_meshopt_compression.ts"],"names":["GLTFScenegraph","isMeshoptSupported","meshoptDecodeGltfBuffer","DEFAULT_MESHOPT_OPTIONS","byteOffset","filter","EXT_MESHOPT_COMPRESSION","name","preprocess","gltfData","scenegraph","getRequiredExtensions","includes","Error","decode","options","gltf","decompressMeshes","promises","bufferViewIndex","json","bufferViews","push","decodeMeshoptBufferView","Promise","all","removeExtension","bufferView","meshoptExtension","getObjectExtension","buffer","byteLength","byteStride","count","mode","source","Uint8Array","result","ArrayBuffer"],"mappings":"AAGA,OAAOA,cAAP,MAA2B,wBAA3B;AACA,SAAQC,kBAAR,EAA4BC,uBAA5B,QAA0D,+BAA1D;AAIA,MAAMC,uBAAuB,GAAG;AAC9BC,EAAAA,UAAU,EAAE,CADkB;AAE9BC,EAAAA,MAAM,EAAE;AAFsB,CAAhC;AAMA,MAAMC,uBAAuB,GAAG,yBAAhC;AAEA,OAAO,MAAMC,IAAI,GAAGD,uBAAb;AAEP,OAAO,SAASE,UAAT,CAAoBC,QAApB,EAA4C;AACjD,QAAMC,UAAU,GAAG,IAAIV,cAAJ,CAAmBS,QAAnB,CAAnB;;AACA,MACEC,UAAU,CAACC,qBAAX,GAAmCC,QAAnC,CAA4CN,uBAA5C,KACA,CAACL,kBAAkB,EAFrB,EAGE;AACA,UAAM,IAAIY,KAAJ,oCAAsCP,uBAAtC,+BAAN;AACD;AACF;AAED,OAAO,eAAeQ,MAAf,CAAsBL,QAAtB,EAA8CM,OAA9C,EAA0E;AAAA;;AAC/E,QAAML,UAAU,GAAG,IAAIV,cAAJ,CAAmBS,QAAnB,CAAnB;;AAEA,MAAI,EAACM,OAAD,aAACA,OAAD,gCAACA,OAAO,CAAEC,IAAV,0CAAC,cAAeC,gBAAhB,CAAJ,EAAsC;AACpC;AACD;;AAED,QAAMC,QAAwB,GAAG,EAAjC;;AACA,OAAK,MAAMC,eAAX,IAA8BV,QAAQ,CAACW,IAAT,CAAcC,WAAd,IAA6B,EAA3D,EAA+D;AAC7DH,IAAAA,QAAQ,CAACI,IAAT,CAAcC,uBAAuB,CAACb,UAAD,EAAaS,eAAb,CAArC;AACD;;AAGD,QAAMK,OAAO,CAACC,GAAR,CAAYP,QAAZ,CAAN;AAGAR,EAAAA,UAAU,CAACgB,eAAX,CAA2BpB,uBAA3B;AACD;;AAGD,eAAeiB,uBAAf,CACEb,UADF,EAEEiB,UAFF,EAG+B;AAC7B,QAAMC,gBAAgB,GAAGlB,UAAU,CAACmB,kBAAX,CACvBF,UADuB,EAEvBrB,uBAFuB,CAAzB;;AAIA,MAAIsB,gBAAJ,EAAsB;AACpB,UAAME,MAAM,GAAGH,UAAU,CAACG,MAA1B;AAEA,UAAM;AACJ1B,MAAAA,UAAU,GAAG,CADT;AAEJ2B,MAAAA,UAAU,GAAG,CAFT;AAGJC,MAAAA,UAHI;AAIJC,MAAAA,KAJI;AAKJC,MAAAA,IALI;AAMJ7B,MAAAA,MAAM,GAAG;AANL,QAOFuB,gBAPJ;AAUA,UAAMO,MAAM,GAAG,IAAIC,UAAJ,CAAeN,MAAf,EAAuB1B,UAAvB,EAAmC2B,UAAnC,CAAf;AACA,UAAMM,MAAM,GAAG,IAAIC,WAAJ,CAAgBL,KAAK,GAAGD,UAAxB,CAAf;AACA,UAAM9B,uBAAuB,CAAC,IAAIkC,UAAJ,CAAeC,MAAf,CAAD,EAAyBJ,KAAzB,EAAgCD,UAAhC,EAA4CG,MAA5C,EAAoDD,IAApD,EAA0D7B,MAA1D,CAA7B;AACA,WAAOgC,MAAP;AACD;;AAED,SAAO,IAAP;AACD","sourcesContent":["/* eslint-disable camelcase */\nimport type {GLTF, GLTFBufferView, GLTF_EXT_meshopt_compression} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\nimport {isMeshoptSupported, meshoptDecodeGltfBuffer} from '../../meshopt/meshopt-decoder';\n\n// @ts-ignore\n// eslint-disable-next-line\nconst DEFAULT_MESHOPT_OPTIONS = {\n byteOffset: 0,\n filter: 'NONE'\n};\n\n/** Extension name */\nconst EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';\n\nexport const name = EXT_MESHOPT_COMPRESSION;\n\nexport function preprocess(gltfData: {json: GLTF}) {\n const scenegraph = new GLTFScenegraph(gltfData);\n if (\n scenegraph.getRequiredExtensions().includes(EXT_MESHOPT_COMPRESSION) &&\n !isMeshoptSupported()\n ) {\n throw new Error(`gltf: Required extension ${EXT_MESHOPT_COMPRESSION} not supported by browser`);\n }\n}\n\nexport async function decode(gltfData: {json: GLTF}, options: GLTFLoaderOptions) {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const promises: Promise<any>[] = [];\n for (const bufferViewIndex of gltfData.json.bufferViews || []) {\n promises.push(decodeMeshoptBufferView(scenegraph, bufferViewIndex));\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(EXT_MESHOPT_COMPRESSION);\n}\n\n/** Decode one meshopt buffer view */\nasync function decodeMeshoptBufferView(\n scenegraph: GLTFScenegraph,\n bufferView: GLTFBufferView\n): Promise<ArrayBuffer | null> {\n const meshoptExtension = scenegraph.getObjectExtension<GLTF_EXT_meshopt_compression>(\n bufferView,\n EXT_MESHOPT_COMPRESSION\n );\n if (meshoptExtension) {\n const buffer = bufferView.buffer;\n\n const {\n byteOffset = 0,\n byteLength = 0,\n byteStride,\n count,\n mode,\n filter = 'NONE'\n } = meshoptExtension;\n\n // @ts-expect-error TODO - fix buffer handling\n const source = new Uint8Array(buffer, byteOffset, byteLength);\n const result = new ArrayBuffer(count * byteStride);\n await meshoptDecodeGltfBuffer(new Uint8Array(result), count, byteStride, source, mode, filter);\n return result;\n }\n\n return null;\n}\n"],"file":"EXT_meshopt_compression.js"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { _isImageFormatSupported } from '@loaders.gl/images';
|
|
2
|
+
import GLTFScenegraph from '../api/gltf-scenegraph';
|
|
3
|
+
const EXT_TEXTURE_WEBP = 'EXT_texture_webp';
|
|
4
|
+
export const name = EXT_TEXTURE_WEBP;
|
|
5
|
+
export function preprocess(gltfData, options) {
|
|
6
|
+
const scenegraph = new GLTFScenegraph(gltfData);
|
|
7
|
+
|
|
8
|
+
if (!_isImageFormatSupported('image/webp')) {
|
|
9
|
+
if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {
|
|
10
|
+
throw new Error("gltf: Required extension ".concat(EXT_TEXTURE_WEBP, " not supported by browser"));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const {
|
|
17
|
+
json
|
|
18
|
+
} = scenegraph;
|
|
19
|
+
|
|
20
|
+
for (const texture of json.textures || []) {
|
|
21
|
+
const extension = scenegraph.getObjectExtension(texture, EXT_TEXTURE_WEBP);
|
|
22
|
+
|
|
23
|
+
if (extension) {
|
|
24
|
+
texture.source = extension.source;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
scenegraph.removeExtension(EXT_TEXTURE_WEBP);
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=EXT_texture_webp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/extensions/EXT_texture_webp.ts"],"names":["_isImageFormatSupported","GLTFScenegraph","EXT_TEXTURE_WEBP","name","preprocess","gltfData","options","scenegraph","getRequiredExtensions","includes","Error","json","texture","textures","extension","getObjectExtension","source","removeObjectExtension","removeExtension"],"mappings":"AAOA,SAAQA,uBAAR,QAAsC,oBAAtC;AACA,OAAOC,cAAP,MAA2B,wBAA3B;AAEA,MAAMC,gBAAgB,GAAG,kBAAzB;AAGA,OAAO,MAAMC,IAAI,GAAGD,gBAAb;AAMP,OAAO,SAASE,UAAT,CAAoBC,QAApB,EAA4CC,OAA5C,EAA8E;AACnF,QAAMC,UAAU,GAAG,IAAIN,cAAJ,CAAmBI,QAAnB,CAAnB;;AAEA,MAAI,CAACL,uBAAuB,CAAC,YAAD,CAA5B,EAA4C;AAC1C,QAAIO,UAAU,CAACC,qBAAX,GAAmCC,QAAnC,CAA4CP,gBAA5C,CAAJ,EAAmE;AACjE,YAAM,IAAIQ,KAAJ,oCAAsCR,gBAAtC,+BAAN;AACD;;AACD;AACD;;AAED,QAAM;AAACS,IAAAA;AAAD,MAASJ,UAAf;;AAEA,OAAK,MAAMK,OAAX,IAAsBD,IAAI,CAACE,QAAL,IAAiB,EAAvC,EAA2C;AACzC,UAAMC,SAAS,GAAGP,UAAU,CAACQ,kBAAX,CAChBH,OADgB,EAEhBV,gBAFgB,CAAlB;;AAIA,QAAIY,SAAJ,EAAe;AACbF,MAAAA,OAAO,CAACI,MAAR,GAAiBF,SAAS,CAACE,MAA3B;AACD;;AACDT,IAAAA,UAAU,CAACU,qBAAX,CAAiCL,OAAjC,EAA0CV,gBAA1C;AACD;;AAGDK,EAAAA,UAAU,CAACW,eAAX,CAA2BhB,gBAA3B;AACD","sourcesContent":["// GLTF EXTENSION: EXT_TEXTURE_WEBP\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_TEXTURE_WEBP\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_EXT_texture_webp} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport {_isImageFormatSupported} from '@loaders.gl/images';\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst EXT_TEXTURE_WEBP = 'EXT_texture_webp';\n\n/** Extension name */\nexport const name = EXT_TEXTURE_WEBP;\n\n/**\n * Replaces a texture source reference with the extension texture\n * Done in preprocess() to prevent load of default image\n */\nexport function preprocess(gltfData: {json: GLTF}, options: GLTFLoaderOptions): void {\n const scenegraph = new GLTFScenegraph(gltfData);\n\n if (!_isImageFormatSupported('image/webp')) {\n if (scenegraph.getRequiredExtensions().includes(EXT_TEXTURE_WEBP)) {\n throw new Error(`gltf: Required extension ${EXT_TEXTURE_WEBP} not supported by browser`);\n }\n return;\n }\n\n const {json} = scenegraph;\n\n for (const texture of json.textures || []) {\n const extension = scenegraph.getObjectExtension<GLTF_EXT_texture_webp>(\n texture,\n EXT_TEXTURE_WEBP\n );\n if (extension) {\n texture.source = extension.source;\n }\n scenegraph.removeObjectExtension(texture, EXT_TEXTURE_WEBP);\n }\n\n // Remove the top-level extension\n scenegraph.removeExtension(EXT_TEXTURE_WEBP);\n}\n"],"file":"EXT_texture_webp.js"}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import GLTFScenegraph from '../api/gltf-scenegraph';
|
|
2
|
-
|
|
3
|
-
export
|
|
2
|
+
const KHR_BINARY_GLTF = 'KHR_binary_glTF';
|
|
3
|
+
export const name = KHR_BINARY_GLTF;
|
|
4
|
+
export function preprocess(gltfData) {
|
|
4
5
|
const gltfScenegraph = new GLTFScenegraph(gltfData);
|
|
5
6
|
const {
|
|
6
7
|
json
|
|
7
8
|
} = gltfScenegraph;
|
|
8
9
|
|
|
9
|
-
for (const
|
|
10
|
-
const extension = gltfScenegraph.
|
|
10
|
+
for (const image of json.images || []) {
|
|
11
|
+
const extension = gltfScenegraph.getObjectExtension(image, KHR_BINARY_GLTF);
|
|
11
12
|
|
|
12
13
|
if (extension) {
|
|
13
|
-
Object.assign(
|
|
14
|
+
Object.assign(image, extension);
|
|
14
15
|
}
|
|
16
|
+
|
|
17
|
+
gltfScenegraph.removeObjectExtension(image, KHR_BINARY_GLTF);
|
|
15
18
|
}
|
|
16
19
|
|
|
17
20
|
if (json.buffers && json.buffers[0]) {
|
|
@@ -20,7 +23,4 @@ export function decode(gltfData) {
|
|
|
20
23
|
|
|
21
24
|
gltfScenegraph.removeExtension(KHR_BINARY_GLTF);
|
|
22
25
|
}
|
|
23
|
-
export function encode() {
|
|
24
|
-
throw new Error(KHR_BINARY_GLTF);
|
|
25
|
-
}
|
|
26
26
|
//# sourceMappingURL=KHR_binary_gltf.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/extensions/KHR_binary_gltf.ts"],"names":["GLTFScenegraph","KHR_BINARY_GLTF","
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/extensions/KHR_binary_gltf.ts"],"names":["GLTFScenegraph","KHR_BINARY_GLTF","name","preprocess","gltfData","gltfScenegraph","json","image","images","extension","getObjectExtension","Object","assign","removeObjectExtension","buffers","uri","removeExtension"],"mappings":"AAMA,OAAOA,cAAP,MAA2B,wBAA3B;AAEA,MAAMC,eAAe,GAAG,iBAAxB;AAGA,OAAO,MAAMC,IAAI,GAAGD,eAAb;AAEP,OAAO,SAASE,UAAT,CAAoBC,QAApB,EAAkD;AACvD,QAAMC,cAAc,GAAG,IAAIL,cAAJ,CAAmBI,QAAnB,CAAvB;AACA,QAAM;AAACE,IAAAA;AAAD,MAASD,cAAf;;AAOA,OAAK,MAAME,KAAX,IAAoBD,IAAI,CAACE,MAAL,IAAe,EAAnC,EAAuC;AACrC,UAAMC,SAAS,GAAGJ,cAAc,CAACK,kBAAf,CAChBH,KADgB,EAEhBN,eAFgB,CAAlB;;AAKA,QAAIQ,SAAJ,EAAe;AACbE,MAAAA,MAAM,CAACC,MAAP,CAAcL,KAAd,EAAqBE,SAArB;AACD;;AACDJ,IAAAA,cAAc,CAACQ,qBAAf,CAAqCN,KAArC,EAA4CN,eAA5C;AACD;;AAMD,MAAIK,IAAI,CAACQ,OAAL,IAAgBR,IAAI,CAACQ,OAAL,CAAa,CAAb,CAApB,EAAqC;AACnC,WAAOR,IAAI,CAACQ,OAAL,CAAa,CAAb,EAAgBC,GAAvB;AACD;;AAGDV,EAAAA,cAAc,CAACW,eAAf,CAA+Bf,eAA/B;AACD","sourcesContent":["// GLTF 1.0 EXTENSION: KHR_binary_glTF\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/1.0/Khronos/KHR_binary_glTF\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_KHR_binary_glTF} from '../types/gltf-types';\n\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst KHR_BINARY_GLTF = 'KHR_binary_glTF';\n\n/** Extension name */\nexport const name = KHR_BINARY_GLTF;\n\nexport function preprocess(gltfData: {json: GLTF}): void {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Note: json.buffers.binary_glTF also needs to be replaced\n // This is currently done during gltf normalization\n\n // Image and shader nodes can have the extension\n // https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/schema/image.KHR_binary_glTF.schema.json\n for (const image of json.images || []) {\n const extension = gltfScenegraph.getObjectExtension<GLTF_KHR_binary_glTF>(\n image,\n KHR_BINARY_GLTF\n );\n // The data in the extension is valid as glTF 2.0 data inside the object, so just copy it in\n if (extension) {\n Object.assign(image, extension);\n }\n gltfScenegraph.removeObjectExtension(image, KHR_BINARY_GLTF);\n }\n\n // TODO shaders - At least traverse and throw error if used?\n // https://github.com/KhronosGroup/glTF/blob/master/extensions/1.0/Khronos/KHR_binary_glTF/schema/shader.KHR_binary_glTF.schema.json\n\n // glTF v1 one files have a partially formed URI field that is not expected in (and causes problems in) 2.0\n if (json.buffers && json.buffers[0]) {\n delete json.buffers[0].uri;\n }\n\n // Remove the top-level extension as it has now been removed from all nodes\n gltfScenegraph.removeExtension(KHR_BINARY_GLTF);\n}\n\n// KHR_binary_gltf is a 1.0 extension that is supported natively by 2.0\n// export function encode() {\n// throw new Error(KHR_BINARY_GLTF);\n// }\n"],"file":"KHR_binary_gltf.js"}
|
|
@@ -1,8 +1,16 @@
|
|
|
1
1
|
import { DracoLoader } from '@loaders.gl/draco';
|
|
2
2
|
import { sliceArrayBuffer } from '@loaders.gl/loader-utils';
|
|
3
3
|
import { default as Scenegraph } from '../api/gltf-scenegraph';
|
|
4
|
-
import { KHR_DRACO_MESH_COMPRESSION } from '../gltf-utils/gltf-constants';
|
|
5
4
|
import { getGLTFAccessors, getGLTFAccessor } from '../gltf-utils/gltf-attribute-utils';
|
|
5
|
+
const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
|
|
6
|
+
export const name = KHR_DRACO_MESH_COMPRESSION;
|
|
7
|
+
export function preprocess(gltfData, options, context) {
|
|
8
|
+
const scenegraph = new Scenegraph(gltfData);
|
|
9
|
+
|
|
10
|
+
for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {
|
|
11
|
+
if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
6
14
|
export async function decode(gltfData, options, context) {
|
|
7
15
|
var _options$gltf;
|
|
8
16
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":["DracoLoader","sliceArrayBuffer","default","Scenegraph","KHR_DRACO_MESH_COMPRESSION","getGLTFAccessors","getGLTFAccessor","decode","gltfData","options","context","gltf","decompressMeshes","scenegraph","promises","primitive","makeMeshPrimitiveIterator","getObjectExtension","push","decompressPrimitive","Promise","all","removeExtension","encode","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","parse","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","checkPrimitive","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys","length"],"mappings":"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","sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n\n/* eslint-disable camelcase */\nimport type {GLTF, GLTFAccessor, GLTFMeshPrimitive} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {default as Scenegraph} from '../api/gltf-scenegraph';\nimport {KHR_DRACO_MESH_COMPRESSION} from '../gltf-utils/gltf-constants';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\n// Note: We have a \"soft dependency\" on DracoWriter to avoid bundling it when not needed\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new Scenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new Scenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: Scenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION);\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n // delete primitive.extensions[KHR_DRACO_MESH_COMPRESSION];\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"file":"KHR_draco_mesh_compression.js"}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/extensions/KHR_draco_mesh_compression.ts"],"names":["DracoLoader","sliceArrayBuffer","default","Scenegraph","getGLTFAccessors","getGLTFAccessor","KHR_DRACO_MESH_COMPRESSION","name","preprocess","gltfData","options","context","scenegraph","primitive","makeMeshPrimitiveIterator","getObjectExtension","decode","gltf","decompressMeshes","promises","push","decompressPrimitive","Promise","all","removeExtension","encode","mesh","json","meshes","compressMesh","addRequiredExtension","dracoExtension","buffer","getTypedArrayForBufferView","bufferView","bufferCopy","byteOffset","parse","dracoOptions","decodedData","decodedAttributes","attributes","attributeName","decodedAttribute","Object","entries","accessorIndex","accessor","getAccessor","min","max","indices","checkPrimitive","mode","DracoWriter","Error","compressedData","encodeSync","parseSync","fauxAccessors","_addFauxAttributes","bufferViewIndex","addBufferView","glTFMesh","primitives","extensions","keys","length"],"mappings":"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","sourcesContent":["// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compression\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\n/* eslint-disable camelcase */\n\n/* eslint-disable camelcase */\nimport type {\n GLTF,\n GLTFAccessor,\n GLTFMeshPrimitive,\n GLTF_KHR_draco_mesh_compression\n} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport type {LoaderContext} from '@loaders.gl/loader-utils';\nimport {DracoLoader} from '@loaders.gl/draco';\nimport {DracoLoaderOptions, DracoMesh} from '@loaders.gl/draco';\nimport {sliceArrayBuffer} from '@loaders.gl/loader-utils';\nimport {default as Scenegraph} from '../api/gltf-scenegraph';\nimport {getGLTFAccessors, getGLTFAccessor} from '../gltf-utils/gltf-attribute-utils';\n\nconst KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';\n\n/** Extension name */\nexport const name = KHR_DRACO_MESH_COMPRESSION;\n\nexport function preprocess(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): void {\n const scenegraph = new Scenegraph(gltfData);\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n // TODO - Remove fallback accessors to make sure we don't load unnecessary buffers\n }\n }\n}\n\nexport async function decode(\n gltfData: {json: GLTF},\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n if (!options?.gltf?.decompressMeshes) {\n return;\n }\n\n const scenegraph = new Scenegraph(gltfData);\n const promises: Promise<void>[] = [];\n for (const primitive of makeMeshPrimitiveIterator(scenegraph)) {\n if (scenegraph.getObjectExtension(primitive, KHR_DRACO_MESH_COMPRESSION)) {\n promises.push(decompressPrimitive(scenegraph, primitive, options, context));\n }\n }\n\n // Decompress meshes in parallel\n await Promise.all(promises);\n\n // We have now decompressed all primitives, so remove the top-level extensions\n scenegraph.removeExtension(KHR_DRACO_MESH_COMPRESSION);\n}\n\nexport function encode(gltfData, options: GLTFLoaderOptions = {}): void {\n const scenegraph = new Scenegraph(gltfData);\n\n for (const mesh of scenegraph.json.meshes || []) {\n // eslint-disable-next-line camelcase\n // @ts-ignore\n compressMesh(mesh, options);\n // NOTE: Only add the extension if something was actually compressed\n scenegraph.addRequiredExtension(KHR_DRACO_MESH_COMPRESSION);\n }\n}\n\n// DECODE\n\n// Unpacks one mesh primitive and removes the extension from the primitive\n// DracoDecoder needs to be imported and registered by app\n// Returns: Promise that resolves when all pending draco decoder jobs for this mesh complete\n\n// TODO - Implement fallback behavior per KHR_DRACO_MESH_COMPRESSION spec\n\nasync function decompressPrimitive(\n scenegraph: Scenegraph,\n primitive: GLTFMeshPrimitive,\n options: GLTFLoaderOptions,\n context: LoaderContext\n): Promise<void> {\n const dracoExtension = scenegraph.getObjectExtension<GLTF_KHR_draco_mesh_compression>(\n primitive,\n KHR_DRACO_MESH_COMPRESSION\n );\n if (!dracoExtension) {\n return;\n }\n\n const buffer = scenegraph.getTypedArrayForBufferView(dracoExtension.bufferView);\n // TODO - parse does not yet deal well with byte offsets embedded in typed arrays. Copy buffer\n // TODO - remove when `parse` is fixed to handle `byteOffset`s\n const bufferCopy = sliceArrayBuffer(buffer.buffer, buffer.byteOffset); // , buffer.byteLength);\n\n const {parse} = context;\n const dracoOptions: DracoLoaderOptions = {...options};\n\n // TODO - remove hack: The entire tileset might be included, too expensive to serialize\n delete dracoOptions['3d-tiles'];\n const decodedData = (await parse(bufferCopy, DracoLoader, dracoOptions, context)) as DracoMesh;\n\n const decodedAttributes: {[key: string]: GLTFAccessor} = getGLTFAccessors(decodedData.attributes);\n\n // Restore min/max values\n for (const [attributeName, decodedAttribute] of Object.entries(decodedAttributes)) {\n if (attributeName in primitive.attributes) {\n const accessorIndex: number = primitive.attributes[attributeName];\n const accessor = scenegraph.getAccessor(accessorIndex);\n if (accessor?.min && accessor?.max) {\n decodedAttribute.min = accessor.min;\n decodedAttribute.max = accessor.max;\n }\n }\n }\n\n // @ts-ignore\n primitive.attributes = decodedAttributes;\n if (decodedData.indices) {\n // @ts-ignore\n primitive.indices = getGLTFAccessor(decodedData.indices);\n }\n\n // Extension has been processed, delete it\n // delete primitive.extensions[KHR_DRACO_MESH_COMPRESSION];\n\n checkPrimitive(primitive);\n}\n\n// ENCODE\n\n// eslint-disable-next-line max-len\n// Only TRIANGLES: 0x0004 and TRIANGLE_STRIP: 0x0005 are supported\nfunction compressMesh(attributes, indices, mode: number = 4, options, context: LoaderContext) {\n if (!options.DracoWriter) {\n throw new Error('options.gltf.DracoWriter not provided');\n }\n\n // TODO - use DracoWriter using encode w/ registered DracoWriter...\n const compressedData = options.DracoWriter.encodeSync({attributes});\n\n // Draco compression may change the order and number of vertices in a mesh.\n // To satisfy the requirement that accessors properties be correct for both\n // compressed and uncompressed data, generators should create uncompressed\n // attributes and indices using data that has been decompressed from the Draco buffer,\n // rather than the original source data.\n // @ts-ignore TODO this needs to be fixed\n const decodedData = context?.parseSync?.({attributes});\n const fauxAccessors = options._addFauxAttributes(decodedData.attributes);\n\n const bufferViewIndex = options.addBufferView(compressedData);\n\n const glTFMesh = {\n primitives: [\n {\n attributes: fauxAccessors, // TODO - verify with spec\n mode, // GL.POINTS\n extensions: {\n [KHR_DRACO_MESH_COMPRESSION]: {\n bufferView: bufferViewIndex,\n attributes: fauxAccessors // TODO - verify with spec\n }\n }\n }\n ]\n };\n\n return glTFMesh;\n}\n\n// UTILS\n\nfunction checkPrimitive(primitive: GLTFMeshPrimitive) {\n if (!primitive.attributes && Object.keys(primitive.attributes).length > 0) {\n throw new Error('glTF: Empty primitive detected: Draco decompression failure?');\n }\n}\n\nfunction* makeMeshPrimitiveIterator(scenegraph) {\n for (const mesh of scenegraph.json.meshes || []) {\n for (const primitive of mesh.primitives) {\n yield primitive;\n }\n }\n}\n"],"file":"KHR_draco_mesh_compression.js"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import GLTFScenegraph from '../api/gltf-scenegraph';
|
|
2
|
+
const KHR_TEXTURE_BASISU = 'KHR_texture_basisu';
|
|
3
|
+
export const name = KHR_TEXTURE_BASISU;
|
|
4
|
+
export function preprocess(gltfData, options) {
|
|
5
|
+
const scene = new GLTFScenegraph(gltfData);
|
|
6
|
+
const {
|
|
7
|
+
json
|
|
8
|
+
} = scene;
|
|
9
|
+
|
|
10
|
+
for (const texture of json.textures || []) {
|
|
11
|
+
const extension = scene.getObjectExtension(texture, KHR_TEXTURE_BASISU);
|
|
12
|
+
|
|
13
|
+
if (extension) {
|
|
14
|
+
texture.source = extension.source;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
scene.removeObjectExtension(texture, KHR_TEXTURE_BASISU);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
scene.removeExtension(KHR_TEXTURE_BASISU);
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=KHR_texture_basisu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/extensions/KHR_texture_basisu.ts"],"names":["GLTFScenegraph","KHR_TEXTURE_BASISU","name","preprocess","gltfData","options","scene","json","texture","textures","extension","getObjectExtension","source","removeObjectExtension","removeExtension"],"mappings":"AAOA,OAAOA,cAAP,MAA2B,wBAA3B;AAEA,MAAMC,kBAAkB,GAAG,oBAA3B;AAGA,OAAO,MAAMC,IAAI,GAAGD,kBAAb;AAMP,OAAO,SAASE,UAAT,CAAoBC,QAApB,EAA4CC,OAA5C,EAA8E;AACnF,QAAMC,KAAK,GAAG,IAAIN,cAAJ,CAAmBI,QAAnB,CAAd;AACA,QAAM;AAACG,IAAAA;AAAD,MAASD,KAAf;;AAEA,OAAK,MAAME,OAAX,IAAsBD,IAAI,CAACE,QAAL,IAAiB,EAAvC,EAA2C;AACzC,UAAMC,SAAS,GAAGJ,KAAK,CAACK,kBAAN,CAChBH,OADgB,EAEhBP,kBAFgB,CAAlB;;AAIA,QAAIS,SAAJ,EAAe;AACbF,MAAAA,OAAO,CAACI,MAAR,GAAiBF,SAAS,CAACE,MAA3B;AACD;;AACDN,IAAAA,KAAK,CAACO,qBAAN,CAA4BL,OAA5B,EAAqCP,kBAArC;AACD;;AAGDK,EAAAA,KAAK,CAACQ,eAAN,CAAsBb,kBAAtB;AACD","sourcesContent":["// GLTF EXTENSION: EXT_TEXTURE_WEBP\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/EXT_TEXTURE_WEBP\n/* eslint-disable camelcase */\n\nimport type {GLTF, GLTF_KHR_texture_basisu} from '../types/gltf-types';\nimport type {GLTFLoaderOptions} from '../../gltf-loader';\n\nimport GLTFScenegraph from '../api/gltf-scenegraph';\n\nconst KHR_TEXTURE_BASISU = 'KHR_texture_basisu';\n\n/** Extension name */\nexport const name = KHR_TEXTURE_BASISU;\n\n/**\n * Replaces a texture source reference with the extension texture\n * Done in preprocess() to prevent load of default image\n */\nexport function preprocess(gltfData: {json: GLTF}, options: GLTFLoaderOptions): void {\n const scene = new GLTFScenegraph(gltfData);\n const {json} = scene;\n\n for (const texture of json.textures || []) {\n const extension = scene.getObjectExtension<GLTF_KHR_texture_basisu>(\n texture,\n KHR_TEXTURE_BASISU\n );\n if (extension) {\n texture.source = extension.source;\n }\n scene.removeObjectExtension(texture, KHR_TEXTURE_BASISU);\n }\n\n // Remove the top-level extension\n scene.removeExtension(KHR_TEXTURE_BASISU);\n}\n"],"file":"KHR_texture_basisu.js"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { assert } from '
|
|
2
|
-
import GLTFScenegraph from '
|
|
3
|
-
|
|
1
|
+
import { assert } from '../../utils/assert';
|
|
2
|
+
import GLTFScenegraph from '../../api/gltf-scenegraph';
|
|
3
|
+
const KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';
|
|
4
|
+
export const name = KHR_LIGHTS_PUNCTUAL;
|
|
4
5
|
export async function decode(gltfData) {
|
|
5
6
|
const gltfScenegraph = new GLTFScenegraph(gltfData);
|
|
6
7
|
const {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/extensions/deprecated/KHR_lights_punctual.ts"],"names":["assert","GLTFScenegraph","KHR_LIGHTS_PUNCTUAL","name","decode","gltfData","gltfScenegraph","json","extension","getExtension","lights","removeExtension","node","nodes","nodeExtension","getObjectExtension","light","removeObjectExtension","encode","addExtension","addObjectExtension"],"mappings":"AAKA,SAAQA,MAAR,QAAqB,oBAArB;AACA,OAAOC,cAAP,MAA2B,2BAA3B;AAEA,MAAMC,mBAAmB,GAAG,qBAA5B;AAEA,OAAO,MAAMC,IAAI,GAAGD,mBAAb;AAEP,OAAO,eAAeE,MAAf,CAAsBC,QAAtB,EAA6D;AAClE,QAAMC,cAAc,GAAG,IAAIL,cAAJ,CAAmBI,QAAnB,CAAvB;AACA,QAAM;AAACE,IAAAA;AAAD,MAASD,cAAf;AAGA,QAAME,SAAS,GAAGF,cAAc,CAACG,YAAf,CAA4BP,mBAA5B,CAAlB;;AACA,MAAIM,SAAJ,EAAe;AAEbF,IAAAA,cAAc,CAACC,IAAf,CAAoBG,MAApB,GAA6BF,SAAS,CAACE,MAAvC;AACAJ,IAAAA,cAAc,CAACK,eAAf,CAA+BT,mBAA/B;AACD;;AAID,OAAK,MAAMU,IAAX,IAAmBL,IAAI,CAACM,KAAL,IAAc,EAAjC,EAAqC;AACnC,UAAMC,aAAa,GAAGR,cAAc,CAACS,kBAAf,CAAkCH,IAAlC,EAAwCV,mBAAxC,CAAtB;;AACA,QAAIY,aAAJ,EAAmB;AAEjBF,MAAAA,IAAI,CAACI,KAAL,GAAaF,aAAa,CAACE,KAA3B;AACD;;AACDV,IAAAA,cAAc,CAACW,qBAAf,CAAqCL,IAArC,EAA2CV,mBAA3C;AACD;AACF;AAGD,OAAO,eAAegB,MAAf,CAAsBb,QAAtB,EAA+C;AACpD,QAAMC,cAAc,GAAG,IAAIL,cAAJ,CAAmBI,QAAnB,CAAvB;AACA,QAAM;AAACE,IAAAA;AAAD,MAASD,cAAf;;AAGA,MAAIC,IAAI,CAACG,MAAT,EAAiB;AACf,UAAMF,SAAS,GAAGF,cAAc,CAACa,YAAf,CAA4BjB,mBAA5B,CAAlB;AAEAF,IAAAA,MAAM,CAAC,CAACQ,SAAS,CAACE,MAAZ,CAAN;AAEAF,IAAAA,SAAS,CAACE,MAAV,GAAmBH,IAAI,CAACG,MAAxB;AAEA,WAAOH,IAAI,CAACG,MAAZ;AACD;;AAKD,MAAIJ,cAAc,CAACC,IAAf,CAAoBG,MAAxB,EAAgC;AAE9B,SAAK,MAAMM,KAAX,IAAoBV,cAAc,CAACC,IAAf,CAAoBG,MAAxC,EAAgD;AAC9C,YAAME,IAAI,GAAGI,KAAK,CAACJ,IAAnB;AACAN,MAAAA,cAAc,CAACc,kBAAf,CAAkCR,IAAlC,EAAwCV,mBAAxC,EAA6Dc,KAA7D;AACD;;AAED,WAAOV,cAAc,CAACC,IAAf,CAAoBG,MAA3B;AACD;AACF","sourcesContent":["// GLTF EXTENSION: KHR_lights_punctual\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctual\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport {assert} from '../../utils/assert';\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';\n\nexport const name = KHR_LIGHTS_PUNCTUAL;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Move the light array out of the extension and remove the extension\n const extension = gltfScenegraph.getExtension(KHR_LIGHTS_PUNCTUAL);\n if (extension) {\n // @ts-ignore\n gltfScenegraph.json.lights = extension.lights;\n gltfScenegraph.removeExtension(KHR_LIGHTS_PUNCTUAL);\n }\n\n // Any nodes that have the extension, add lights field pointing to light object\n // and remove the extension\n for (const node of json.nodes || []) {\n const nodeExtension = gltfScenegraph.getObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n if (nodeExtension) {\n // @ts-ignore\n node.light = nodeExtension.light;\n }\n gltfScenegraph.removeObjectExtension(node, KHR_LIGHTS_PUNCTUAL);\n }\n}\n\n// Move the light ar ray out of the extension and remove the extension\nexport async function encode(gltfData): Promise<void> {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // @ts-ignore\n if (json.lights) {\n const extension = gltfScenegraph.addExtension(KHR_LIGHTS_PUNCTUAL);\n // @ts-ignore\n assert(!extension.lights);\n // @ts-ignore\n extension.lights = json.lights;\n // @ts-ignore\n delete json.lights;\n }\n\n // Any nodes that have lights field pointing to light object\n // add the extension\n // @ts-ignore\n if (gltfScenegraph.json.lights) {\n // @ts-ignore\n for (const light of gltfScenegraph.json.lights) {\n const node = light.node;\n gltfScenegraph.addObjectExtension(node, KHR_LIGHTS_PUNCTUAL, light);\n }\n // @ts-ignore\n delete gltfScenegraph.json.lights;\n }\n}\n"],"file":"KHR_lights_punctual.js"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import GLTFScenegraph from '
|
|
2
|
-
|
|
1
|
+
import GLTFScenegraph from '../../api/gltf-scenegraph';
|
|
2
|
+
const KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';
|
|
3
|
+
export const name = KHR_MATERIALS_UNLIT;
|
|
3
4
|
export async function decode(gltfData) {
|
|
4
5
|
const gltfScenegraph = new GLTFScenegraph(gltfData);
|
|
5
6
|
const {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/extensions/deprecated/KHR_materials_unlit.ts"],"names":["GLTFScenegraph","KHR_MATERIALS_UNLIT","name","decode","gltfData","gltfScenegraph","json","removeExtension","material","materials","extension","extensions","KHR_materials_unlit","unlit","removeObjectExtension","encode","addObjectExtension","addExtension"],"mappings":"AAKA,OAAOA,cAAP,MAA2B,2BAA3B;AAEA,MAAMC,mBAAmB,GAAG,qBAA5B;AAEA,OAAO,MAAMC,IAAI,GAAGD,mBAAb;AAEP,OAAO,eAAeE,MAAf,CAAsBC,QAAtB,EAA6D;AAClE,QAAMC,cAAc,GAAG,IAAIL,cAAJ,CAAmBI,QAAnB,CAAvB;AACA,QAAM;AAACE,IAAAA;AAAD,MAASD,cAAf;AAGAA,EAAAA,cAAc,CAACE,eAAf,CAA+BN,mBAA/B;;AAIA,OAAK,MAAMO,QAAX,IAAuBF,IAAI,CAACG,SAAL,IAAkB,EAAzC,EAA6C;AAC3C,UAAMC,SAAS,GAAGF,QAAQ,CAACG,UAAT,IAAuBH,QAAQ,CAACG,UAAT,CAAoBC,mBAA7D;;AACA,QAAIF,SAAJ,EAAe;AAEbF,MAAAA,QAAQ,CAACK,KAAT,GAAiB,IAAjB;AACD;;AACDR,IAAAA,cAAc,CAACS,qBAAf,CAAqCN,QAArC,EAA+CP,mBAA/C;AACD;AACF;AAED,OAAO,SAASc,MAAT,CAAgBX,QAAhB,EAA0B;AAC/B,QAAMC,cAAc,GAAG,IAAIL,cAAJ,CAAmBI,QAAnB,CAAvB;AACA,QAAM;AAACE,IAAAA;AAAD,MAASD,cAAf;;AAKA,MAAIA,cAAc,CAACI,SAAnB,EAA8B;AAC5B,SAAK,MAAMD,QAAX,IAAuBF,IAAI,CAACG,SAAL,IAAkB,EAAzC,EAA6C;AAE3C,UAAID,QAAQ,CAACK,KAAb,EAAoB;AAElB,eAAOL,QAAQ,CAACK,KAAhB;AACAR,QAAAA,cAAc,CAACW,kBAAf,CAAkCR,QAAlC,EAA4CP,mBAA5C,EAAiE,EAAjE;AACAI,QAAAA,cAAc,CAACY,YAAf,CAA4BhB,mBAA5B;AACD;AACF;AACF;AACF","sourcesContent":["// GLTF EXTENSION: KHR_materials_unlit\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlit\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';\n\nexport const name = KHR_MATERIALS_UNLIT;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Remove the top-level extension\n gltfScenegraph.removeExtension(KHR_MATERIALS_UNLIT);\n\n // Any nodes that have the extension, add lights field pointing to light object\n // and remove the extension\n for (const material of json.materials || []) {\n const extension = material.extensions && material.extensions.KHR_materials_unlit;\n if (extension) {\n // @ts-ignore TODO\n material.unlit = true;\n }\n gltfScenegraph.removeObjectExtension(material, KHR_MATERIALS_UNLIT);\n }\n}\n\nexport function encode(gltfData) {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n // Any nodes that have lights field pointing to light object\n // add the extension\n // @ts-ignore\n if (gltfScenegraph.materials) {\n for (const material of json.materials || []) {\n // @ts-ignore\n if (material.unlit) {\n // @ts-ignore\n delete material.unlit;\n gltfScenegraph.addObjectExtension(material, KHR_MATERIALS_UNLIT, {});\n gltfScenegraph.addExtension(KHR_MATERIALS_UNLIT);\n }\n }\n }\n}\n"],"file":"KHR_materials_unlit.js"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import GLTFScenegraph from '
|
|
2
|
-
|
|
1
|
+
import GLTFScenegraph from '../../api/gltf-scenegraph';
|
|
2
|
+
const KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';
|
|
3
|
+
export const name = KHR_TECHNIQUES_WEBGL;
|
|
3
4
|
export async function decode(gltfData) {
|
|
4
5
|
const gltfScenegraph = new GLTFScenegraph(gltfData);
|
|
5
6
|
const {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/extensions/deprecated/KHR_techniques_webgl.ts"],"names":["GLTFScenegraph","KHR_TECHNIQUES_WEBGL","name","decode","gltfData","gltfScenegraph","json","extension","getExtension","techniques","resolveTechniques","material","materials","materialExtension","getObjectExtension","technique","Object","assign","values","resolveValues","removeObjectExtension","removeExtension","encode","options","techniquesExtension","programs","shaders","textDecoder","TextDecoder","forEach","shader","Number","isFinite","bufferView","code","getTypedArrayForBufferView","Error","program","fragmentShader","vertexShader","keys","uniforms","uniform","value","index","undefined","texture","getTexture"],"mappings":"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","sourcesContent":["// GLTF EXTENSION: KHR_techniques_webgl\n// https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_techniques_webgl\n\nimport type {GLTF} from '../../types/gltf-types';\n\nimport GLTFScenegraph from '../../api/gltf-scenegraph';\n\nconst KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';\n\nexport const name = KHR_TECHNIQUES_WEBGL;\n\nexport async function decode(gltfData: {json: GLTF}): Promise<void> {\n const gltfScenegraph = new GLTFScenegraph(gltfData);\n const {json} = gltfScenegraph;\n\n const extension = gltfScenegraph.getExtension(KHR_TECHNIQUES_WEBGL);\n if (extension) {\n const techniques = resolveTechniques(extension, gltfScenegraph);\n\n for (const material of json.materials || []) {\n const materialExtension = gltfScenegraph.getObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n if (materialExtension) {\n // @ts-ignore TODO\n material.technique = Object.assign(\n {},\n materialExtension,\n // @ts-ignore\n techniques[materialExtension.technique]\n );\n // @ts-ignore TODO\n material.technique.values = resolveValues(material.technique, gltfScenegraph);\n }\n gltfScenegraph.removeObjectExtension(material, KHR_TECHNIQUES_WEBGL);\n }\n\n gltfScenegraph.removeExtension(KHR_TECHNIQUES_WEBGL);\n }\n}\n// eslint-disable-next-line\nexport async function encode(gltfData, options): Promise<void> {\n // TODO\n}\n\nfunction resolveTechniques(\n techniquesExtension: {[key: string]: any},\n // programs: {[key: string]: any}[],\n // shaders: {[key: string]: any}[],\n // techniques: {[key: string]: any}[]\n gltfScenegraph\n) {\n const {programs = [], shaders = [], techniques = []} = techniquesExtension;\n const textDecoder = new TextDecoder();\n\n shaders.forEach((shader) => {\n if (Number.isFinite(shader.bufferView)) {\n shader.code = textDecoder.decode(\n gltfScenegraph.getTypedArrayForBufferView(shader.bufferView)\n );\n } else {\n // TODO: handle URI shader\n throw new Error('KHR_techniques_webgl: no shader code');\n }\n });\n\n programs.forEach((program) => {\n program.fragmentShader = shaders[program.fragmentShader];\n program.vertexShader = shaders[program.vertexShader];\n });\n\n techniques.forEach((technique) => {\n technique.program = programs[technique.program];\n });\n\n return techniques;\n}\n\nfunction resolveValues(technique, gltfScenegraph) {\n const values = Object.assign({}, technique.values);\n\n // merge values from uniforms\n Object.keys(technique.uniforms || {}).forEach((uniform) => {\n if (technique.uniforms[uniform].value && !(uniform in values)) {\n values[uniform] = technique.uniforms[uniform].value;\n }\n });\n\n // resolve textures\n Object.keys(values).forEach((uniform) => {\n if (typeof values[uniform] === 'object' && values[uniform].index !== undefined) {\n // Assume this is a texture\n // TODO: find if there are any other types that can be referenced\n values[uniform].texture = gltfScenegraph.getTexture(values[uniform].index);\n }\n });\n\n return values;\n}\n"],"file":"KHR_techniques_webgl.js"}
|
|
@@ -1,9 +1,3 @@
|
|
|
1
|
-
export const KHR_BINARY_GLTF = 'KHR_binary_glTF';
|
|
2
|
-
export const KHR_DRACO_MESH_COMPRESSION = 'KHR_draco_mesh_compression';
|
|
3
|
-
export const KHR_LIGHTS_PUNCTUAL = 'KHR_lights_punctual';
|
|
4
|
-
export const KHR_MATERIALS_UNLIT = 'KHR_materials_unlit';
|
|
5
|
-
export const KHR_TECHNIQUES_WEBGL = 'KHR_techniques_webgl';
|
|
6
|
-
export const EXT_MESHOPT_COMPRESSION = 'EXT_meshopt_compression';
|
|
7
1
|
const COMPONENTS = {
|
|
8
2
|
SCALAR: 1,
|
|
9
3
|
VEC2: 2,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/gltf-utils/gltf-constants.ts"],"names":["
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/gltf-utils/gltf-constants.ts"],"names":["COMPONENTS","SCALAR","VEC2","VEC3","VEC4","MAT2","MAT3","MAT4","BYTES","getBytesFromComponentType","componentType","getSizeFromAccessorType","type","getGLEnumFromSamplerParameter","parameter","GL_TEXTURE_MAG_FILTER","GL_TEXTURE_MIN_FILTER","GL_TEXTURE_WRAP_S","GL_TEXTURE_WRAP_T","PARAMETER_MAP","magFilter","minFilter","wrapS","wrapT"],"mappings":"AAAA,MAAMA,UAAU,GAAG;AACjBC,EAAAA,MAAM,EAAE,CADS;AAEjBC,EAAAA,IAAI,EAAE,CAFW;AAGjBC,EAAAA,IAAI,EAAE,CAHW;AAIjBC,EAAAA,IAAI,EAAE,CAJW;AAKjBC,EAAAA,IAAI,EAAE,CALW;AAMjBC,EAAAA,IAAI,EAAE,CANW;AAOjBC,EAAAA,IAAI,EAAE;AAPW,CAAnB;AAUA,MAAMC,KAAK,GAAG;AACZ,QAAM,CADM;AAEZ,QAAM,CAFM;AAGZ,QAAM,CAHM;AAIZ,QAAM,CAJM;AAKZ,QAAM,CALM;AAMZ,QAAM;AANM,CAAd;AAWA,OAAO,SAASC,yBAAT,CAAmCC,aAAnC,EAAkD;AACvD,SAAOF,KAAK,CAACE,aAAD,CAAZ;AACD;AAED,OAAO,SAASC,uBAAT,CAAiCC,IAAjC,EAAuC;AAC5C,SAAOZ,UAAU,CAACY,IAAD,CAAjB;AACD;AAED,OAAO,SAASC,6BAAT,CAAuCC,SAAvC,EAAkD;AACvD,QAAMC,qBAAqB,GAAG,MAA9B;AACA,QAAMC,qBAAqB,GAAG,MAA9B;AACA,QAAMC,iBAAiB,GAAG,MAA1B;AACA,QAAMC,iBAAiB,GAAG,MAA1B;AAEA,QAAMC,aAAa,GAAG;AACpBC,IAAAA,SAAS,EAAEL,qBADS;AAEpBM,IAAAA,SAAS,EAAEL,qBAFS;AAGpBM,IAAAA,KAAK,EAAEL,iBAHa;AAIpBM,IAAAA,KAAK,EAAEL;AAJa,GAAtB;AAOA,SAAOC,aAAa,CAACL,SAAD,CAApB;AACD","sourcesContent":["const COMPONENTS = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\n\nconst BYTES = {\n 5120: 1, // BYTE\n 5121: 1, // UNSIGNED_BYTE\n 5122: 2, // SHORT\n 5123: 2, // UNSIGNED_SHORT\n 5125: 4, // UNSIGNED_INT\n 5126: 4 // FLOAT\n};\n\n// ENUM LOOKUP\n\nexport function getBytesFromComponentType(componentType) {\n return BYTES[componentType];\n}\n\nexport function getSizeFromAccessorType(type) {\n return COMPONENTS[type];\n}\n\nexport function getGLEnumFromSamplerParameter(parameter) {\n const GL_TEXTURE_MAG_FILTER = 0x2800;\n const GL_TEXTURE_MIN_FILTER = 0x2801;\n const GL_TEXTURE_WRAP_S = 0x2802;\n const GL_TEXTURE_WRAP_T = 0x2803;\n\n const PARAMETER_MAP = {\n magFilter: GL_TEXTURE_MAG_FILTER,\n minFilter: GL_TEXTURE_MIN_FILTER,\n wrapS: GL_TEXTURE_WRAP_S,\n wrapT: GL_TEXTURE_WRAP_T\n };\n\n return PARAMETER_MAP[parameter];\n}\n"],"file":"gltf-constants.js"}
|
|
@@ -8,7 +8,7 @@ export function resolveUrl(url, options) {
|
|
|
8
8
|
const baseUrl = options.baseUri || options.uri;
|
|
9
9
|
|
|
10
10
|
if (!baseUrl) {
|
|
11
|
-
throw new Error(
|
|
11
|
+
throw new Error("'baseUri' must be provided to resolve relative url ".concat(url));
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
return baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1) + url;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/gltf-utils/resolve-url.ts"],"names":["resolveUrl","url","options","absolute","startsWith","baseUrl","baseUri","uri","Error","substr","lastIndexOf"],"mappings":"AAEA,OAAO,SAASA,UAAT,CAAoBC,GAApB,EAAyBC,OAAzB,EAAkC;AAEvC,QAAMC,QAAQ,GAAGF,GAAG,CAACG,UAAJ,CAAe,OAAf,KAA2BH,GAAG,CAACG,UAAJ,CAAe,OAAf,CAA3B,IAAsDH,GAAG,CAACG,UAAJ,CAAe,QAAf,CAAvE;;AACA,MAAID,QAAJ,EAAc;AACZ,WAAOF,GAAP;AACD;;AACD,QAAMI,OAAO,GAAGH,OAAO,CAACI,OAAR,IAAmBJ,OAAO,CAACK,GAA3C;;AACA,MAAI,CAACF,OAAL,EAAc;AACZ,UAAM,IAAIG,KAAJ,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/gltf-utils/resolve-url.ts"],"names":["resolveUrl","url","options","absolute","startsWith","baseUrl","baseUri","uri","Error","substr","lastIndexOf"],"mappings":"AAEA,OAAO,SAASA,UAAT,CAAoBC,GAApB,EAAyBC,OAAzB,EAAkC;AAEvC,QAAMC,QAAQ,GAAGF,GAAG,CAACG,UAAJ,CAAe,OAAf,KAA2BH,GAAG,CAACG,UAAJ,CAAe,OAAf,CAA3B,IAAsDH,GAAG,CAACG,UAAJ,CAAe,QAAf,CAAvE;;AACA,MAAID,QAAJ,EAAc;AACZ,WAAOF,GAAP;AACD;;AACD,QAAMI,OAAO,GAAGH,OAAO,CAACI,OAAR,IAAmBJ,OAAO,CAACK,GAA3C;;AACA,MAAI,CAACF,OAAL,EAAc;AACZ,UAAM,IAAIG,KAAJ,8DAAgEP,GAAhE,EAAN;AACD;;AACD,SAAOI,OAAO,CAACI,MAAR,CAAe,CAAf,EAAkBJ,OAAO,CAACK,WAAR,CAAoB,GAApB,IAA2B,CAA7C,IAAkDT,GAAzD;AACD","sourcesContent":["// Resolves a relative url against a baseUrl\n// If url is absolute, return it unchanged\nexport function resolveUrl(url, options) {\n // TODO: Use better logic to handle all protocols plus not delay on data\n const absolute = url.startsWith('data:') || url.startsWith('http:') || url.startsWith('https:');\n if (absolute) {\n return url;\n }\n const baseUrl = options.baseUri || options.uri;\n if (!baseUrl) {\n throw new Error(`'baseUri' must be provided to resolve relative url ${url}`);\n }\n return baseUrl.substr(0, baseUrl.lastIndexOf('/') + 1) + url;\n}\n"],"file":"resolve-url.js"}
|
|
@@ -10,11 +10,7 @@ const GLB_V1_CONTENT_FORMAT_JSON = 0x0;
|
|
|
10
10
|
const LE = true;
|
|
11
11
|
|
|
12
12
|
function getMagicString(dataView, byteOffset = 0) {
|
|
13
|
-
return
|
|
14
|
-
${String.fromCharCode(dataView.getUint8(byteOffset + 0))}\
|
|
15
|
-
${String.fromCharCode(dataView.getUint8(byteOffset + 1))}\
|
|
16
|
-
${String.fromCharCode(dataView.getUint8(byteOffset + 2))}\
|
|
17
|
-
${String.fromCharCode(dataView.getUint8(byteOffset + 3))}`;
|
|
13
|
+
return "".concat(String.fromCharCode(dataView.getUint8(byteOffset + 0))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 1))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 2))).concat(String.fromCharCode(dataView.getUint8(byteOffset + 3)));
|
|
18
14
|
}
|
|
19
15
|
|
|
20
16
|
export function isGLB(arrayBuffer, byteOffset = 0, options = {}) {
|
|
@@ -51,7 +47,7 @@ export default function parseGLBSync(glb, arrayBuffer, byteOffset = 0, options =
|
|
|
51
47
|
return parseGLBV2(glb, dataView, byteOffset, options = {});
|
|
52
48
|
|
|
53
49
|
default:
|
|
54
|
-
throw new Error(
|
|
50
|
+
throw new Error("Invalid GLB version ".concat(glb.version, ". Only supports v1 and v2."));
|
|
55
51
|
}
|
|
56
52
|
}
|
|
57
53
|
|