PFND3DDDI_SETASYNCCALLBACKSCB コールバック関数 (d3dumddi.h)

pfnSetAsyncCallbacksCb 関数は、ランタイムがワーカー スレッドからランタイムのコールバック関数への呼び出しの受信を開始または停止するかどうかを Microsoft Direct3D ランタイムに通知します。

構文

PFND3DDDI_SETASYNCCALLBACKSCB Pfnd3dddiSetasynccallbackscb;

HRESULT Pfnd3dddiSetasynccallbackscb(
  HANDLE hDevice,
  BOOL Enable
)
{...}

パラメーター

hDevice

ディスプレイ デバイスへのハンドル (グラフィックス コンテキスト)。

Enable

ランタイムがワーカー スレッドからランタイムのコールバック関数への呼び出しの受信を開始または停止するかどうかを指定するブール値。 TRUE は 、ランタイムがワーカー スレッドからコールバック関数の呼び出しの受信を開始することを示します。 FALSE は 、ランタイムがワーカー スレッドからのコールバック関数の呼び出しの受信を停止することを示します。

戻り値

pfnSetAsyncCallbacksCb は、次のいずれかの値を返します。

リターン コード 説明
S_OK Direct3D ランタイムに正常に通知されました。
E_INVALIDARG パラメーターが検証され、正しくないと判断されました。

この関数は、他の HRESULT 値も返す場合があります。

注釈

ユーザー モードディスプレイドライバーが独自のマルチプロセッサ最適化を実装する場合 (つまり、ドライバーはワーカー スレッドを作成し、そのスレッドでコマンドを処理します)、ドライバーは pfnSetAsyncCallbacksCb を呼び出して、ランタイムがワーカー スレッドからランタイムのコールバック関数の呼び出しを開始または受信しなくなったかどうかを Direct3D ランタイムに通知する必要があります。 また、このようなドライバーは、 LockAsyncUnlockAsync、および Rename 関数を実装することはできません。 これにより、ランタイムが独自の複数プロセッサ最適化を使用しないようにします。

ユーザー モードのディスプレイ ドライバーは、メイン アプリケーション スレッド (つまり、ドライバーに呼び出されたスレッド) でのみ pfnSetAsyncCallbacksCb を呼び出すことができます。 ドライバーのワーカー スレッドは 、pfnSetAsyncCallbacksCb を呼び出すことができません。 任意の時点で、ランタイムのコールバック関数のいずれかで実行できるのは、特定のレンダリング デバイスを参照するスレッドが 1 つだけです。

ユーザー モードディスプレイ ドライバーは、メイン アプリケーション スレッド以外のスレッドでランタイムのコールバック関数を呼び出す前に、pfnSetAsyncCallbacksCb の呼び出しで Enable パラメーターに TRUE を渡す必要があります。 ユーザー モードのディスプレイ ドライバーが、メイン アプリケーション スレッドでランタイムのコールバック関数を呼び出す前に、ドライバーは、pfnSetAsyncCallbacksCb の呼び出しで Enable パラメーターに FALSE を渡す必要があります。

レンダリング デバイスごとに Flush の実装内で、ドライバーは pfnSetAsyncCallbacksCb を 呼び出し、 FALSE をEnable パラメーターに渡します。

ドライバーが pfnSetAsyncCallbacksCb の呼び出しで Enable パラメーターに TRUE渡すと、ランタイムは、コールバック関数でデバイスが失われた状況にすぐに応答しない状態になります。 代わりに、ランタイムは、この状態の間にコールバック関数で失われたデバイスを検出すると、イベントが発生したことを示すビットを設定します。 ドライバーが pfnSetAsyncCallbacksCb の呼び出しで Enable パラメーターに FALSE を渡すと、ランタイムはビットをチェックして、デバイスが失われたかどうかを判断します。 ビットが設定されている場合、ランタイムは一般的なデバイス損失処理を実行します。 この時点以降、ドライバーはランタイムから関数のほとんどの呼び出しを受け取らなくなります。

ランタイムの DirectX 9 および DirectX 9L バージョンのみが pfnSetAsyncCallbacksCb をサポートします。 DirectX 10 以降のバージョンのランタイムは、ユーザー モードディスプレイ ドライバーの CreateDevice(D3D10) 関数を呼び出してレンダリング デバイスを作成するときに、D3DDDI_DEVICECALLBACKS構造体の pfnSetAsyncCallbacksCb メンバーを NULL に設定します。

メモ 9 より前の DirectX バージョンでは、複数プロセッサの最適化はサポートされていません。
 
ドライバーは、ドライバーの CreateDevice 関数の呼び出しで、ランタイムが以前に D3DDDI_DEVICECALLBACKS の pfnSetAsyncCallbacksCb メンバーを NULL 以外に設定した場合にのみ、ワーカー スレッドからランタイムのコールバック関数を呼び出すことができます。

要件

要件
サポートされている最小のクライアント Windows Vista 以降のバージョンの Windows オペレーティング システムで使用できます。
対象プラットフォーム デスクトップ
Header d3dumddi.h (D3dumddi.h を含む)

こちらもご覧ください

CreateDevice

CreateDevice(D3D10)

D3DDDI_DEVICECALLBACKS

フラッシュ

LockAsync

名前の変更

UnlockAsync