UNPKG

cesium

Version:

CesiumJS is a JavaScript library for creating 3D globes and 2D maps in a web browser without a plugin.

49 lines (44 loc) 2.15 kB
import addBuffer from './addBuffer.js' import ForEach from './ForEach.js' import readAccessorPacked from './readAccessorPacked.js' import ComponentDatatype from '../../Core/ComponentDatatype.js' import WebGLConstants from '../../Core/WebGLConstants.js' /** * Update accessors referenced by JOINTS_0 and WEIGHTS_0 attributes to use correct component types. * * @param {Object} gltf A javascript object containing a glTF asset. * @returns {Object} The glTF asset with compressed meshes. * * @private */ function updateAccessorComponentTypes(gltf) { var componentType; ForEach.accessorWithSemantic(gltf, 'JOINTS_0', function(accessorId) { var accessor = gltf.accessors[accessorId]; componentType = accessor.componentType; if (componentType === WebGLConstants.BYTE) { convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); } else if (componentType !== WebGLConstants.UNSIGNED_BYTE && componentType !== WebGLConstants.UNSIGNED_SHORT) { convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); } }); ForEach.accessorWithSemantic(gltf, 'WEIGHTS_0', function(accessorId) { var accessor = gltf.accessors[accessorId]; componentType = accessor.componentType; if (componentType === WebGLConstants.BYTE) { convertType(gltf, accessor, ComponentDatatype.UNSIGNED_BYTE); } else if (componentType === WebGLConstants.SHORT) { convertType(gltf, accessor, ComponentDatatype.UNSIGNED_SHORT); } }); return gltf; } function convertType(gltf, accessor, updatedComponentType) { var typedArray = ComponentDatatype.createTypedArray(updatedComponentType, readAccessorPacked(gltf, accessor)); var newBuffer = new Uint8Array(typedArray.buffer); accessor.bufferView = addBuffer(gltf, newBuffer); accessor.componentType = updatedComponentType; accessor.byteOffset = 0; } export default updateAccessorComponentTypes;