MGL(Win32)
読み取り中…
検索中…
一致する文字列を見つけられません
mgl_task_default_task_node.h
[詳解]
1// SPDX-License-Identifier: Zlib
2/* ------------------------------------------------------------------------- */
9/* ------------------------------------------------------------------------- */
10
11#ifndef INCGUARD_MGL_TASK_DEFAULT_TASK_NODE_H_1622707431
12#define INCGUARD_MGL_TASK_DEFAULT_TASK_NODE_H_1622707431
13
14#include <type_traits>
15
17
18namespace MGL::Task
19{
21template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
22class DefaultTaskNode : public Node
23{
24private:
26 enum class Stage : uint8_t
27 {
28 Update,
29 Render,
30 };
31
32public:
33 /* ------------------------------------------------------------------------- */
39 /* ------------------------------------------------------------------------- */
40 static InitializeDescriptor GetInitializeDescriptor(int32_t parallelExecuteCount = -1) noexcept
41 {
42 InitializeDescriptor descriptor;
43 descriptor.stageSettings =
44 {
45 {static_cast<ExecuteStage>(Stage::Update), ExecuteMode::ParallelizableUpdate},
46 {static_cast<ExecuteStage>(Stage::Render), ExecuteMode::RenderUpdate},
47 };
48 descriptor.parallelExecuteCount = parallelExecuteCount;
49
50 return descriptor;
51 }
52
53 /* ------------------------------------------------------------------------- */
58 /* ------------------------------------------------------------------------- */
59 explicit constexpr DefaultTaskNode(TaskIDType identifier) noexcept
60 : Node(static_cast<Identifier>(identifier))
61 {}
62
63 ~DefaultTaskNode() noexcept override = default;
64
65 /* ------------------------------------------------------------------------- */
70 /* ------------------------------------------------------------------------- */
71 void OnExecute(ExecuteStage stage) noexcept final
72 {
73 switch (Stage{stage})
74 {
75 // 更新処理
76 case Stage::Update:
77 OnUpdate();
78 break;
79
80 // 描画処理
81 case Stage::Render:
82 OnRender();
83 break;
84 }
85 }
86
87protected:
88 /* ------------------------------------------------------------------------- */
92 /* ------------------------------------------------------------------------- */
93 virtual void OnUpdate() noexcept {}
94
95 /* ------------------------------------------------------------------------- */
99 /* ------------------------------------------------------------------------- */
100 virtual void OnRender() noexcept {}
101
102 /* ------------------------------------------------------------------------- */
108 /* ------------------------------------------------------------------------- */
109 virtual void OnEvent(EventIDType event, void *argument) noexcept
110 {
111 (void)event;
112 (void)argument;
113 }
114
115 /* ------------------------------------------------------------------------- */
121 /* ------------------------------------------------------------------------- */
122 void OnReceiveTaskEvent(EventIdentifier eventID, void *argument) noexcept final
123 {
124 OnEvent(EventIDType(eventID), argument);
125 }
126};
127} // namespace MGL::Task
128#endif // INCGUARD_MGL_TASK_DEFAULT_TASK_NODE_H_1622707431
129
130// vim: et ts=4 sw=4 sts=4
デフォルトの実行ステージ設定に対応したタスク
Definition mgl_task_default_task_node.h:23
virtual void OnRender() noexcept
描画処理
Definition mgl_task_default_task_node.h:100
virtual void OnUpdate() noexcept
更新処理
Definition mgl_task_default_task_node.h:93
static InitializeDescriptor GetInitializeDescriptor(int32_t parallelExecuteCount=-1) noexcept
このタスク用の初期化記述子を取得
Definition mgl_task_default_task_node.h:40
void OnExecute(ExecuteStage stage) noexcept final
実行時の処理
Definition mgl_task_default_task_node.h:71
void OnReceiveTaskEvent(EventIdentifier eventID, void *argument) noexcept final
タスクのイベント受信処理
Definition mgl_task_default_task_node.h:122
constexpr DefaultTaskNode(TaskIDType identifier) noexcept
コンストラクタ
Definition mgl_task_default_task_node.h:59
virtual void OnEvent(EventIDType event, void *argument) noexcept
イベント受信処理
Definition mgl_task_default_task_node.h:109
タスクノード
Definition mgl_task_node.h:20
constexpr Node(Identifier identifier) noexcept
コンストラクタ
Definition mgl_task_node.h:28
uint32_t EventIdentifier
イベントIDを表す型
Definition mgl_task_defs.h:105
uint8_t ExecuteStage
実行ステージ
Definition mgl_task_defs.h:68
MGL タスクノード
初期化記述子
Definition mgl_task_defs.h:99