Add existing to tracked
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
||||
import ForEach from "./ForEach.js";
|
||||
import removeExtensionsUsed from "./removeExtensionsUsed.js";
|
||||
import defined from "../../Core/defined.js";
|
||||
|
||||
/**
|
||||
* Removes an extension from gltf.extensions, gltf.extensionsUsed, gltf.extensionsRequired, and any other objects in the glTF if it is present.
|
||||
*
|
||||
* @param {object} gltf A javascript object containing a glTF asset.
|
||||
* @param {string} extension The extension to remove.
|
||||
*
|
||||
* @returns {*} The extension data removed from gltf.extensions.
|
||||
*/
|
||||
function removeExtension(gltf, extension) {
|
||||
removeExtensionsUsed(gltf, extension); // Also removes from extensionsRequired
|
||||
|
||||
if (extension === "CESIUM_RTC") {
|
||||
removeCesiumRTC(gltf);
|
||||
}
|
||||
|
||||
return removeExtensionAndTraverse(gltf, extension);
|
||||
}
|
||||
|
||||
function removeCesiumRTC(gltf) {
|
||||
ForEach.technique(gltf, function (technique) {
|
||||
ForEach.techniqueUniform(technique, function (uniform) {
|
||||
if (uniform.semantic === "CESIUM_RTC_MODELVIEW") {
|
||||
uniform.semantic = "MODELVIEW";
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function removeExtensionAndTraverse(object, extension) {
|
||||
if (Array.isArray(object)) {
|
||||
const length = object.length;
|
||||
for (let i = 0; i < length; ++i) {
|
||||
removeExtensionAndTraverse(object[i], extension);
|
||||
}
|
||||
} else if (
|
||||
object !== null &&
|
||||
typeof object === "object" &&
|
||||
object.constructor === Object
|
||||
) {
|
||||
const extensions = object.extensions;
|
||||
let extensionData;
|
||||
if (defined(extensions)) {
|
||||
extensionData = extensions[extension];
|
||||
if (defined(extensionData)) {
|
||||
delete extensions[extension];
|
||||
if (Object.keys(extensions).length === 0) {
|
||||
delete object.extensions;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const key in object) {
|
||||
if (Object.prototype.hasOwnProperty.call(object, key)) {
|
||||
removeExtensionAndTraverse(object[key], extension);
|
||||
}
|
||||
}
|
||||
return extensionData;
|
||||
}
|
||||
}
|
||||
|
||||
export default removeExtension;
|
||||
Reference in New Issue
Block a user