MCPcopy Create free account
hub / github.com/assimp/assimp / LoadLWO3Envelope

Method LoadLWO3Envelope

code/AssetLib/LWO/LWOLoader.cpp:1346–1442  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1344}
1345
1346void LWOImporter::LoadLWO3Envelope(unsigned int length) {
1347 LE_NCONST uint8_t *const end = mFileBuffer + length;
1348 AI_LWO_VALIDATE_CHUNK_LENGTH(length, ENVL, 4);
1349
1350 mEnvelopes.emplace_back();
1351 LWO::Envelope &envelope = mEnvelopes.back();
1352
1353 // Get the index of the envelope
1354 envelope.index = ReadVSizedIntLWO2(mFileBuffer);
1355
1356 // ... and read all blocks
1357 while (true) {
1358 if (mFileBuffer + 8 >= end) break;
1359 LE_NCONST IFF::ChunkHeader head = IFF::LoadChunk(mFileBuffer);
1360
1361 if (mFileBuffer + head.length > end)
1362 throw DeadlyImportError("LWO3: Invalid envelope chunk length");
1363
1364 uint8_t *const next = mFileBuffer + head.length;
1365 switch (head.type) {
1366 // Type & representation of the envelope
1367 case AI_LWO_TYPE:
1368 AI_LWO_VALIDATE_CHUNK_LENGTH(head.length, TYPE, 4);
1369 mFileBuffer++; // skip user format
1370
1371 // Determine type of envelope
1372 envelope.type = (LWO::EnvelopeType)*mFileBuffer;
1373 ++mFileBuffer;
1374 break;
1375
1376 // precondition
1377 case AI_LWO_PRE:
1378 AI_LWO_VALIDATE_CHUNK_LENGTH(head.length, PRE, 4);
1379 envelope.pre = (LWO::PrePostBehaviour)GetU2();
1380 break;
1381
1382 // postcondition
1383 case AI_LWO_POST:
1384 AI_LWO_VALIDATE_CHUNK_LENGTH(head.length, POST, 4);
1385 envelope.post = (LWO::PrePostBehaviour)GetU2();
1386 break;
1387
1388 // keyframe
1389 case AI_LWO_KEY: {
1390 AI_LWO_VALIDATE_CHUNK_LENGTH(head.length, KEY, 10);
1391
1392 envelope.keys.emplace_back();
1393 LWO::Key &key = envelope.keys.back();
1394
1395 key.time = GetF4();
1396 key.value = GetF4();
1397 break;
1398 }
1399
1400 // interval interpolation
1401 case AI_LWO_SPAN: {
1402 AI_LWO_VALIDATE_CHUNK_LENGTH(head.length, SPAN, 6);
1403 if (envelope.keys.size() < 2)

Callers

nothing calls this directly

Calls 4

LoadChunkFunction · 0.85
DeadlyImportErrorFunction · 0.85
emplace_backMethod · 0.80
sizeMethod · 0.45

Tested by

no test coverage detected