Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
private _loadIndicesAccessorAsync(context: string, accessor: IAccessor): Promise {
if (accessor.type !== AccessorType.SCALAR) {
throw new Error(`${context}/type: Invalid value ${accessor.type}`);
}
if (accessor.componentType !== AccessorComponentType.UNSIGNED_BYTE &&
accessor.componentType !== AccessorComponentType.UNSIGNED_SHORT &&
accessor.componentType !== AccessorComponentType.UNSIGNED_INT) {
throw new Error(`${context}/componentType: Invalid value ${accessor.componentType}`);
}
if (accessor._data) {
return accessor._data as Promise;
}
const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);
accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {
return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, accessor.count);
});
return accessor._data as Promise;
}
private _loadIndicesAccessorAsync(context: string, accessor: IAccessor): Promise {
if (accessor.type !== AccessorType.SCALAR) {
throw new Error(`${context}/type: Invalid value ${accessor.type}`);
}
if (accessor.componentType !== AccessorComponentType.UNSIGNED_BYTE &&
accessor.componentType !== AccessorComponentType.UNSIGNED_SHORT &&
accessor.componentType !== AccessorComponentType.UNSIGNED_INT) {
throw new Error(`${context}/componentType: Invalid value ${accessor.componentType}`);
}
if (accessor._data) {
return accessor._data as Promise;
}
if (accessor.sparse) {
const constructor = GLTFLoader._GetTypedArrayConstructor(`${context}/componentType`, accessor.componentType);
accessor._data = this._loadAccessorAsync(context, accessor, constructor);
}
else {
const bufferView = ArrayItem.Get(`${context}/bufferView`, this._gltf.bufferViews, accessor.bufferView);
accessor._data = this.loadBufferViewAsync(`/bufferViews/${bufferView.index}`, bufferView).then((data) => {
return GLTFLoader._GetTypedArray(context, accessor.componentType, data, accessor.byteOffset, accessor.count);
});
private static _GetTypedArrayConstructor(context: string, componentType: AccessorComponentType): TypedArrayConstructor {
switch (componentType) {
case AccessorComponentType.BYTE: return Int8Array;
case AccessorComponentType.UNSIGNED_BYTE: return Uint8Array;
case AccessorComponentType.SHORT: return Int16Array;
case AccessorComponentType.UNSIGNED_SHORT: return Uint16Array;
case AccessorComponentType.UNSIGNED_INT: return Uint32Array;
case AccessorComponentType.FLOAT: return Float32Array;
default: throw new Error(`${context}: Invalid component type ${componentType}`);
}
}
private static _GetTypedArray(context: string, componentType: AccessorComponentType, bufferView: ArrayBufferView, byteOffset: number | undefined, length: number): ArrayBufferView {
const buffer = bufferView.buffer;
byteOffset = bufferView.byteOffset + (byteOffset || 0);
try {
switch (componentType) {
case AccessorComponentType.BYTE: return new Int8Array(buffer, byteOffset, length);
case AccessorComponentType.UNSIGNED_BYTE: return new Uint8Array(buffer, byteOffset, length);
case AccessorComponentType.SHORT: return new Int16Array(buffer, byteOffset, length);
case AccessorComponentType.UNSIGNED_SHORT: return new Uint16Array(buffer, byteOffset, length);
case AccessorComponentType.UNSIGNED_INT: return new Uint32Array(buffer, byteOffset, length);
case AccessorComponentType.FLOAT: return new Float32Array(buffer, byteOffset, length);
default: throw new Error(`Invalid component type ${componentType}`);
}
}
catch (e) {
throw new Error(`${context}: ${e}`);
}
}