ID3DX10ThreadPump インターフェイス
タスクを非同期に実行するために使用され、D3DX10CreateThreadPump で作成されます。必要に応じてスレッド ポンプをパラメーターとして受け取る D3DX10 API がいくつかあります。たとえば、D3DX10CreateTextureFromFile や D3DX10CompileFromFile などです (完全な一覧については、「解説」を参照してください)。スレッド ポンプがこれらの API に渡されると、API はそれぞれ別のスレッド ポンプのスレッドで非同期に実行されます。この場合のメリットは、画面上にはパフォーマンスの顕著な低下が現れることなく、大量のデータの読み込みと処理を実行できる点です。
スレッド ポンプは、3 つのステップから成るプロセスでデータの読み込みと処理を行います。動作は次のとおりです。
- データ ローダーを使用して、データの読み込みと解凍を行います。データ ローダー オブジェクトには 3 つのメソッドがあり、スレッド ポンプはデータの読み込みおよび解凍時にこれらのメソッドを内部で呼び出します。ID3DX10DataLoader::Load, ID3DX10DataLoader::Decompress, and ID3DX10DataLoader::Destroy.この 3 つの API の機能は、読み込みおよび解凍が行われるデータの種類によって異なります。また、データ ローダー インターフェイスを継承でき、API のいずれかが独自のカスタム フォーマットで定義されたデータ ファイルを読み込む場合にその API を変更することができます。
- データ プロセッサを使用して、データを処理します。データ プロセッサ オブジェクトには 3 つのメソッドがあり、スレッド ポンプはデータの処理時にこれらのメソッドを内部で呼び出します。ID3DX10DataProcessor::Process, ID3DX10DataProcessor::CreateDeviceObject, and ID3DX10DataProcessor::Destroy.データの処理方法は、データの種類によって異なります。たとえば、データが JPEG として保存されているテクスチャーの場合、ID3DX10DataProcessor::Process は JPEG 解凍を実行してイメージの Raw イメージ ビットを取得します。データがシェーダーの場合、ID3DX10DataProcessor::Process は HLSL をバイトコードにコンパイルします。データが処理されたら、(ID3DX10DataProcessor::CreateDeviceObject を使用して) そのデータについてデバイス オブジェクトが作成され、このオブジェクトがデバイス オブジェクトのキューに追加されます。また、データ プロセッサ インターフェイスを継承でき、API のいずれかが独自のカスタム フォーマットで定義されたデータ ファイルを処理する場合にその API を変更することができます。
- デバイス オブジェクトをデバイスにバインドします。これは、アプリケーションが ID3DX10ThreadPump::ProcessDeviceWorkItems を呼び出したときに実行されます。デバイス オブジェクトのキュー内の指定された数のオブジェクトがデバイスにバインドされます。
スレッド ポンプを使用して、次の 2 つの方法のいずれかでデータを読み込むことができます。D3DX10CreateTextureFromFile や D3DX10CompileFromFile など、スレッド ポンプをパラメーターとして受け取る API を呼び出す方法と、ID3DX10ThreadPump::AddWorkItem を呼び出す方法です。スレッド ポンプを受け取る API の場合、データ ローダーとデータ プロセッサは内部で作成されます。AddWorkItem の場合は、データ ローダーとデータ プロセッサを事前に作成しておく必要があり、その後で AddWorkItem に渡されます。D3DX10 には、共通のデータ フォーマットの読み込みおよび処理を行うための機能を持つデータ ローダーとデータ プロセッサを作成する API のセットが用意されています (API の一覧については、「解説」を参照してください)。カスタム データ フォーマットの場合は、データ ローダーとデータ プロセッサのインターフェイスを継承し、それらのメソッドを再定義する必要があります。
スレッド ポンプ オブジェクトはかなりの量のリソースを必要とするため、通常は、アプリケーションごとに 1 つだけ作成してください。
ID3DX10ThreadPump のメンバー
メソッド | 説明 |
---|---|
ID3DX10ThreadPump::AddWorkItem | 作業項目をスレッド ポンプに追加します。 |
ID3DX10ThreadPump::GetQueueStatus | スレッド ポンプ内の 3 つのキューそれぞれに入っている項目の数を取得します。 |
ID3DX10ThreadPump::GetWorkItemCount | 現在、スレッド ポンプ内にある作業項目の数を取得します。 |
ID3DX10ThreadPump::ProcessDeviceWorkItems | 作業項目が読み込みと処理を終了した後、作業項目をデバイスに設定します。 |
ID3DX10ThreadPump::PurgeAllItems | すべての作業項目をスレッド ポンプからクリアします。 |
ID3DX10ThreadPump::WaitForAllItems | スレッド ポンプ内のすべての作業項目が終了するまで待機します。 |
解説
ビルトイン D3DX10 データ ローダー
D3DX10CreateAsyncFileLoader | ファイル ローダーを非同期に作成します。 |
D3DX10CreateAsyncMemoryLoader | データ ローダーを非同期に作成します。 |
D3DX10CreateAsyncResourceLoader | リソース ローダーを非同期に作成します。 |
ビルトイン D3DX10 データ プロセッサ
D3DX10CreateAsyncTextureProcessor | スレッド ポンプで使用されるデータ プロセッサを作成します。この API は D3DX10CreateAsyncTextureInfoProcessor と類似していますが、テクスチャーの読み込みも行います。 |
D3DX10CreateAsyncTextureInfoProcessor | スレッド ポンプで使用されるデータ プロセッサを作成します。 |
D3DX10CreateAsyncShaderCompilerProcessor | 非同期でシェーダーをコンパイルし、データ プロセッサーを作成します。 |
D3DX10CreateAsyncEffectCompilerProcessor | データ プロセッサを使用してエフェクトを非同期に作成します。 |
D3DX10CreateAsyncEffectCreateProcessor | 非同期でエフェクト プールを作成します。 |
D3DX10CreateAsyncEffectPoolCreateProcessor | データ プロセッサを非同期に作成します。 |
D3DX10CreateAsyncShaderPreprocessProcessor | 非同期でシェーダー用のデータ プロセッサーを作成します。 |
スレッド ポンプをパラメーターとして受け取る API です。