parseGlb method

Future<Glb> parseGlb(
  1. String filePath
)

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,
  );
}