GLTFMeshoptCompression constructor
GLTFMeshoptCompression(
- GLTFParser parser
Implementation
GLTFMeshoptCompression(this.parser) {
name = gltfExtensions["EXT_MESHOPT_COMPRESSION"]!;
loadBufferView = (index) async {
Map<String, dynamic> json = parser.json;
Map<String, dynamic> bufferView = json["bufferViews"][index];
if (bufferView["extensions"] != null &&
bufferView["extensions"][name] != null) {
final extensionDef = bufferView["extensions"][name];
final buffer =
await parser.getDependency('buffer', extensionDef.buffer);
final decoder = parser.options['meshoptDecoder'];
if (!decoder || !decoder.supported) {
if (json["extensionsRequired"] != null &&
json["extensionsRequired"].indexOf(name) >= 0) {
throw ('THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files');
} else {
// Assumes that the extension is optional and that fallback buffer data is present
return null;
}
}
final byteOffset = extensionDef.byteOffset ?? 0;
final byteLength = extensionDef.byteLength ?? 0;
final count = extensionDef.count;
final stride = extensionDef.byteStride;
final result = Uint8List(count * stride);
final source = Uint8List.view(buffer, byteOffset, byteLength);
decoder.decodeGltfBuffer(result, count, stride, source,
extensionDef.mode, extensionDef.filter);
return result;
} else {
return null;
}
};
}