| 118 | } |
| 119 | |
| 120 | int compile_project(skd::SProject* project) |
| 121 | { |
| 122 | auto& system = *skd::asset::GetCookSystem(); |
| 123 | InitializeResourceSystem(*project); |
| 124 | std::error_code ec = {}; |
| 125 | skr::filesystem::recursive_directory_iterator iter(project->GetAssetPath(), ec); |
| 126 | //----- scan project directory |
| 127 | skr::stl_vector<skr::filesystem::path> paths; |
| 128 | while (iter != end(iter)) |
| 129 | { |
| 130 | if (iter->is_regular_file(ec) && IsAsset(iter->path())) |
| 131 | { |
| 132 | paths.push_back(*iter); |
| 133 | SKR_LOG_FMT_DEBUG(u8"{}", iter->path().u8string().c_str()); |
| 134 | } |
| 135 | iter.increment(ec); |
| 136 | } |
| 137 | SKR_LOG_INFO(u8"Project dir scan finished."); |
| 138 | //----- import project assets (guid & type & path) |
| 139 | { |
| 140 | using iter_t = typename decltype(paths)::iterator; |
| 141 | skr::parallel_for(paths.begin(), paths.end(), 20, |
| 142 | [&](iter_t begin, iter_t end) { |
| 143 | SkrZoneScopedN("Import"); |
| 144 | for (auto i = begin; i != end; ++i) |
| 145 | system.ImportAsset(project, *i); |
| 146 | }); |
| 147 | } |
| 148 | SKR_LOG_INFO(u8"Project asset import finished."); |
| 149 | skr::filesystem::create_directories(project->GetOutputPath(), ec); |
| 150 | skr::filesystem::create_directories(project->GetDependencyPath(), ec); |
| 151 | //----- schedule cook tasks (checking dependencies) |
| 152 | { |
| 153 | system.ParallelForEachAsset(1, |
| 154 | [&](skr::span<skd::asset::SAssetRecord*> assets) { |
| 155 | SkrZoneScopedN("Cook"); |
| 156 | for (auto asset : assets) |
| 157 | { |
| 158 | system.EnsureCooked(asset->guid); |
| 159 | } |
| 160 | }); |
| 161 | } |
| 162 | SKR_LOG_INFO(u8"Project asset import finished."); |
| 163 | auto resource_system = skr::resource::GetResourceSystem(); |
| 164 | skr::task::schedule([&] |
| 165 | { |
| 166 | system.WaitForAll(); |
| 167 | resource_system->Quit(); |
| 168 | }, nullptr); |
| 169 | resource_system->Update(); |
| 170 | //----- wait |
| 171 | while (!system.AllCompleted() && resource_system->WaitRequest()) |
| 172 | { |
| 173 | resource_system->Update(); |
| 174 | } |
| 175 | DestroyResourceSystem(*project); |
| 176 | return 0; |
| 177 | } |
no test coverage detected