MCPcopy Create free account
hub / github.com/SakuraEngine/SakuraEngine / Cook

Method Cook

modules/tools/animation_tool/src/skin_asset.cpp:8–36  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6namespace skd::asset
7{
8bool SSkinCooker::Cook(SCookContext* ctx)
9{
10 using namespace skr::anim;
11 SkrZoneScopedNS("SSkinCooker::Cook", 4);
12
13 cgltf_data* rawMesh = ctx->Import<cgltf_data>();
14 if (!rawMesh)
15 {
16 return false;
17 }
18 SKR_DEFER({ctx->Destroy(rawMesh);});
19 //TODO; indexing skin
20 cgltf_skin* rawSkin = &rawMesh->skins[0];
21 SkinResource resource;
22 auto blob = skr::make_blob_builder<SkinBlobView>();
23 blob.name = rawSkin->name ? (const char8_t*)rawSkin->name : u8"UnnamedSkin";
24 blob.joint_remaps.reserve(rawSkin->joints_count);
25 for (auto i = 0; i < rawSkin->joints_count; ++i)
26 blob.joint_remaps.add((const char8_t*)rawSkin->joints[i]->name);
27 auto buffer_view = rawSkin->inverse_bind_matrices->buffer_view;
28 const auto buffer_data = static_cast<const uint8_t*>(buffer_view->data ? buffer_view->data : buffer_view->buffer->data);
29 auto matrix = (cgltf_float*)(buffer_data + buffer_view->offset);
30 auto components = cgltf_num_components(cgltf_type_mat4);
31 SKR_ASSERT(components == 16);
32 blob.inverse_bind_poses.resize_default(rawSkin->joints_count);
33 std::memcpy(blob.inverse_bind_poses.data(), matrix, sizeof(cgltf_float) * components * rawSkin->joints_count);
34 resource.arena = skr::binary::make_arena<SkinBlobView>(resource.blob, blob);
35 return ctx->Save(resource);
36}
37} // namespace skd::asset

Callers

nothing calls this directly

Calls 8

cgltf_num_componentsFunction · 0.85
memcpyFunction · 0.85
DestroyMethod · 0.45
reserveMethod · 0.45
addMethod · 0.45
resize_defaultMethod · 0.45
dataMethod · 0.45
SaveMethod · 0.45

Tested by

no test coverage detected