| 666 | } |
| 667 | |
| 668 | CreateAssetResult ImportModel::CreateSkinnedModel(CreateAssetContext& context, const ModelData& modelData, const Options* options) |
| 669 | { |
| 670 | PROFILE_CPU(); |
| 671 | IMPORT_SETUP(SkinnedModel, SkinnedModel::SerializedVersion); |
| 672 | static_assert(SkinnedModel::SerializedVersion == 30, "Update code."); |
| 673 | |
| 674 | // Save skinned model header |
| 675 | MemoryWriteStream stream(4096); |
| 676 | if (SkinnedModel::SaveHeader(stream, modelData)) |
| 677 | return CreateAssetResult::Error; |
| 678 | if (context.AllocateChunk(0)) |
| 679 | return CreateAssetResult::CannotAllocateChunk; |
| 680 | context.Data.Header.Chunks[0]->Data.Copy(ToSpan(stream)); |
| 681 | |
| 682 | // Pack model LODs data |
| 683 | const auto lodCount = modelData.LODs.Count(); |
| 684 | for (int32 lodIndex = 0; lodIndex < lodCount; lodIndex++) |
| 685 | { |
| 686 | stream.SetPosition(0); |
| 687 | if (SkinnedModel::SaveLOD(stream, modelData, lodIndex, SkinnedModel::SaveMesh)) |
| 688 | return CreateAssetResult::Error; |
| 689 | const int32 chunkIndex = MODEL_LOD_TO_CHUNK_INDEX(lodIndex); |
| 690 | if (context.AllocateChunk(chunkIndex)) |
| 691 | return CreateAssetResult::CannotAllocateChunk; |
| 692 | context.Data.Header.Chunks[chunkIndex]->Data.Copy(ToSpan(stream)); |
| 693 | } |
| 694 | |
| 695 | return CreateAssetResult::Ok; |
| 696 | } |
| 697 | |
| 698 | CreateAssetResult ImportModel::CreateAnimation(CreateAssetContext& context, const ModelData& modelData, const Options* options) |
| 699 | { |
nothing calls this directly
no test coverage detected