Shkyera Engine
Easy to use, game engine for Python
Loading...
Searching...
No Matches
JobUtils.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <vector>
4
7
8namespace shkyera::utils::jobs {
9
10namespace {
11
12void setJobAttributes(const Policy& policy, JobBuilder& builder, const std::vector<JobHandle>& dependsOn) {
13 for (const auto& dep : dependsOn) {
14 builder.dependsOn(dep);
15 }
16
17 for (const auto& readAccess : policy.read) {
18 builder.readResource(readAccess);
19 }
20
21 for (const auto& readAccess : policy.write) {
22 builder.writeResource(readAccess);
23 }
24
25 if (policy.onlyMainThread || policy.onlyMainThread) {
26 builder.useMainThread();
27 }
28}
29
30} // namespace
31
32template <typename System, typename Result>
33JobHandle scheduleSystem(System& system, Result& result, const std::vector<JobHandle>& dependsOn = {}) {
34 auto builder = JobBuilder([&] { result = system.update(); });
35 setJobAttributes(system.getPolicy(), builder, dependsOn);
36 return builder.submit();
37}
38
39template <typename System>
40JobHandle scheduleSystem(System& system, const std::vector<JobHandle>& dependsOn = {}) {
41 auto builder = JobBuilder([&] { system.update(); });
42 setJobAttributes(system.getPolicy(), builder, dependsOn);
43 return builder.submit();
44}
45
46} // namespace shkyera::utils::jobs
AssetRef< AssetType > read(AssetComponent< AssetType > &assetComponent)
Definition AssetUtils.hpp:81
Definition JobSystem.cpp:3
JobHandle scheduleSystem(System &system, Result &result, const std::vector< JobHandle > &dependsOn={})
Definition JobUtils.hpp:33
JobSystem::JobBuilder JobBuilder
Definition JobSystem.hpp:210
Entity JobHandle
Definition JobSystem.hpp:16
Definition Clock.hpp:9