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

Method AddCookTask

modules/tools/tool_core/src/asset/cook_system.cpp:179–298  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

177}
178
179skr::task::event_t SCookSystemImpl::AddCookTask(skr_guid_t guid)
180{
181 SCookContext* jobContext;
182 {
183 skr::task::event_t result{ nullptr };
184 cooking.lazy_emplace_l(
185 guid,
186 [&](const auto& ctx_kv) { result = ctx_kv.second->GetCounter(); },
187 [&](const CookingMap::constructor& ctor) {
188 jobContext = SCookContext::Create(getIOService());
189 ctor(guid, jobContext);
190 });
191 if (result) return result;
192 }
193 jobContext->record = GetAssetRecord(guid);
194 skr::task::event_t counter;
195 jobContext->SetCounter(counter);
196 auto guidName = skr::format(u8"Fiber{}", jobContext->record->guid);
197 mainCounter.add(1);
198 skr::task::schedule([jobContext]() {
199 auto system = static_cast<SCookSystemImpl*>(GetCookSystem());
200 const auto metaAsset = jobContext->record;
201 auto cooker = system->GetCooker(metaAsset);
202 SKR_ASSERT(cooker);
203 // Trace
204 SkrZoneScopedN("CookingTask");
205 const auto rtti_type = skr::rttr::get_type_from_guid(metaAsset->type);
206 const auto cookerTypeName = rtti_type ? rtti_type->name().raw().c_str() : (const ochar_t*)u8"UnknownResource";
207 const auto guidString = skr::format(u8"Guid: {}", metaAsset->guid);
208 const auto assetTypeGuidString = skr::format(u8"TypeGuid: {}", metaAsset->type);
209 const auto scopeName = skr::format(u8"Cook.[{}]", (const ochar8_t*)cookerTypeName);
210 const auto assetString = skr::format(u8"Asset: {}", metaAsset->path.u8string().c_str());
211 ZoneName(scopeName.c_str(), scopeName.size());
212 SkrMessage(guidString.c_str(), guidString.size());
213 SkrMessage(assetTypeGuidString.c_str(), assetTypeGuidString.size());
214 SkrMessage(assetString.c_str(), assetString.size());
215
216 SKR_DEFER({
217 auto system = static_cast<SCookSystemImpl*>(GetCookSystem());
218 auto guid = jobContext->record->guid;
219 system->cooking.erase_if(guid, [](const auto& ctx_kv) { SCookContext::Destroy(ctx_kv.second); return true; });
220 system->mainCounter.decrement();
221 });
222
223 // Create output dir
224 auto outputPath = metaAsset->project->GetOutputPath();
225 std::error_code ec = {};
226 skr::filesystem::create_directories(outputPath, ec);
227
228 // TODO: platform dependent directory
229 jobContext->SetOutputPath(outputPath / skr::format(u8"{}.bin", metaAsset->guid).c_str());
230 if (!cooker)
231 {
232 return;
233 }
234
235 // Cook
236 jobContext->SetCookerVersion(cooker->Version());

Callers

nothing calls this directly

Calls 15

ctorClass · 0.85
GetCookSystemFunction · 0.85
get_type_from_guidFunction · 0.85
DestroyFunction · 0.85
lazy_emplace_lMethod · 0.80
SetCounterMethod · 0.80
GetCookerMethod · 0.80
erase_ifMethod · 0.80
GetOutputPathMethod · 0.80
SetOutputPathMethod · 0.80
SetCookerVersionMethod · 0.80
StartObjectMethod · 0.80

Tested by

no test coverage detected