MGL::Task::DefaultTaskNode#

概要#

MGL::Task::DefaultTaskNodeは、MGL側にプリセットされている標準的なタスクノードの基底クラスです。このクラスを用いることでタスクノードの詳細設定の手間を省き、すぐにタスクシステムによる実装を開始できます。

デフォルトタスクノードを用いた実装方法の詳細はタスクシステム基本的な使い方にて解説していますので、こちらも併せて参照してください。また、より細かくタスクの実行制御を行いたい場合はタスクノードのカスタマイズを参考にMGL::Task::Nodeを継承したタスクノードの実装を検討してください。

宣言#

namespace MGL::Task
{
    template <
        typename TaskIDType = Identifier,
        typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node;
}

メンバ情報#

種類

名前

内容

バージョン

関数

GetInitializeDescriptor

このタスクノード用の初期化記述子を取得

1.1.11+

関数

コンストラクタ

1.1.11+

関数

OnUpdate

タスクの更新処理

1.1.11+

関数

OnRender

タスクの描画処理

1.1.11+

関数

OnEvent

タスクイベントの受信コールバック関数

1.1.11+


GetInitializeDescriptor#

このタスクノード用の初期化記述子を取得

宣言#

namespace MGL::Task
{
    template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node
    {
        static InitializeDescriptor GetInitializeDescriptor(
            int32_t parallelExecuteCount = -1) noexcept;
    };
}

引数#

int32_t parallelExecuteCount

並列に実行可能なタスクの最大数。省略または1以下の値の指定で並列実行を無効化

戻り値#

MGL::Task::InitializeDescriptor

このタスクノード用の初期化記述子

説明#

このタスクノード用の初期化記述子を生成して返します。

この関数が生成した記述子をMGL::Task::Initializeの引数に渡すことによって、タスクシステムがこのタスクノードを扱えるようになります。

利用例#

各種定義
// タスクIDの定義
enum class TaskID
{
    ...
};

// タスクイベントの定義
enum class TaskEvent
{
    ...
};

// デフォルトタスクノードをエイリアスとして定義
using TaskNode = MGL::Task::DefaultTaskNode<TaskID, TaskEvent>;

// 生成可能なタスクノードの最大数
constexpr size_t kTaskCapacity = 1024;
この関数を用いたタスクシステムの初期化
// タスクシステムの初期化
if (!MGL::Task::Initialize(kTaskCapacity, TaskNode::GetInitializeDescriptor()))
{
    return false;
}

バージョン情報#

MGL 1.1.11から利用可能

関連#


コンストラクタ#

宣言#

namespace MGL::Task
{
    template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node
    {
        constexpr DefaultTaskNode(TaskIDType identifier) noexcept;
    };
}

引数#

TaskIDType identifier

タスクノードの識別するためのID

説明#

デフォルトタスクノードのコンストラクタです。

通常、このコンストラクタは継承先クラスのコンストラクタからタスクIDを割り当てるために呼び出します。

利用例#

各種定義
// タスクIDの定義
enum class TaskID
{
    Player,     // プレイヤータスク
};

// タスクイベントの定義
enum class TaskEvent
{
    ...
};

// デフォルトタスクノードをエイリアスとして定義
using TaskNode = MGL::Task::DefaultTaskNode<TaskID, TaskEvent>;
この関数を用いたタスクシステムの初期化
// デフォルトタスクノードを継承したプレイヤータスク
class PlayerTask : public TaskNode
{
public:
    // コンストラクタで親クラスのコンストラクタを呼び出してIDを設定
    constexpr PlayerTask() noexcept
        : TaskNode(TaskID::Player)
    {
    }
}

バージョン情報#

MGL 1.1.11から利用可能

関連#


OnUpdate#

タスクの更新処理

宣言#

namespace MGL::Task
{
    template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node
    {
    protected:
        virtual void OnUpdate() noexcept;
    };
}

説明#

このタスクのフレーム更新処理を記述するためのコールバック関数です。この関数はMGL::Task::Executeを呼び出した際にOnRenderよりも先に呼び出されます。

GetInitializeDescriptorの引数に2以上の値を指定して並列実行を有効化した場合、この関数はMGL::Task::Executeを呼び出したスレッドとは異なるスレッドで非同期的に実行される場合があります。詳細はタスクシステムタスクの並列実行を参照してください。

描画に関わる処理はこの関数ではなく、OnRenderに記述してください。

利用例#

各種定義
// タスクIDの定義
enum class TaskID
{
    Player,     // プレイヤータスク
};

// タスクイベントの定義
enum class TaskEvent
{
    ...
};

// デフォルトタスクノードをエイリアスとして定義
using TaskNode = MGL::Task::DefaultTaskNode<TaskID, TaskEvent>;
継承先タスク
// デフォルトタスクノードを継承したプレイヤータスク
class PlayerTask : public TaskNode
{
    // ... 省略

private:
    // タスクの更新処理
    virtual void OnUpdate() noexcept override
    {
        // ここに更新処理を記述
    }
}

バージョン情報#

MGL 1.1.11から利用可能

関連#


OnRender#

タスクの描画処理

宣言#

namespace MGL::Task
{
    template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node
    {
    protected:
        virtual void OnRender() noexcept;
    };
}

説明#

このタスクの描画処理を記述するためのコールバック関数です。この関数はMGL::Task::Executeを呼び出した際にOnUpdateの後に呼び出されます。

レンダラを用いた描画命令などはOnUpdateには記述せず、必ずこちらに記述してください。その他、描画にしか関わらない処理(例えば経過時間に基づくアニメーション更新処理など)もこちらへの記述が推奨されます。

利用例#

各種定義
// タスクIDの定義
enum class TaskID
{
    Player,     // プレイヤータスク
};

// タスクイベントの定義
enum class TaskEvent
{
    ...
};

// デフォルトタスクノードをエイリアスとして定義
using TaskNode = MGL::Task::DefaultTaskNode<TaskID, TaskEvent>;
この関数を用いたタスクシステムの初期化
// デフォルトタスクノードを継承したプレイヤータスク
class PlayerTask : public TaskNode
{
    // ... 省略

private:
    // タスクの描画処理
    virtual void OnRender() noexcept override
    {
        // ここに描画処理を記述
    }
}

バージョン情報#

MGL 1.1.11から利用可能

関連#


OnEvent#

タスクイベントの受信コールバック関数

宣言#

namespace MGL::Task
{
    template <typename TaskIDType = Identifier, typename EventIDType = EventIdentifier>
    class DefaultTaskNode : public Node
    {
    protected:
        virtual void OnEvent(EventIDType event, void *argument) noexcept
    };
}

引数#

EventIDType event

イベントの種類

void *argument

通知元からの引数

説明#

MGL::Task::NotifyEventによって通知されたイベントを受信する際に呼び出されるコールバック関数です。

eventにはイベントの種類を表す識別子が、argumentには通知元から指定された引数を表すアドレスが渡されます。

利用例#

各種定義
// タスクIDの定義
enum class TaskID
{
    Player,     // プレイヤータスク
};

// タスクイベントの定義
enum class TaskEvent
{
    Pause,      // 一時停止イベント
};

// デフォルトタスクノードをエイリアスとして定義
using TaskNode = MGL::Task::DefaultTaskNode<TaskID, TaskEvent>;
継承先タスク
// デフォルトタスクノードを継承したプレイヤータスク
class PlayerTask : public TaskNode
{
    // ... 省略

private:
    // イベント受信処理
    virtual void OnEvent(TaskEvent event, void *argument) noexcept override
    {
        switch (event)
        {
            case TaskEvent::Pause:
                // 一時停止イベントを受信した際の処理を記述
                break;
        }
    }
}
イベント通知処理
// 全てのタスクに対してポーズイベントを通知
MGL::Task::NotifyEvent(TaskEvent::Pause);

バージョン情報#

MGL 1.1.11から利用可能

関連#