parseGlb method
Implementation
Future<Glb> parseGlb(String filePath) async {
final content = await Flame.assets.readBinaryFile(filePath);
var cursor = 0;
Uint8List read(int bytes) {
cursor += bytes;
return content.sublist(cursor - bytes, cursor);
}
final magic = _parseString(read(4));
if (magic != 'glTF') {
throw Exception('Invalid magic number $magic');
}
final version = _parseInt(read(4));
if (version != 2) {
throw Exception('Invalid version $version');
}
final length = _parseInt(read(4));
final chunks = <GlbChunk>[];
while (cursor < content.length) {
final chunkLength = _parseInt(read(4));
final chunkType = _parseString(read(4));
final chunkData = read(chunkLength);
chunks.add(
GlbChunk(
length: chunkLength,
type: chunkType,
data: chunkData,
),
);
}
return Glb(
prefix: ModelParser.prefix(filePath),
version: version,
length: length,
chunks: chunks,
);
}