IDirect3DDevice9
COM公式ドキュメント
IDirect3DDevice9 (d3d9.h) アプリケーションは、IDirect3DDevice9 インターフェースのメソッドを使用して、DrawPrimitive ベースのレンダリングとリソースの作成を行います。
解説(Remarks)
IDirect3DDevice9 インターフェースは、IDirect3D9::CreateDevice メソッドを呼び出して取得します。
このインターフェースは、すべての COM インターフェースと同様に、IUnknown インターフェースのメソッドを継承します。
LPDIRECT3DDEVICE9 型と PDIRECT3DDEVICE9 型は、IDirect3DDevice9 インターフェースへのポインターとして定義されています。
typedef struct IDirect3DDevice9 *LPDIRECT3DDEVICE9, *PDIRECT3DDEVICE9;
メソッド 116
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
IDirect3DDevice9::TestCooperativeLevel メソッド (d3d9.h) は、ウィンドウモードまたはフルスクリーンのアプリケーションにおける Direct3D デバイスの現在の協調レベルの状態を報告します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK であり、デバイスが動作可能で呼び出し元のアプリケーションが処理を継続できることを示します。 メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DEVICELOST、D3DERR_DEVICENOTRESET、D3DERR_DRIVERINTERNALERROR。
解説(Remarks)
デバイスがロストしており、現時点では復元できない場合、IDirect3DDevice9::TestCooperativeLevel は戻り値 D3DERR_DEVICELOST を返します。たとえば、フルスクリーンのデバイスがフォーカスを失った場合がこれに該当します。アプリケーションがデバイスのロストを検出した場合は、処理を一時停止し、戻り値 D3DERR_DEVICENOTRESET が返されるまで IDirect3DDevice9::TestCooperativeLevel を定期的に呼び出してください。その後、IDirect3DDevice9::Reset を呼び出してデバイスのリセットを試み、成功した場合は必要なリソースを復元して通常の動作を再開できます。なお、デバイスが「ロスト」または「未リセット」のいずれかの状態にある場合、IDirect3DDevice9::Present は D3DERR_DEVICELOST を返します。
IDirect3DDevice9::TestCooperativeLevel の呼び出しは、リセット対象のデバイスを作成したスレッドとは異なるスレッドから行われた場合に失敗します。
IDirect3DDevice9::GetAvailableTextureMem メソッド (d3d9.h) は、利用可能なテクスチャーメモリ量の推定値を返します。
戻り値
型: UINT
この関数は、利用可能なテクスチャーメモリの推定値を返します。
解説(Remarks)
返される値は最も近い MB 単位に丸められます。これは、アライメントやリソースごとの消費量に影響するその他の要因により、ビデオメモリの推定値が決して正確にはならないという事実を反映するためです。アプリケーションはこの値を使用して、ミップマップを何レベル分まで割り当てるかといった大規模なリソースの判断のためにメモリの空き状況を大まかに見積もることはできますが、別のリソースを割り当てるだけのメモリが残っているかといった小規模な判断にこの値を使用することはできません。
IDirect3DDevice9::EvictManagedResources メソッド (d3d9.h) は、Direct3D が管理するリソースとドライバーが管理するリソースの両方を含む、すべてのマネージドリソースを破棄します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_OUTOFVIDEOMEMORY、D3DERR_COMMAND_UNPARSED のいずれかになります。
解説(Remarks)
この関数が破棄するのは、リソースの D3DPOOL_DEFAULT のコピーだけです。システムメモリ上のリソースのコピーは保持されます。D3DPOOL を参照してください。
IDirect3DDevice9::GetDirect3D メソッド (d3d9.h) は、このデバイスを作成した Direct3D オブジェクトのインスタンスへのインターフェースを返します。
| ppD3D9 | IDirect3D9** | out | このデバイスを作成した Direct3D オブジェクトのインターフェースを表す IDirect3D9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
IDirect3DDevice9::GetDirect3D を呼び出すと、IDirect3D9 インターフェースの内部参照カウントが増加します。この IDirect3D9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::GetDeviceCaps メソッド (d3d9.h) は、レンダリングデバイスの機能を取得します。
| pCaps | D3DCAPS9* | inout | 返されるデバイスを記述する D3DCAPS9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
デバイスがソフトウェア頂点処理モードで使用されている場合、IDirect3DDevice9::GetDeviceCaps はソフトウェア頂点パイプラインの機能を取得します。
IDirect3DDevice9::GetDisplayMode メソッド (d3d9.h) は、ディスプレイモードの空間解像度、色解像度、およびリフレッシュレートを取得します。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| pMode | D3DDISPLAYMODE* | inout | アダプターのディスプレイモードに関するデータを格納する D3DDISPLAYMODE 構造体へのポインター。これはデバイスのディスプレイモードとは異なります。デバイスがフルスクリーンモードを所有していない場合、デバイスのディスプレイモードはアクティブではない可能性があります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::GetCreationParameters メソッド (d3d9.h) は、デバイスの作成パラメーターを取得します。
| pParameters | D3DDEVICE_CREATION_PARAMETERS* | inout | デバイスの作成パラメーターを記述する D3DDEVICE_CREATION_PARAMETERS 構造体へのポインター。 |
戻り値
解説(Remarks)
返された D3DDEVICE_CREATION_PARAMETERS 構造体の AdapterOrdinal メンバーに問い合わせることで、このデバイスが表すアダプターの序数を取得できます。
IDirect3DDevice9::SetCursorProperties メソッド (d3d9.h) は、カーソルのプロパティを設定します。
| XHotSpot | DWORD | in | カーソルの中心を示す X 座標のオフセット (ピクセル単位)。オフセットはカーソルの左上隅を基準とします。カーソルに新しい位置が与えられると、その位置からホットスポット座標を減算して求めたオフセット位置にイメージが描画されます。 |
| YHotSpot | DWORD | in | カーソルの中心を示す Y 座標のオフセット (ピクセル単位)。オフセットはカーソルの左上隅を基準とします。カーソルに新しい位置が与えられると、その位置からホットスポット座標を減算して求めたオフセット位置にイメージが描画されます。 |
| pCursorBitmap | IDirect3DSurface9* | in | IDirect3DSurface9 インターフェースへのポインター。このパラメーターは 8888 ARGB サーフェス (フォーマット D3DFMT_A8R8G8B8) を指す必要があります。このサーフェスの内容はコピーされ、必要に応じてフォーマット変換されたうえで、カーソルの表示元となる内部バッファーに格納されます。このサーフェスのサイズはディスプレイモードのサイズより小さく、かつ各方向が 2 のべき乗である必要があります (ただし同じべき乗である必要はありません)。アルファチャンネルは 0.0 または 1.0 のいずれかでなければなりません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
次のいずれかの条件に該当する場合、オペレーティングシステムのカーソルが作成され使用されます。
- ハードウェアが D3DCURSORCAPS_COLOR (D3DCURSORCAPS を参照) を設定しており、カーソルのサイズが 32x32 (オペレーティングシステムにおけるカーソルサイズ) である場合。
- アプリケーションがウィンドウモードで実行されている場合。
アプリケーションでは常に WM_MOUSEMOVE イベントを捕捉し、DXSetCursorPosition を呼び出すことを推奨します。
Direct3D のカーソル関数は、ハードウェアに応じて GDI カーソルまたはソフトウェアエミュレーションのいずれかを使用します。通常、ユーザーは WM_SETCURSOR メッセージに応答したいと考えます。たとえば、次のようにメッセージハンドラーを記述します。
case WM_SETCURSOR:
// Turn off window cursor.
SetCursor( NULL );
m_pd3dDevice->ShowCursor( TRUE );
return TRUE; // Prevent Windows from setting cursor to window class cursor.
break;
また、カーソルを変更したい場合は IDirect3DDevice9::SetCursorProperties メソッドを呼び出します。
アプリケーションは、D3DCAPS9 構造体の該当するメンバーを調べることで、カーソルに対してどのようなハードウェアサポートが利用できるかを判別できます。通常、ハードウェアは 32x32 のカーソルのみをサポートし、ウィンドウモードではシステムが 32x32 のカーソルのみをサポートする場合があります。この場合でも IDirect3DDevice9::SetCursorProperties は成功しますが、カーソルはそのサイズに縮小される可能性があります。ホットスポットも適切にスケーリングされます。
カーソルはデバイスがロストすると失われます。このメソッドは、デバイスのリセット後に呼び出す必要があります。
IDirect3DDevice9::SetCursorPosition メソッド (d3d9.h) は、カーソルの位置と更新オプションを設定します。
| X | INT | in | 仮想デスクトップ座標でのカーソルの新しい X 位置。「解説」を参照してください。 | ||||
| Y | INT | in | 仮想デスクトップ座標でのカーソルの新しい Y 位置。「解説」を参照してください。 | ||||
| Flags | DWORD | in | カーソルの更新オプションを指定します。現在、定義されているフラグは 1 つだけです。
|
解説(Remarks)
フルスクリーンモードで実行している場合、スクリーン空間座標は現在のディスプレイモードに合わせて適切にスケーリングされたバックバッファー座標になります。ウィンドウモードで実行している場合、スクリーン空間座標はデスクトップ座標になります。カーソルイメージは、指定された位置から SetCursorProperties メソッドで指定されたホットスポットのオフセットを減算した位置に描画されます。
ShowCursor によってカーソルが非表示にされている場合、カーソルは描画されません。
IDirect3DDevice9::ShowCursor メソッド (d3d9helper.h) は、カーソルを表示または非表示にします。
| bShow | BOOL | in | bShow が TRUE の場合、カーソルが表示されます。bShow が FALSE の場合、カーソルは非表示になります。 |
戻り値
型: BOOL
直前までカーソルが表示されていたかどうかを示す値。直前までカーソルが表示されていた場合は TRUE、表示されていなかった場合は FALSE です。
解説(Remarks)
Direct3D のカーソル関数は、ハードウェアに応じて GDI カーソルまたはソフトウェアエミュレーションのいずれかを使用します。通常、ユーザーは WM_SETCURSOR メッセージに応答したいと考えます。たとえば、次のようにメッセージハンドラーを記述します。
case WM_SETCURSOR:
// Turn off window cursor
SetCursor( NULL );
m_pd3dDevice->ShowCursor( TRUE );
return TRUE; // prevent Windows from setting cursor to window class cursor
break;
また、カーソルを変更したい場合は IDirect3DDevice9::SetCursorProperties メソッドを呼び出します。詳細については、DirectX Graphics C/C++ サンプルのコードを参照してください。
IDirect3DDevice9::CreateAdditionalSwapChain メソッド (d3d9.h) は、複数のビューをレンダリングするための追加のスワップチェーンを作成します。
| pPresentationParameters | D3DPRESENT_PARAMETERS* | inout | 新しいスワップチェーンのプレゼンテーションパラメーターを格納する D3DPRESENT_PARAMETERS 構造体へのポインター。この値を NULL にすることはできません。 このメソッドを呼び出すと、D3DPRESENT_PARAMETERS 構造体のメンバーの値が変更されます。
|
| pSwapChain | IDirect3DSwapChain9** | out | 追加のスワップチェーンを表す IDirect3DSwapChain9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_DEVICELOST、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
Direct3D 9 ではスワップチェーンがデバイスのプロパティとして 1 つ存在するため、各デバイスには常に少なくとも 1 つのスワップチェーン (暗黙のスワップチェーン) があります。
なお、1 つのデバイスがサポートできるフルスクリーンのスワップチェーンは 1 つだけです。
IDirect3D9::CreateDevice、IDirect3DDevice9::Reset、および CreateAdditionalSwapChain を呼び出す際、ウィンドウモードのバックバッファーフォーマットには D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウモードで CreateDevice を呼び出す前に、アプリケーションが現在のデスクトップのフォーマットを問い合わせる必要はありません。フルスクリーンモードの場合は、バックバッファーのフォーマットを指定する必要があります。
IDirect3DDevice9::GetSwapChain メソッド (d3d9.h) は、スワップチェーンへのポインターを取得します。
| iSwapChain | DWORD | in | スワップチェーンの序数値。詳細については、D3DCAPS9 の NumberOfAdaptersInGroup を参照してください。 |
| pSwapChain | IDirect3DSwapChain9** | out | スワップチェーンのコピーを受け取る IDirect3DSwapChain9 インターフェースへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetNumberOfSwapChains メソッド (d3d9.h) は、暗黙のスワップチェーンの数を取得します。
戻り値
型: UINT
暗黙のスワップチェーンの数。「解説」を参照してください。
解説(Remarks)
暗黙のスワップチェーンは、IDirect3D9::CreateDevice の実行中にデバイスによって作成されます。このメソッドは、CreateDevice によって作成されたスワップチェーンの数を返します。
アプリケーションは、IDirect3DDevice9::CreateAdditionalSwapChain を使用して追加のスワップチェーンを作成できます。
IDirect3DDevice9::Reset メソッド (d3d9.h) は、スワップチェーンの種類、サイズ、およびフォーマットをリセットします。
| pPresentationParameters | D3DPRESENT_PARAMETERS* | inout | 新しいプレゼンテーションパラメーターを記述する D3DPRESENT_PARAMETERS 構造体へのポインター。この値を NULL にすることはできません。 フルスクリーンモードに切り替える際、Direct3D はバックバッファーのフォーマットと一致するデスクトップのフォーマットを探し、バックバッファーとフロントバッファーのフォーマットが同一になるようにします (色変換を不要にするため)。 このメソッドから戻るとき:
|
戻り値
型: HRESULT
返される可能性のある値: D3D_OK、D3DERR_DEVICELOST、D3DERR_DEVICEREMOVED、D3DERR_DRIVERINTERNALERROR、D3DERR_OUTOFVIDEOMEMORY (D3DERR を参照)。
解説(Remarks)
IDirect3DDevice9::Reset の呼び出しが失敗すると、デバイスはすでに「未リセット」状態 (IDirect3DDevice9::TestCooperativeLevel の呼び出しが D3DERR_DEVICENOTRESET を返すことで示されます) でない限り、「ロスト」状態 (IDirect3DDevice9::TestCooperativeLevel の呼び出しが D3DERR_DEVICELOST を返すことで示されます) になります。ロストデバイスの文脈における IDirect3DDevice9::Reset の使用については、IDirect3DDevice9::TestCooperativeLevel および ロストデバイス (Direct3D 9) を参照してください。
IDirect3DDevice9::Reset を呼び出すと、すべてのテクスチャーメモリサーフェスが失われ、マネージドテクスチャーがビデオメモリからフラッシュされ、すべての状態情報が失われます。デバイスに対して IDirect3DDevice9::Reset メソッドを呼び出す前に、アプリケーションはそのデバイスに関連付けられた明示的なレンダーターゲット、深度ステンシルサーフェス、追加のスワップチェーン、ステートブロック、および D3DPOOL_DEFAULT のリソースをすべて解放しておく必要があります。
スワップチェーンにはフルスクリーンとウィンドウの 2 種類があります。新しいスワップチェーンがフルスクリーンの場合、アダプターは新しいサイズに一致するディスプレイモードに設定されます。
Direct3D 9 のアプリケーションでは、この呼び出しの最中に (たとえばこの呼び出しから戻る前に) メッセージが送信されることがあります。アプリケーションは、このときに Direct3D を呼び出さないように注意する必要があります。さらに、IDirect3DDevice9::Reset が失敗した場合に呼び出せる有効なメソッドは、IDirect3DDevice9::Reset、IDirect3DDevice9::TestCooperativeLevel、および各種の Release メンバー関数だけです。それ以外のメソッドを呼び出すと例外が発生する可能性があります。
IDirect3DDevice9::Reset の呼び出しは、リセット対象のデバイスを作成したスレッドとは異なるスレッドから行われた場合に失敗します。
Direct3D 9 では、ピクセルシェーダーと頂点シェーダーは IDirect3DDevice9::Reset の呼び出し後も保持されます。アプリケーションが明示的に再作成する必要はありません。
IDirect3D9::CreateDevice、IDirect3DDevice9::Reset、IDirect3DDevice9::CreateAdditionalSwapChain を呼び出す際、ウィンドウモードのバックバッファーフォーマットには D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウモードで IDirect3D9::CreateDevice を呼び出す前に、アプリケーションが現在のデスクトップのフォーマットを問い合わせる必要はありません。フルスクリーンモードの場合は、バックバッファーのフォーマットを指定する必要があります。BackBufferCount を 0 に設定する (BackBufferCount = 0) と、バックバッファーは 1 つになります。
グループ内の複数のディスプレイアダプターをリセットする場合は、pPresentationParameters に、アダプターグループ内の各ディスプレイに対応する D3DPRESENT_PARAMETERS 構造体の配列へのポインターを設定します。
マルチヘッドデバイスが D3DCREATE_ADAPTERGROUP_DEVICE で作成された場合、IDirect3DDevice9::Reset には D3DPRESENT_PARAMETERS 構造体の配列が必要で、各構造体はフルスクリーン表示を指定しなければなりません。ウィンドウモードに戻すには、アプリケーションはデバイスを破棄し、マルチヘッドではないデバイスをウィンドウモードで再作成する必要があります。
IDirect3DDevice9::Present メソッド (d3d9.h) は、デバイスが所有するバックバッファー列のうち、次のバッファーの内容を表示します。
| pSourceRect | RECT* | in | スワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない値へのポインター。pSourceRect は、転送元の矩形を格納する RECT 構造体へのポインターです。NULL の場合は、転送元サーフェス全体が表示されます。矩形が転送元サーフェスをはみ出す場合、矩形は転送元サーフェスにクリップされます。 |
| pDestRect | RECT* | in | スワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない値へのポインター。pDestRect は、ウィンドウのクライアント座標系における転送先の矩形を格納する RECT 構造体へのポインターです。NULL の場合は、クライアント領域全体が塗りつぶされます。矩形が転送先のクライアント領域をはみ出す場合、矩形は転送先のクライアント領域にクリップされます。 |
| hDestWindowOverride | HWND | in | この表示処理の対象としてクライアント領域が使用される、転送先ウィンドウへのポインター。この値が NULL の場合、ランタイムは表示処理に D3DPRESENT_PARAMETERS の hDeviceWindow メンバーを使用します。 |
| pDirtyRegion | RGNDATA* | in | スワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、この値は NULL でなければなりません。スワップチェーンの詳細については、サーフェスのフリッピング (Direct3D 9) および D3DSWAPEFFECT を参照してください。この値が NULL 以外の場合、含まれるリージョンはバックバッファー座標で表されます。リージョン内の矩形は、更新が必要な最小限のピクセル集合です。このメソッドは、リージョン内のピクセルのみ、または適切に拡張された矩形集合のみをコピーして表示処理を最適化する際に、これらの矩形を考慮します。これはあくまで最適化のための補助情報であり、アプリケーションはリージョンが厳密にコピーされることを前提にしてはなりません。実装は転送元の矩形全体をコピーすることを選択できます。 |
戻り値
解説(Remarks)
必要に応じて、転送元の矩形内のピクセルを対象ウィンドウのクライアント領域内の転送先矩形へ転送する際に、拡大縮小処理が適用されます。
レンダーターゲットが現在のレンダーターゲットでない場合 (追加のスワップチェーンを作成して得たバックバッファーなど) を除き、BeginScene と EndScene の対の間で Present を呼び出すと、D3DERR_INVALIDCALL を返して失敗します。これは Direct3D 9 での新しい動作です。
IDirect3DDevice9::GetBackBuffer メソッド (d3d9.h) は、デバイスのスワップチェーンからバックバッファーを取得します。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| iBackBuffer | DWORD | in | 返すバックバッファーオブジェクトのインデックス。バックバッファーには 0 からバックバッファーの総数から 1 を引いた値までの番号が付けられます。値 0 はフロントバッファーではなく最初のバックバッファーを返します。フロントバッファーにはこのメソッドではアクセスできません。フロントバッファーのコピーを取得するには IDirect3DDevice9::GetFrontBufferData を使用してください。 |
| Type | D3DBACKBUFFER_TYPE | in | Direct3D 9 ではステレオビューはサポートされていないため、このパラメーターに指定できる有効な値は D3DBACKBUFFER_TYPE_MONO だけです。 |
| ppBackBuffer | IDirect3DSurface9** | out | 返されるバックバッファーサーフェスを表す IDirect3DSurface9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。BackBuffer がバックバッファーの総数以上である場合、この関数は失敗し D3DERR_INVALIDCALL を返します。
解説(Remarks)
このメソッドを呼び出すと、IDirect3DSurface9 インターフェースの内部参照カウントが増加します。この IDirect3DSurface9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::GetRasterStatus メソッド (d3d9.h) は、スワップチェーンが表示されているモニターのラスターに関する情報を返します。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| pRasterStatus | D3DRASTER_STATUS* | inout | このアダプターが駆動するモニター上のラスターの位置やその他の状態に関する情報が格納される D3DRASTER_STATUS 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。pRasterStatus が無効な場合、またはデバイスが現在のスキャンラインの読み取りをサポートしていない場合は D3DERR_INVALIDCALL が返されます。デバイスがスキャンラインの読み取りをサポートしているかどうかを判別するには、D3DCAPS9 の Caps メンバーに D3DCAPS_READ_SCANLINE フラグがあるかを確認してください。
IDirect3DDevice9::SetDialogBoxMode メソッド (d3d9.h) は、フルスクリーンモードのアプリケーションで GDI ダイアログボックスの使用を可能にします。
| bEnableDialogs | BOOL | in | GDI ダイアログボックスを有効にする場合は TRUE、無効にする場合は FALSE を指定します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。次の条件がすべて満たされていない場合、メソッドは失敗し、戻り値は D3DERR_INVALIDCALL になります。
- アプリケーションが GDI と互換性のあるバックバッファーフォーマット、すなわち D3DFMT_X1R5G5B5、D3DFMT_R5G6B5、D3DFMT_X8R8G8B8 のいずれかを指定している。
- アプリケーションがマルチサンプリングを指定していない。
- アプリケーションが D3DSWAPEFFECT_DISCARD を指定している。
- アプリケーションが D3DPRESENTFLAG_LOCKABLE_BACKBUFFER を指定している。
- アプリケーションが D3DCREATE_ADAPTERGROUP_DEVICE を指定していない。
- アプリケーションが BeginScene と EndScene の間にいない。
解説(Remarks)
GDI ダイアログボックスは、デバイスウィンドウの子として作成する必要があります。また、親ウィンドウが子ウィンドウの再描画を管理できるようにするため、デバイスを作成したスレッドと同じスレッド内で作成してください。
このメソッドはウィンドウモードのアプリケーションには効果がありませんが、アプリケーションがデバイスをフルスクリーンモードにリセットした場合にはこの設定が反映されます。ウィンドウモードのアプリケーションで SetDialogBoxMode が成功した場合、その後フルスクリーンモードにリセットする際に、上記の制限に照らして検査が行われます。また、SetDialogBoxMode はスワップチェーン上のすべてのバックバッファーを破棄するため、アプリケーションはこの呼び出しの後、すべてのバックバッファーの内容を再描画することが期待されます。
IDirect3DDevice9::SetGammaRamp メソッド (d3d9.h) は、暗黙のスワップチェーンにガンマ補正ランプを設定します。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 | ||||||
| Flags | DWORD | in | 補正を適用するかどうかを示します。ガンマ補正を行うと表示の一貫性が高まりますが、処理のオーバーヘッドが発生する可能性があるため、頻繁に使用すべきではありません。画面全体を赤く点滅させるような短時間の効果にはキャリブレーションを行わず、長時間にわたるガンマ変更にはキャリブレーションを行ってください。次のいずれかの値を設定できます。
| ||||||
| pRamp | D3DGAMMARAMP* | in | 暗黙のスワップチェーンに設定するガンマ補正ランプを表す D3DGAMMARAMP 構造体へのポインター。 |
解説(Remarks)
Direct3D 9 ではスワップチェーンがデバイスのプロパティとして 1 つ存在するため、各デバイスには常に少なくとも 1 つのスワップチェーン (暗黙のスワップチェーン) があります。ガンマランプは直ちに反映され、垂直同期を待つことはありません。
スワップチェーンの現在の表示モード (フルスクリーンまたはウィンドウ) でデバイスがガンマランプをサポートしていない場合でも、エラーは返されません。アプリケーションは、D3DCAPS9 構造体の Caps2 メンバーにある D3DCAPS2_FULLSCREENGAMMA および D3DCAPS2_CANCALIBRATEGAMMA の機能ビットを確認することで、デバイスの機能とキャリブレーターがインストールされているかどうかを判別できます。
ウィンドウモードでガンマ補正して表示する場合は、ハードウェアがこの機能をサポートしていれば IDirect3DSwapChain9::Present を使用してください。DirectX 8 では、SetGammaRamp はフルスクリーンモードのアプリケーションでのみガンマランプを設定します。ガンマ補正の詳細については、ガンマ (Direct3D 9) を参照してください。
IDirect3DDevice9::GetGammaRamp メソッド (d3d9.h) は、スワップチェーンのガンマ補正ランプを取得します。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| pRamp | D3DGAMMARAMP* | inout | ガンマ補正ランプが格納される、アプリケーションが用意した D3DGAMMARAMP 構造体へのポインター。 |
IDirect3DDevice9::CreateTexture メソッド (d3d9.h) は、テクスチャーリソースを作成します。
| Width | DWORD | in | テクスチャーの最上位レベルの幅 (ピクセル単位)。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。 各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 になる場合は 1 が使用されます。 |
| Height | DWORD | in | テクスチャーの最上位レベルの高さ (ピクセル単位)。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。 各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 になる場合は 1 が使用されます。 |
| Levels | DWORD | in | テクスチャーのレベル数。0 を指定すると、ミップマップテクスチャーをサポートするハードウェアに対して、Direct3D が 1×1 ピクセルまでのすべてのサブレベルを生成します。 生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。 |
| Usage | DWORD | in | Usage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。 usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。 |
| Format | D3DFORMAT | in | テクスチャーの全レベルのフォーマットを表す D3DFORMAT 列挙型のメンバー。 |
| Pool | D3DPOOL | in | テクスチャーを配置するメモリクラスを表す D3DPOOL 列挙型のメンバー。 |
| ppTexture | IDirect3DTexture9** | out | 作成されたテクスチャーリソースを表す IDirect3DTexture9 インターフェースへのポインター。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターを リソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、 D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
アプリケーションは、D3DUSAGE_AUTOGENMIPMAP を指定して IDirect3D9::CheckDeviceFormat を呼び出すことで、特定のフォーマットにおける ミップマップの自動生成 (Direct3D 9) のサポート状況を調べることができます。IDirect3D9::CheckDeviceFormat が D3DOK_NOAUTOGEN を返す場合、 IDirect3DDevice9::CreateTexture は成功しますが、1 レベルのテクスチャーを返します。
Windows Vista では、CreateTexture はシステムメモリのポインターからテクスチャーを作成でき、システムメモリの使用、割り当て、削除についてアプリケーションがより柔軟に制御できます。 たとえば、アプリケーションは GDI のシステムメモリビットマップのポインターを渡し、それをラップした Direct3D のテクスチャーインターフェースを取得できます。CreateTexture でシステムメモリの ポインターを使用する場合、次の制限があります。
- テクスチャーのピッチは、幅に 1 ピクセルあたりのバイト数を掛けた値と等しくなければなりません。
- ミップマップレベルが 1 つのテクスチャーのみがサポートされます。Levels 引数は 1 でなければなりません。
- Pool 引数は D3DPOOL_SYSTEMMEM でなければなりません。
- pSharedHandle 引数は、システムメモリのポインターを保持できるバッファーへの有効なポインターでなければなりません。*pSharedHandle は、 テクスチャーの幅 × テクスチャーの高さ × テクスチャーフォーマットの 1 ピクセルあたりのバイト数のサイズを持つシステムメモリへの有効なポインターでなければなりません。
IDirect3DDevice9::CreateVolumeTexture メソッド (d3d9.h) は、ボリュームテクスチャーリソースを作成します。
| Width | DWORD | in | ボリュームテクスチャーの最上位レベルの幅 (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。 |
| Height | DWORD | in | ボリュームテクスチャーの最上位レベルの高さ (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。 |
| Depth | DWORD | in | ボリュームテクスチャーの最上位レベルの深度 (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。 |
| Levels | DWORD | in | テクスチャーのレベル数。0 を指定すると、ミップマップ対応のボリュームテクスチャーをサポートするハードウェアに対して、Direct3D が 1x1 ピクセルまでのすべてのサブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。 |
| Usage | DWORD | in | Usage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、D3DUSAGE_DYNAMIC または D3DUSAGE_SOFTWAREPROCESSING を使用します。詳細については、D3DUSAGE を参照してください。 |
| Format | D3DFORMAT | in | ボリュームテクスチャーの全レベルのフォーマットを表す D3DFORMAT 列挙型のメンバー。 |
| Pool | D3DPOOL | in | ボリュームテクスチャーを配置するメモリクラスを表す D3DPOOL 列挙型のメンバー。 |
| ppVolumeTexture | IDirect3DVolumeTexture9** | out | 作成されたボリュームテクスチャーリソースを表す IDirect3DVolumeTexture9 インターフェースへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
IDirect3DDevice9::CreateCubeTexture メソッド (d3d9.h) は、キューブテクスチャーリソースを作成します。
| EdgeLength | DWORD | in | キューブテクスチャーの最上位レベルの各面の辺のサイズ。各面の以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。 |
| Levels | DWORD | in | キューブテクスチャーの各面のレベル数。0 を指定すると、ミップマップ対応のキューブテクスチャーをサポートするハードウェアに対して、Direct3D が各面について 1x1 ピクセルまでのすべてのサブレベルを生成します。 生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。 |
| Usage | DWORD | in | Usage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateCubeTexture の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。詳細については「解説」を参照してください。 |
| Format | D3DFORMAT | in | キューブテクスチャーの全面・全レベルのフォーマットを表す D3DFORMAT 列挙型のメンバー。 |
| Pool | D3DPOOL | in | キューブテクスチャーを配置するメモリクラスを表す D3DPOOL 列挙型のメンバー。 |
| ppCubeTexture | IDirect3DCubeTexture9** | out | 作成されたキューブテクスチャーリソースを表す IDirect3DCubeTexture9 インターフェースへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
ミップマップ (テクスチャー) は、順次ダウンサンプリングされた (ミップマップ化された) サーフェスの集合です。一方、キューブテクスチャー (IDirect3DDevice9::CreateCubeTexture で作成) は、各面に 1 つずつ、計 6 つのテクスチャー (ミップマップ) の集合です。キューブテクスチャーにはすべての面が存在しなければなりません。また、キューブマップサーフェスは 3 つの次元 (x、y、z) すべてで同じピクセルサイズでなければなりません。
アプリケーションは、D3DUSAGE_AUTOGENMIPMAP を指定して IDirect3D9::CheckDeviceFormat を呼び出すことで、特定のフォーマットにおける ミップマップの自動生成 (Direct3D 9) のサポート状況を調べることができます。IDirect3D9::CheckDeviceFormat が D3DOK_NOAUTOGEN を返す場合、IDirect3DDevice9::CreateCubeTexture は成功しますが、1 レベルのテクスチャーを返します。
IDirect3DDevice9::CreateVertexBuffer メソッド (d3d9.h) は、頂点バッファーを作成します。
| Length | DWORD | in | 頂点バッファーのサイズ (バイト単位)。FVF 頂点バッファーの場合、Length は少なくとも 1 頂点を格納できる大きさでなければなりませんが、頂点サイズの倍数である必要はありません。非 FVF バッファーでは Length は検証されません。「解説」を参照してください。 |
| Usage | DWORD | in | Usage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateVertexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。詳細については「解説」を参照してください。 |
| FVF | DWORD | in | D3DFVF の組み合わせで、このバッファー内の頂点の頂点フォーマットを記述する用途指定子です。このパラメーターに有効な FVF コードを設定すると、作成される頂点バッファーは FVF 頂点バッファーになります (「解説」を参照)。一方、このパラメーターに 0 を設定すると、頂点バッファーは非 FVF 頂点バッファーになります。 |
| Pool | D3DPOOL | in | リソースを配置する有効なメモリクラスを表す D3DPOOL 列挙型のメンバー。D3DPOOL_SCRATCH は設定しないでください。 |
| ppVertexBuffer | IDirect3DVertexBuffer9** | out | 作成された頂点バッファーリソースを表す IDirect3DVertexBuffer9 インターフェースへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
頂点バッファーは、ハードウェア頂点処理とソフトウェア頂点処理のどちらでも使用できます。これは、デバイスと頂点バッファーの作成方法によって決まります。
デバイスの作成時、CreateDevice は動作フラグを使用して、頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。次の 3 つの選択肢があります。
- D3DCREATE_HARDWARE_VERTEXPROCESSING を設定して、頂点をハードウェアで処理する。
- D3DCREATE_SOFTWARE_VERTEXPROCESSING を設定して、頂点をソフトウェアで処理する。
- D3DCREATE_MIXED_VERTEXPROCESSING を設定して、頂点をハードウェアまたはソフトウェアのいずれかで処理する。
頂点バッファーの作成時、CreateVertexBuffer は usage パラメーターを使用して、頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。
- CreateDevice で D3DCREATE_HARDWARE_VERTEXPROCESSING を使用した場合、CreateVertexBuffer では 0 を使用しなければなりません。
- CreateDevice で D3DCREATE_SOFTWARE_VERTEXPROCESSING を使用した場合、CreateVertexBuffer では 0 または D3DUSAGE_SOFTWAREPROCESSING を使用しなければなりません。どちらの値でも、頂点はソフトウェアで処理されます。
- CreateDevice で D3DCREATE_MIXED_VERTEXPROCESSING を使用した場合、CreateVertexBuffer では 0 または D3DUSAGE_SOFTWAREPROCESSING のいずれも使用できます。
IDirect3DDevice9 インターフェースは、頂点バッファーオブジェクトに格納された頂点データを使用したプリミティブのレンダリングをサポートします。頂点バッファーは IDirect3DDevice9 から作成され、作成元の IDirect3DDevice9 オブジェクトでのみ使用できます。
FVF パラメーターに 0 以外の値 (有効な FVF コードでなければなりません) を設定すると、バッファーの内容が FVF コードによって特徴づけられることを示します。FVF コードを指定して作成された頂点バッファーは、FVF 頂点バッファーと呼ばれます。詳細については、FVF 頂点バッファー (Direct3D 9) を参照してください。
非 FVF バッファーは、マルチパスレンダリングや 1 パスでのマルチテクスチャーレンダリングにおいて、データをインターリーブするために使用できます。この場合、1 つのバッファーにジオメトリデータを格納し、他のバッファーにレンダリング対象の各テクスチャーのテクスチャー座標を格納します。レンダリング時には、ジオメトリデータを含むバッファーが、テクスチャー座標を含む各バッファーとインターリーブされます。代わりに FVF バッファーを使用すると、各バッファーにテクスチャーごとのテクスチャー座標データに加えて同一のジオメトリデータを格納する必要が生じます。その結果、採用する方式に応じて速度またはメモリのいずれかで不利になります。テクスチャー座標の詳細については、テクスチャー座標 (Direct3D 9) を参照してください。
IDirect3DDevice9::CreateIndexBuffer メソッド (d3d9.h) は、インデックスバッファーを作成します。
| Length | DWORD | in | インデックスバッファーのサイズ (バイト単位)。 | ||||||
| Usage | DWORD | in | Usage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateIndexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。詳細については「解説」を参照してください。 | ||||||
| Format | D3DFORMAT | in | インデックスバッファーのフォーマットを表す D3DFORMAT 列挙型のメンバー。詳細については「解説」を参照してください。有効な設定は次のとおりです。
| ||||||
| Pool | D3DPOOL | in | リソースを配置する有効なメモリクラスを表す D3DPOOL 列挙型のメンバー。 | ||||||
| ppIndexBuffer | IDirect3DIndexBuffer9** | out | 作成されたインデックスバッファーリソースを表す IDirect3DIndexBuffer9 インターフェースへのポインターのアドレス。 | ||||||
| pSharedHandle | HANDLE* | inout | このパラメーターは、Windows Vista 向けの Direct3D 9 ではリソースの共有に使用できます。リソースを共有しない場合は NULL を設定します。Windows Vista より前のオペレーティングシステム向けの Direct3D 9 では、このパラメーターは使用されません。NULL を設定してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、D3DXERR_INVALIDDATA、E_OUTOFMEMORY。
解説(Remarks)
インデックスバッファーは、インデックスを保持するために使用されるメモリリソースであり、サーフェスと頂点バッファーの両方に似ています。インデックスバッファーを使用すると、Direct3D は不要なデータコピーを回避し、想定される用途に最適なメモリ種別にバッファーを配置できます。
インデックスバッファーを使用するには、インデックスバッファーを作成してロックし、インデックスを書き込んでロックを解除し、IDirect3DDevice9::SetIndices に渡したうえで、頂点と頂点シェーダーを設定し、レンダリングのために IDirect3DDevice9::DrawIndexedPrimitive を呼び出します。
D3DCAPS9 構造体の MaxVertexIndex メンバーは、レンダリングに使用できるインデックスバッファーの種類を示します。
IDirect3DDevice9::CreateRenderTarget メソッド (d3d9.h) は、レンダーターゲットサーフェスを作成します。
| Width | DWORD | in | レンダーターゲットサーフェスの幅 (ピクセル単位)。 |
| Height | DWORD | in | レンダーターゲットサーフェスの高さ (ピクセル単位)。 |
| Format | D3DFORMAT | in | レンダーターゲットのフォーマットを表す D3DFORMAT 列挙型のメンバー。 |
| MultiSample | D3DMULTISAMPLE_TYPE | in | マルチサンプリングバッファーの種類を表す D3DMULTISAMPLE_TYPE 列挙型のメンバー。このパラメーターは、このレンダーターゲットのアンチエイリアシングの種類を指定します。このサーフェスを IDirect3DDevice9::SetRenderTarget に渡す場合、そのマルチサンプル種別は IDirect3DDevice9::SetDepthStencilSurface で設定した深度ステンシルと同じでなければなりません。 |
| MultisampleQuality | DWORD | in | 品質レベル。有効な範囲は 0 から、IDirect3D9::CheckDeviceMultiSampleType の pQualityLevels が返すレベルより 1 小さい値までです。これより大きい値を渡すとエラー D3DERR_INVALIDCALL が返されます。対になるレンダーターゲットと深度ステンシルサーフェスの MultisampleQuality の値、およびマルチサンプル種別は、すべて一致していなければなりません。 |
| Lockable | BOOL | in | アプリケーションが Lockable に TRUE を指定しない限り、レンダーターゲットはロックできません。 なお、ロック可能なレンダーターゲットは一部のグラフィックスハードウェアでパフォーマンスを低下させます。読み戻し性能 (ビデオメモリからシステムメモリへのデータ転送) は使用しているハードウェアの種類 (AGP と PCI Express) に依存し、通常はアップロード性能 (システムメモリからビデオメモリへのデータ転送) より大幅に低くなります。レンダーターゲットへの読み取りアクセスが必要な場合は、ロック可能なレンダーターゲットではなく GetRenderTargetData を使用してください。 |
| ppSurface | IDirect3DSurface9** | out | IDirect3DSurface9 インターフェースへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
レンダーターゲットサーフェスは D3DPOOL_DEFAULT のメモリクラスに配置されます。
ロック可能なマルチサンプルレンダーターゲットの作成はサポートされていません。
IDirect3DDevice9::CreateDepthStencilSurface メソッド (d3d9.h) は、深度ステンシルリソースを作成します。
| Width | DWORD | in | 深度ステンシルサーフェスの幅 (ピクセル単位)。 |
| Height | DWORD | in | 深度ステンシルサーフェスの高さ (ピクセル単位)。 |
| Format | D3DFORMAT | in | 深度ステンシルサーフェスのフォーマットを表す D3DFORMAT 列挙型のメンバー。この値は、このデバイスで列挙される深度ステンシルフォーマットのいずれかでなければなりません。 |
| MultiSample | D3DMULTISAMPLE_TYPE | in | マルチサンプリングバッファーの種類を表す D3DMULTISAMPLE_TYPE 列挙型のメンバー。この値は、許可されているマルチサンプル種別のいずれかでなければなりません。このサーフェスを IDirect3DDevice9::SetDepthStencilSurface に渡す場合、そのマルチサンプル種別は IDirect3DDevice9::SetRenderTarget で設定したレンダーターゲットと同じでなければなりません。 |
| MultisampleQuality | DWORD | in | 品質レベル。有効な範囲は 0 から、IDirect3D9::CheckDeviceMultiSampleType の pQualityLevels が返すレベルより 1 小さい値までです。これより大きい値を渡すとエラー D3DERR_INVALIDCALL が返されます。対になるレンダーターゲットと深度ステンシルサーフェスの MultisampleQuality の値、および MultiSample 種別は、すべて一致していなければなりません。 |
| Discard | BOOL | in | Z バッファーの破棄を有効にするにはこのフラグを TRUE に、それ以外の場合は FALSE に設定します。 このフラグを設定した場合、IDirect3DDevice9::Present を呼び出した後、または別の深度サーフェスを指定して IDirect3DDevice9::SetDepthStencilSurface を呼び出した後、深度ステンシルバッファーの内容は無効になります。 このフラグは、D3DPRESENTFLAG の定数 D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL と同じ動作になります。 |
| ppSurface | IDirect3DSurface9** | out | 作成された深度ステンシルサーフェスリソースを表す IDirect3DSurface9 インターフェースへのポインターのアドレス。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
深度ステンシルバッファーのメモリクラスは常に D3DPOOL_DEFAULT です。
IDirect3DDevice9::UpdateSurface メソッド (d3d9.h) は、あるサーフェスから別のサーフェスへ、矩形単位のピクセル領域をコピーします。
| pSourceSurface | IDirect3DSurface9* | in | コピー元サーフェスを表す IDirect3DSurface9 インターフェースへのポインター。このパラメーターは pDestinationSurface とは異なるサーフェスを指す必要があります。 |
| pSourceRect | RECT* | in | コピー元サーフェス上の矩形へのポインター。このパラメーターに NULL を指定すると、サーフェス全体がコピーされます。 |
| pDestinationSurface | IDirect3DSurface9* | in | コピー先サーフェスを表す IDirect3DSurface9 インターフェースへのポインター。 |
| pDestPoint | POINT* | in | コピー先矩形の左上隅へのポインター。このパラメーターに NULL を指定すると、サーフェス全体がコピーされます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは DirectX 8 の CopyRects に相当します。
この関数には次の制限があります。
- コピー元サーフェスは D3DPOOL_SYSTEMMEM で作成されている必要があります。
- コピー先サーフェスは D3DPOOL_DEFAULT で作成されている必要があります。
- どちらのサーフェスも、ロックされていたり、未解放のデバイスコンテキストを保持していたりしてはなりません。
- どちらのサーフェスもマルチサンプリングを指定して作成することはできません。両方のサーフェスで有効なフラグは D3DMULTISAMPLE_NONE のみです。
- サーフェスのフォーマットに深度ステンシルフォーマットは使用できません。
- コピー元とコピー先の矩形はサーフェス内に収まっている必要があります。
- 拡大や縮小は許可されません (両方の矩形は同じサイズでなければなりません)。
- コピー元のフォーマットはコピー先のフォーマットと一致している必要があります。
| コピー先のフォーマット | |||||
|---|---|---|---|---|---|
| テクスチャー | RT テクスチャー | RT | オフスクリーンプレーン | ||
| コピー元のフォーマット | テクスチャー | 可 | 可 | 可* | 可 |
| RT テクスチャー | 不可 | 不可 | 不可 | 不可 | |
| RT | 不可 | 不可 | 不可 | 不可 | |
| オフスクリーンプレーン | 可 | 可 | 可 | 可 |
- ドライバーが要求されたコピーをサポートしていない場合は、ロックとコピーを使用してエミュレートされます。
D3DPOOL_DEFAULT のレンダーターゲットから D3DPOOL_SYSTEMMEM のサーフェスへデータをコピーする必要がある場合は、GetRenderTargetData を使用できます。
IDirect3DDevice9::UpdateTexture メソッド (d3d9.h) は、テクスチャーのダーティ部分を更新します。
| pSourceTexture | IDirect3DBaseTexture9* | in | コピー元テクスチャーを表す IDirect3DBaseTexture9 インターフェースへのポインター。コピー元テクスチャーはシステムメモリ (D3DPOOL_SYSTEMMEM) になければなりません。 |
| pDestinationTexture | IDirect3DBaseTexture9* | in | コピー先テクスチャーを表す IDirect3DBaseTexture9 インターフェースへのポインター。コピー先テクスチャーは D3DPOOL_DEFAULT のメモリプールになければなりません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
テクスチャーの一部をダーティにするには、テクスチャーをロックするか、次のいずれかのメソッドを呼び出します。
- IDirect3DCubeTexture9::AddDirtyRect
- IDirect3DTexture9::AddDirtyRect
- IDirect3DVolumeTexture9::AddDirtyBox
- IDirect3DDevice9::UpdateSurface
パフォーマンス上の理由から、ダーティ領域はテクスチャーのレベル 0 についてのみ記録されます。サブレベルについては、対応する (スケーリングされた) 矩形またはボックスもダーティであるとみなされます。ダーティ領域は、D3DLOCK_NO_DIRTY_UPDATE や D3DLOCK_READONLY を指定せずに LockRect または IDirect3DVolumeTexture9::LockBox を呼び出したときに自動的に記録されます。また、IDirect3DDevice9::UpdateSurface のコピー先サーフェスもダーティとしてマークされます。
テクスチャーの種類が異なる場合、最下位レベルのバッファーのサイズが異なる場合、または対応するレベルが一致しない場合、このメソッドは失敗します。たとえば、次のサイズを持つ 6 レベルのコピー元テクスチャーを考えます。
32x16, 16x8, 8x4, 4x2, 2x1, 1x1
この 6 レベルのコピー元テクスチャーは、次の 1 レベルのコピー先に対するコピー元になれます。
1x1
また、次の 2 レベルのコピー先に対しても同様です。
2x1, 1x1
さらに、次の 3 レベルのコピー先に対しても同様です。
4x2, 2x1, 1x1
さらに、テクスチャーのフォーマットが異なる場合もこのメソッドは失敗します。コピー先テクスチャーのレベル数がコピー元より少ない場合は、一致するレベルのみがコピーされます。コピー元テクスチャーのレベル数がコピー先より少ない場合、このメソッドは失敗します。
コピー元テクスチャーにダーティ領域がある場合、コピーをその領域のみに限定して最適化できます。ただし、ダーティとマークされたバイトだけがコピーされることは保証されません。
コピー元とコピー先のサーフェスの組み合わせには次の可能性があります。
- pSourceTexture が自動生成でないミップマップで、pDestinationTexture が自動生成ミップマップの場合、一致する最上位レベルのみが更新され、コピー先のサブレベルは再生成されます。コピー元のその他のサブレベルは無視されます。
- pSourceTexture と pDestinationTexture の両方が自動生成ミップマップの場合、一致する最上位レベルのみが更新されます。コピー元のサブレベルは無視され、コピー先のサブレベルは再生成されます。
- pSourceTexture が自動生成ミップマップで、pDestinationTexture が自動生成でないミップマップの場合、UpdateTexture は失敗します。
IDirect3DDevice9::GetRenderTargetData メソッド (d3d9.h) は、レンダーターゲットのデータをデバイスメモリからシステムメモリへコピーします。
| pRenderTarget | IDirect3DSurface9* | in | レンダーターゲットを表す IDirect3DSurface9 オブジェクトへのポインター。 |
| pDestSurface | IDirect3DSurface9* | in | コピー先サーフェスを表す IDirect3DSurface9 オブジェクトへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DRIVERINTERNALERROR、D3DERR_DEVICELOST、D3DERR_INVALIDCALL。
解説(Remarks)
コピー先サーフェスは、オフスクリーンプレーンサーフェスか、D3DPOOL_SYSTEMMEM で作成されたテクスチャー (ミップマップまたはキューブテクスチャー) のレベルでなければなりません。
コピー元サーフェスは、通常のレンダーターゲットか、POOL_DEFAULT で作成されたレンダーターゲットテクスチャー (ミップマップまたはキューブテクスチャー) のレベルでなければなりません。
次の場合、このメソッドは失敗します。
- レンダーターゲットがマルチサンプリングされている。
- コピー元のレンダーターゲットとコピー先のサーフェスのサイズが異なる。
- コピー元のレンダーターゲットとコピー先のサーフェスのフォーマットが一致しない。
IDirect3DDevice9::GetFrontBufferData メソッド (d3d9.h) は、デバイスのフロントバッファーをアプリケーションが用意したシステムメモリのバッファーへコピーします。
| iSwapChain | DWORD | in | スワップチェーンを指定する符号なし整数。 |
| pDestSurface | IDirect3DSurface9* | in | フロントバッファーの内容のコピーを受け取る IDirect3DSurface9 インターフェースへのポインター。データは、デバイスの出力で垂直方向の最上行から最下行へ向かって、行間に隙間なく連続した行として返されます。 ウィンドウモードの場合、コピー先サーフェスのサイズはデスクトップのサイズにしてください。フルスクリーンモードの場合、コピー先サーフェスのサイズは画面サイズにしてください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DRIVERINTERNALERROR、D3DERR_DEVICELOST、D3DERR_INVALIDCALL
解説(Remarks)
pDestSurface が指すバッファーには、標準の 32 ビット/ピクセルフォーマット D3DFMT_A8R8G8B8 に変換されたフロントバッファーの内容が格納されます。
アンチエイリアス処理されたスクリーンショットを取得できるのは、このメソッドだけです。
この関数は設計上きわめて低速であり、パフォーマンスが重要な処理経路では使用しないでください。
詳細については、ロストデバイスと取得データを参照してください。
IDirect3DDevice9::StretchRect メソッド (d3d9helper.h) は、コピー元矩形の内容をコピー先矩形へコピーします。コピーの際に、コピー元を拡大縮小したりフィルタリングしたりできます。
| pSourceSurface | IDirect3DSurface9* | in | コピー元サーフェスへのポインター。IDirect3DSurface9 を参照してください。 |
| pSourceRect | RECT* | in | コピー元矩形へのポインター。このパラメーターに NULL を指定すると、コピー元サーフェス全体が使用されます。 |
| pDestSurface | IDirect3DSurface9* | in | コピー先サーフェスへのポインター。IDirect3DSurface9 を参照してください。 |
| pDestRect | RECT* | in | コピー先矩形へのポインター。このパラメーターに NULL を指定すると、コピー先サーフェス全体が使用されます。 |
| Filter | D3DTEXTUREFILTERTYPE | in | フィルターの種類。指定できる値は D3DTEXF_NONE、D3DTEXF_POINT、D3DTEXF_LINEAR です。詳細については、D3DTEXTUREFILTERTYPE を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
StretchRect の制限事項
- ドライバーによってサポート状況が異なります。どのドライバーがどのコピー元・コピー先フォーマットをサポートするかについては、後述のドライバーサポートの節を参照してください。
- コピー元とコピー先のサーフェスは既定のメモリプールで作成されている必要があります。
- フィルタリングを指定する場合は、適切なフィルター機能を設定する必要があります (D3DCAPS9 の StretchRectFilterCaps を参照)。
- 同一サーフェス上のコピー元矩形とコピー先矩形の間での拡大縮小はサポートされません。
- コピー先サーフェスがオフスクリーンプレーンサーフェスで、コピー元がそうでない場合、拡大縮小はサポートされません。
- いずれかのサーフェスが圧縮フォーマットの場合、コピー元矩形とコピー先矩形の間で拡大縮小することはできません (圧縮テクスチャーの使用 (Direct3D 9) を参照)。
- 拡大縮小がサポートする色空間変換は、YUV から高精度 RGBA への変換のみです。色変換はソフトウェアエミュレーションではサポートされないため、IDirect3D9::CheckDeviceFormatConversion を使用してハードウェアの色変換サポートを確認してください。
- コピー元またはコピー先のサーフェスがテクスチャーサーフェス (またはキューブテクスチャーサーフェス) の場合、D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES をサポートする Direct3D 9 ドライバーを使用する必要があります (D3DDEVCAPS2 を参照)。
- コピー元とコピー先のサーフェスは、テクスチャーではないプレーンな深度ステンシルサーフェスでなければなりません (IDirect3DDevice9::CreateDepthStencilSurface を参照)。
- どちらのサーフェスも破棄可能 (discardable) であってはなりません。
- サーフェス全体をコピーする必要があります (つまり、部分矩形のコピーは許可されません)。
- フォーマット変換、拡大、縮小はサポートされません。
- StretchRect は BeginScene と EndScene の対の内部では呼び出せません。
StretchRect を使用して、あるレンダーターゲットから別のレンダーターゲットへコピーできます。コピー元のレンダーターゲットがマルチサンプルされている場合、コピー元レンダーターゲットがダウンサンプリングされます。たとえば次のようにします。
- マルチサンプルのレンダーターゲットを作成します。
- 同じサイズで、マルチサンプルではない 2 つ目のレンダーターゲットを作成します。
- (StretchRect を使用して) マルチサンプルのレンダーターゲットを 2 つ目のレンダーターゲットへコピーします。
ドライバーサポート
StretchRect で有効となるサーフェスの組み合わせには多くの制限があります。ドライバーが Direct3D 9 ドライバーかそれ以前のものか、また拡大縮小を伴う処理かどうかといった要因が関係します。アプリケーションがドライバーの世代を識別することは想定されていないため、ランタイムは Direct3D 9 レベル以降のドライバーに対して新しい機能ビット D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES (D3DDEVCAPS2 を参照) を自動的に設定します。
| DirectX 8 ドライバー (拡大縮小なし) | |||||
|---|---|---|---|---|---|
| コピー先のフォーマット | |||||
| テクスチャー | RT テクスチャー | RT | オフスクリーンプレーン | ||
| コピー元のフォーマット | テクスチャー | 不可 | 不可 | 不可 | 不可 |
| RT テクスチャー | 不可 | 可 | 可 | 不可 | |
| RT | 不可 | 可 | 可 | 不可 | |
| オフスクリーンプレーン | 可 | 可 | 可 | 可 |
| DirectX 8 ドライバー (拡大縮小あり) | |||||
|---|---|---|---|---|---|
| コピー先のフォーマット | |||||
| テクスチャー | RT テクスチャー | RT | オフスクリーンプレーン | ||
| コピー元のフォーマット | テクスチャー | 不可 | 不可 | 不可 | 不可 |
| RT テクスチャー | 不可 | 不可 | 不可 | 不可 | |
| RT | 不可 | 可 | 可 | 不可 | |
| オフスクリーンプレーン | 不可 | 可 | 可 | 不可 |
| Direct3D 9 ドライバー (拡大縮小なし) | |||||
|---|---|---|---|---|---|
| コピー先のフォーマット | |||||
| テクスチャー | RT テクスチャー | RT | オフスクリーンプレーン | ||
| コピー元のフォーマット | テクスチャー | 不可 | 可 | 可 | 不可 |
| RT テクスチャー | 不可 | 可 | 可 | 不可 | |
| RT | 不可 | 可 | 可 | 不可 | |
| オフスクリーンプレーン | 不可 | 可 | 可 | 可 |
| Direct3D 9 ドライバー (拡大縮小あり) | |||||
|---|---|---|---|---|---|
| コピー先のフォーマット | |||||
| テクスチャー | RT テクスチャー | RT | オフスクリーンプレーン | ||
| コピー元のフォーマット | テクスチャー | 不可 | 可 | 可 | 不可 |
| RT テクスチャー | 不可 | 可 | 可 | 不可 | |
| RT | 不可 | 可 | 可 | 不可 | |
| オフスクリーンプレーン | 不可 | 可 | 可 | 不可 |
IDirect3DDevice9::ColorFill メソッド (d3d9.h) は、D3DPOOL_DEFAULT のサーフェスの矩形領域を指定した色で塗りつぶす機能をアプリケーションに提供します。
| pSurface | IDirect3DSurface9* | in | 塗りつぶす対象のサーフェスへのポインター。 |
| pRect | RECT* | in | コピー元矩形へのポインター。NULL を使用すると、サーフェス全体が塗りつぶされます。 |
| color | DWORD | in | 塗りつぶしに使用する色。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドを適用できるのは、レンダーターゲット、レンダーターゲットテクスチャーサーフェス、またはプール種別が D3DPOOL_DEFAULT のオフスクリーンプレーンサーフェスに限られます。
IDirect3DDevice9::ColorFill はすべてのフォーマットで動作します。ただし、リファレンスデバイスまたはソフトウェアデバイスを使用する場合にサポートされるフォーマットは、D3DFMT_X1R5G5B5、D3DFMT_A1R5G5B5、D3DFMT_R5G6B5、D3DFMT_X8R8G8B8、D3DFMT_A8R8G8B8、D3DFMT_YUY2、D3DFMT_G8R8_G8B8、D3DFMT_UYVY、D3DFMT_R8G8_B8G8、D3DFMT_R16F、D3DFMT_G16R16F、D3DFMT_A16B16G16R16F、D3DFMT_R32F、D3DFMT_G32R32F、D3DFMT_A32B32G32R32F のみです。
DirectX 7 または DirectX 8.x のドライバーを使用する場合、サポートされる YUV フォーマットは D3DFMT_UYVY と D3DFMT_YUY2 のみです。
IDirect3DDevice9::CreateOffscreenPlainSurface メソッド (d3d9.h) は、オフスクリーンサーフェスを作成します。
| Width | DWORD | in | サーフェスの幅。 |
| Height | DWORD | in | サーフェスの高さ。 |
| Format | D3DFORMAT | in | サーフェスのフォーマット。D3DFORMAT を参照してください。 |
| Pool | D3DPOOL | in | サーフェスのプール種別。D3DPOOL を参照してください。 |
| ppSurface | IDirect3DSurface9** | out | 作成された IDirect3DSurface9 インターフェースへのポインター。 |
| pSharedHandle | HANDLE* | inout | 予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
D3DPOOL_SCRATCH を指定すると、DirectX 8.x の CreateImageSurface メソッドで作成されるサーフェスと同一の特性を持つサーフェスが返されます。
IDirect3DDevice9::StretchRect や IDirect3DDevice9::ColorFill と組み合わせて使用する場合は、D3DPOOL_DEFAULT が適切なプールです。
オフスクリーンプレーンサーフェスの作成時に D3DPOOL_MANAGED は使用できません。メモリプールの詳細については、D3DPOOL を参照してください。
オフスクリーンプレーンサーフェスは、プール種別にかかわらず常にロック可能です。
IDirect3DDevice9::SetRenderTarget メソッド (d3d9helper.h) は、デバイスに新しいカラーバッファーを設定します。
| RenderTargetIndex | DWORD | in | レンダーターゲットのインデックス。「解説」を参照してください。 |
| pRenderTarget | IDirect3DSurface9* | in | 新しいカラーバッファーへのポインター。NULL の場合、対応する RenderTargetIndex のカラーバッファーが無効になります。デバイスには常にカラーバッファーが関連付けられていなければなりません。 新しいレンダーターゲットサーフェスには、少なくとも D3DUSAGE_RENDERTARGET が指定されている必要があります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 次のいずれかの場合、このメソッドは D3DERR_INVALIDCALL を返します。
- pRenderTarget = NULL かつ RenderTargetIndex = 0 の場合
- pRenderTarget が NULL 以外で、レンダーターゲットが無効な場合。
解説(Remarks)
デバイスは複数のレンダーターゲットをサポートできます。デバイスがサポートするレンダーターゲットの数は、D3DCAPS9 の NumSimultaneousRTs メンバーに格納されています。複数レンダーターゲット (Direct3D 9) を参照してください。
新しいレンダーターゲットを設定すると、ビューポート (ビューポートとクリッピング (Direct3D 9) を参照) は新しいレンダーターゲットの全体サイズに設定されます。
一部のハードウェアでは、深度ステンシルバッファーとカラーバッファーの互換性が検査されます。検査が行われる場合でも、それはデバッグビルドでのみ実施されます。
このメソッドを使用する際の制限には次のものがあります。
- レンダーターゲットと深度ステンシルサーフェスのマルチサンプル種別は同じでなければなりません。
- レンダーターゲットと深度ステンシルサーフェスのフォーマットは互換性がなければなりません。IDirect3D9::CheckDepthStencilMatch を参照してください。
- 深度ステンシルサーフェスのサイズは、レンダーターゲットのサイズ以上でなければなりません。
キューブテクスチャーは、サーフェスの集合である点で他のサーフェスと異なります。キューブテクスチャーを指定して IDirect3DDevice9::SetRenderTarget を呼び出すには、IDirect3DCubeTexture9::GetCubeMapSurface を使用して個々の面を選択し、得られたサーフェスを IDirect3DDevice9::SetRenderTarget に渡す必要があります。
IDirect3DDevice9::GetRenderTarget メソッド (d3d9.h) は、レンダーターゲットサーフェスを取得します。
| RenderTargetIndex | DWORD | in | レンダーターゲットのインデックス。「解説」を参照してください。 |
| ppRenderTarget | IDirect3DSurface9** | out | このデバイスについて返されるレンダーターゲットサーフェスを表す IDirect3DSurface9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、引数のいずれかが無効であれば D3DERR_INVALIDCALL が、指定されたインデックスに利用可能なレンダーターゲットがなければ D3DERR_NOTFOUND が返されます。
解説(Remarks)
通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは機能しません。ただし、このメソッドはインターフェースを返すため、ピュアデバイスでも機能します。
デバイスは現在、複数のレンダーターゲットをサポートできます。デバイスがサポートするレンダーターゲットの数は、D3DCAPS9 の NumSimultaneousRTs メンバーに格納されています。複数レンダーターゲット (Direct3D 9) を参照してください。
このメソッドを呼び出すと、IDirect3DSurface9 インターフェースの内部参照カウントが増加します。この IDirect3DSurface9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::SetDepthStencilSurface メソッド (d3d9.h) は、深度ステンシルサーフェスを設定します。
| pNewZStencil | IDirect3DSurface9* | in | 深度ステンシルサーフェスを表す IDirect3DSurface9 インターフェースへのポインターのアドレス。これを NULL に設定すると、深度ステンシル処理が無効になります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 pZStencilSurface が NULL 以外の場合、ステンシルサーフェスが無効であれば戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドを使用する際の制限には次のものがあります。
- レンダーターゲットと深度ステンシルサーフェスのマルチサンプル種別は同じでなければなりません。
- レンダーターゲットと深度ステンシルサーフェスのフォーマットは互換性がなければなりません。IDirect3D9::CheckDepthStencilMatch を参照してください。
- 深度ステンシルサーフェスのサイズは、レンダーターゲットのサイズ以上でなければなりません。
キューブテクスチャーは、サーフェスの集合である点で他のサーフェスと異なります。キューブテクスチャーを指定して IDirect3DDevice9::SetDepthStencilSurface を呼び出すには、IDirect3DCubeTexture9::GetCubeMapSurface を使用して個々の面を選択し、得られたサーフェスを IDirect3DDevice9::SetDepthStencilSurface に渡す必要があります。
IDirect3DDevice9::GetDepthStencilSurface メソッド (d3d9.h) は、Direct3DDevice オブジェクトが所有する深度ステンシルサーフェスを取得します。
| ppZStencilSurface | IDirect3DSurface9** | out | 返される深度ステンシルサーフェスを表す IDirect3DSurface9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。デバイスに深度ステンシルバッファーが関連付けられていない場合、戻り値は D3DERR_NOTFOUND になります。それ以外でメソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドを呼び出すと、IDirect3DSurface9 インターフェースの内部参照カウントが増加します。この IDirect3DSurface9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::BeginScene メソッド (d3d9.h) は、シーンを開始します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。IDirect3DDevice9::BeginScene を IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対の内部で呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、 先に IDirect3DDevice9::EndScene を呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。
解説(Remarks)
アプリケーションは、レンダリングを行う前に IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了して 再度 IDirect3DDevice9::BeginScene を呼び出す前に IDirect3DDevice9::EndScene を呼び出す必要があります。
IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったことになり、 IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の IDirect3DDevice9::BeginScene が失敗していた場合、 IDirect3DDevice9::EndScene の呼び出しは失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。
表示 (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の連続する呼び出しの間には、 IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が 1 つあるべきです。IDirect3DDevice9::BeginScene は レンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のレンダリングをすべてランタイムへ送信した後に 1 回呼び出してください。表示の呼び出しの間に入れ子でない IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が複数あっても 問題はありませんが、対が 2 つ以上あるとパフォーマンスが低下する可能性があります。 CPU とグラフィックスアクセラレーターの並列性を最大化するには、 表示の呼び出しよりできるだけ早い段階で IDirect3DDevice9::EndScene を呼び出すのが有利です。
IDirect3DDevice9::EndScene メソッド (d3d9.h) は、IDirect3DDevice9::BeginScene の呼び出しによって開始されたシーンを終了します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。IDirect3DDevice9::BeginScene を IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対の内部で呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、先に IDirect3DDevice9::EndScene を呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。
解説(Remarks)
このメソッドが成功した時点で、シーンはドライバーによるレンダリングのためにキューに登録されています。これは同期的なメソッドではないため、このメソッドから戻った時点でシーンのレンダリングが完了していることは保証されません。
アプリケーションは、レンダリングを行う前に IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了して再度 IDirect3DDevice9::BeginScene を呼び出す前に IDirect3DDevice9::EndScene を呼び出す必要があります。
IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったことになり、IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の
IDirect3DDevice9::BeginScene が失敗していた場合、IDirect3DDevice9::EndScene の呼び出しは失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。
表示 (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の連続する呼び出しの間には、IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対は多くとも 1 つであるべきです。IDirect3DDevice9::BeginScene はレンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のレンダリングをすべてランタイムへ送信した後に 1 回呼び出してください。CPU とグラフィックスアクセラレーターの並列性を最大化するには、表示の呼び出しよりできるだけ早い段階で IDirect3DDevice9::EndScene を呼び出すのが有利です。
IDirect3DDevice9::Clear メソッド (d3d9.h) は、レンダーターゲット、複数のレンダーターゲット、ステンシルバッファー、深度バッファーなど、1 つ以上のサーフェスをクリアします。
| Count | DWORD | in | pRects が指す配列内の矩形の数。pRects が NULL の場合は 0 に設定しなければなりません。pRects が有効なポインターの場合は 0 にできません。 |
| pRects | D3DRECT* | in | クリアする矩形を記述する D3DRECT 構造体の配列へのポインター。サーフェス全体をクリアするには、矩形をレンダリングターゲットのサイズに設定します。各矩形は、レンダーターゲット上の点に対応するスクリーン座標を使用します。座標はビューポート矩形の範囲にクリップされます。ビューポート矩形全体をクリアすることを示すには、このパラメーターを NULL に、Count を 0 に設定します。 |
| Flags | DWORD | in | クリアするサーフェスを指定する、1 つ以上の D3DCLEAR フラグの組み合わせ。 |
| Color | DWORD | in | レンダーターゲットをこの ARGB 色でクリアします。 |
| Z | FLOAT | in | 深度バッファーを、0 から 1 の範囲のこの新しい z 値でクリアします。「解説」を参照してください。 |
| Stencil | DWORD | in | ステンシルバッファーを、0 から 2ⁿ-1 (n はステンシルバッファーのビット深度) の範囲のこの新しい値でクリアします。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、レンダーターゲット、MRT 内のすべてのレンダーターゲット、ステンシルバッファー、深度バッファーなどのサーフェスをクリアするために使用します。いくつのサーフェスがクリアされるかは Flags によって決まります。矩形の配列で定義したサーフェスの一部だけをクリアするには pRects を使用します。
次の場合、IDirect3DDevice9::Clear は失敗します。
- 深度バッファーが接続されていないレンダーターゲットで、深度バッファーまたはステンシルバッファーをクリアしようとした場合。
- 深度バッファーがステンシルデータを含んでいないときに、ステンシルバッファーをクリアしようとした場合。
IDirect3DDevice9::SetTransform メソッド (d3d9helper.h) は、変換に関連するデバイス状態を 1 つ設定します。
| State | D3DTRANSFORMSTATETYPE | in | 変更対象のデバイス状態変数。このパラメーターには、D3DTRANSFORMSTATETYPE 列挙型の任意のメンバー、または D3DTS_WORLDMATRIX マクロを指定できます。 |
| pMatrix | D3DMATRIX* | in | 現在の変換を変更する D3DMATRIX 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL が返されます。
IDirect3DDevice9::GetTransform メソッド (d3d9.h) は、変換状態を表す行列を取得します。
| State | D3DTRANSFORMSTATETYPE | in | 変更対象のデバイス状態変数。このパラメーターには、D3DTRANSFORMSTATETYPE 列挙型の任意のメンバー、または D3DTS_WORLDMATRIX マクロを指定できます。 |
| pMatrix | D3DMATRIX* | inout | 返される変換状態を記述する D3DMATRIX 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他のフラグ値のいずれかを指定してデバイスを作成する必要があります。
IDirect3DDevice9::MultiplyTransform メソッド (d3d9.h) は、デバイスのワールド行列、ビュー行列、または射影行列に、指定した行列を乗算します。
| param0 | D3DTRANSFORMSTATETYPE | in | 対象とする変換行列の種類を示すD3DTRANSFORMSTATETYPE。 |
| param1 | D3DMATRIX* | in | 現在の行列に乗算するD3DMATRIXへのポインタ。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL になります。
解説(Remarks)
乗算の順序は pMatrix × State です。
アプリケーションは、IDirect3DDevice9::MultiplyTransform メソッドを使用して変換の階層構造を扱うことができます。たとえば、腕を表すジオメトリと変換は次のような階層に構成できます。
shoulder_transformation
upper_arm geometry
elbow transformation
lower_arm geometry
wrist transformation
hand geometry
アプリケーションは、この階層をレンダリングするために次のような一連の呼び出しを行います。この疑似コードではすべてのパラメーターを示しているわけではありません。
IDirect3DDevice9::SetTransform(D3DTS_WORLDMATRIX(0),
shoulder_transform)
IDirect3DDevice9::DrawPrimitive(upper_arm)
IDirect3DDevice9::MultiplyTransform(D3DTS_WORLDMATRIX(0),
elbow_transform)
IDirect3DDevice9::DrawPrimitive(lower_arm)
IDirect3DDevice9::MultiplyTransform(D3DTS_WORLDMATRIX(0),
wrist_transform)
IDirect3DDevice9::DrawPrimitive(hand)
IDirect3DDevice9::SetViewport メソッド (d3d9helper.h) は、デバイスのビューポートパラメーターを設定します。
| pViewport | D3DVIEWPORT9* | in | 設定するビューポートパラメーターを指定する D3DVIEWPORT9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合は D3DERR_INVALIDCALL を返します。これは pViewport が無効な場合、または pViewport がレンダーターゲットサーフェス内に存在し得ない領域を指定している場合に発生します。
解説(Remarks)
Direct3D はビューポートに次の既定値を設定します。
D3DVIEWPORT9 vp;
vp.X = 0;
vp.Y = 0;
vp.Width = RenderTarget.Width;
vp.Height = RenderTarget.Height;
vp.MinZ = 0.0f;
vp.MaxZ = 1.0f;
IDirect3DDevice9::SetViewport は、画面の一部に描画するために使用できます。ビューポートの設定を有効にするため、ジオメトリを描画する前に必ず呼び出してください。
1 つのシーン内に複数のビューを描画するには、ビューごとに IDirect3DDevice9::SetViewport とジオメトリの描画を繰り返します。
IDirect3DDevice9::GetViewport メソッド (d3d9.h) は、デバイスに現在設定されているビューポートパラメーターを取得します。
| pViewport | D3DVIEWPORT9* | inout | 返されるビューポートパラメーターを表す D3DVIEWPORT9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。pViewport パラメーターが無効な場合は D3DERR_INVALIDCALL が返されます。
解説(Remarks)
通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは機能しません。ただし、このメソッドはピュアデバイスでも機能します。
IDirect3DDevice9::SetMaterial メソッド (d3d9.h) は、デバイスのマテリアルプロパティを設定します。
| pMaterial | D3DMATERIAL9* | in | 設定するマテリアルプロパティを記述する D3DMATERIAL9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。pMaterial パラメーターが無効な場合は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::GetMaterial メソッド (d3d9.h) は、デバイスの現在のマテリアルプロパティを取得します。
| pMaterial | D3DMATERIAL9* | inout | 現在設定されているマテリアルプロパティが格納される D3DMATERIAL9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。pMaterial パラメーターが無効な場合は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。
IDirect3DDevice9::SetLight メソッド (d3d9.h) は、このデバイスに一組のライティングプロパティを割り当てます。
| Index | DWORD | in | 設定するライティングプロパティ一式の 0 から始まるインデックス。このインデックスにライティングプロパティが既に存在する場合は、pLight で指定された新しいプロパティで上書きされます。 |
| param1 | D3DLIGHT9* | in | ライトのプロパティを記述するD3DLIGHT9へのポインタ。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
ライトのプロパティを設定するには、D3DLIGHT9 構造体を用意してから IDirect3DDevice9::SetLight メソッドを呼び出します。
IDirect3DDevice9::SetLight メソッドは、デバイスが内部のライトプロパティ一覧のどの位置にそのプロパティ一式を配置するかを示すインデックスと、それらのプロパティを定義する用意済みの D3DLIGHT9 構造体のアドレスを受け取ります。ライトの照明プロパティを更新するには、必要に応じて新しい情報を指定して IDirect3DDevice9::SetLight を呼び出します。
プロパティが一度も割り当てられていないインデックスを指定して IDirect3DDevice9::SetLight メソッドを呼び出すたびに、システムはライティングプロパティ一式を格納するためのメモリを割り当てます。アプリケーションは多数のライトを設定し、そのうちの一部だけを同時に有効にできます。デバイスがサポートする有効なライトの最大数を判別するには、デバイスの機能を取得する際に D3DCAPS9 構造体の MaxActiveLights メンバーを確認してください。ライトが不要になった場合は、無効にするか、新しいライトプロパティ一式で上書きできます。
次の例では、距離によって減衰しない白色の点光源のプロパティを用意し、設定しています。
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface.
D3DLIGHT9 d3dLight;
HRESULT hr;
// Initialize the structure.
ZeroMemory(&d3dLight, sizeof(d3dLight));
// Set up a white point light.
d3dLight.Type = D3DLIGHT_POINT;
d3dLight.Diffuse.r = 1.0f;
d3dLight.Diffuse.g = 1.0f;
d3dLight.Diffuse.b = 1.0f;
d3dLight.Ambient.r = 1.0f;
d3dLight.Ambient.g = 1.0f;
d3dLight.Ambient.b = 1.0f;
d3dLight.Specular.r = 1.0f;
d3dLight.Specular.g = 1.0f;
d3dLight.Specular.b = 1.0f;
// Position it high in the scene and behind the user.
// Remember, these coordinates are in world space, so
// the user could be anywhere in world space, too.
// For the purposes of this example, assume the user
// is at the origin of world space.
d3dLight.Position.x = 0.0f;
d3dLight.Position.y = 1000.0f;
d3dLight.Position.z = -100.0f;
// Don't attenuate.
d3dLight.Attenuation0 = 1.0f;
d3dLight.Range = 1000.0f;
// Set the property information for the first light.
hr = d3dDevice->SetLight(0, &d3dLight);
if (SUCCEEDED(hr))
// Handle Success
else
// Handle failure
光源を有効にするには、デバイスに対して IDirect3DDevice9::LightEnable メソッドを呼び出します。
IDirect3DDevice9::GetLight メソッド (d3d9.h) は、このデバイスが使用しているライティングプロパティ一式を取得します。
| Index | DWORD | in | 取得するライティングプロパティ一式の 0 から始まるインデックス。このインデックスに対して IDirect3DDevice9::SetLight メソッドでライティングプロパティが設定されていない場合、このメソッドは失敗します。 |
| param1 | D3DLIGHT9* | inout | 現在のライト情報を受け取るD3DLIGHT9へのポインタ。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。
既存の光源のすべてのプロパティを取得するには、デバイスに対して IDirect3DDevice9::GetLight メソッドを呼び出します。IDirect3DDevice9::GetLight メソッドを呼び出す際は、プロパティを取得する光源の 0 から始まるインデックスを第 1 引数に渡し、D3DLIGHT9 構造体のアドレスを第 2 引数に指定します。デバイスは、そのインデックスの光源に使用しているライティングプロパティを記述するように D3DLIGHT9 構造体を埋めます。
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
D3DLight9 light;
// Get the property information for the first light.
hr = pd3dDevice->GetLight(0, &light);
if (SUCCEEDED(hr))
// Handle Success
else
// Handle failure
デバイスに割り当てられている光源の範囲外のインデックスを指定した場合、IDirect3DDevice9::GetLight メソッドは失敗し、D3DERR_INVALIDCALL を返します。
シーン内の光源にライトプロパティ一式を割り当てたら、デバイスに対して IDirect3DDevice9::LightEnable メソッドを呼び出すことでその光源を有効化できます。新しい光源は既定で無効になっています。IDirect3DDevice9::LightEnable メソッドは 2 つのパラメーターを受け取ります。第 1 引数にはこのメソッドの対象となる光源の 0 から始まるインデックスを設定し、第 2 引数にはライトを有効にする場合は TRUE、無効にする場合は FALSE を設定します。次のコード例は、デバイスの光源プロパティ一覧の最初の光源を有効にして、このメソッドの使い方を示しています。
// Assume d3dDevice is a valid pointer to an IDirect3DDevice9 interface.
HRESULT hr;
hr = pd3dDevice->LightEnable(0, TRUE);
if (SUCCEEDED(hr))
// Handle Success
else
// Handle failure
デバイスがサポートする有効なライトの最大数を判別するには、デバイスの機能を取得する際に D3DCAPS9 構造体の MaxActiveLights メンバーを確認してください。
IDirect3DDevice9::SetLight でプロパティが設定されていないライトを有効または無効にした場合、IDirect3DDevice9::LightEnable メソッドは次の表に示すプロパティを持つ光源を作成し、それを有効または無効にします。
IDirect3DDevice9::LightEnable メソッド (d3d9.h) は、デバイス内のライティングパラメーター一式を有効または無効にします。
| Index | DWORD | in | このメソッドの対象となるライティングパラメーター一式の 0 から始まるインデックス。 |
| Enable | BOOL | in | ライティングパラメーター一式を有効にするか無効にするかを示す値。指定したインデックスのパラメーターによるライティングを有効にする場合はこのパラメーターを TRUE に、無効にする場合は FALSE に設定します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
LightIndex の値がデバイス内に割り当てられているライトプロパティ一式の範囲外である場合、IDirect3DDevice9::LightEnable メソッドは次のプロパティを持つ D3DLIGHT9 構造体で表される光源を作成し、その有効状態を bEnable で指定された値に設定します。
| メンバー | 既定値 |
|---|---|
Type
| D3DLIGHT_DIRECTIONAL |
Diffuse
| (R:1, G:1, B:1, A:0) |
Specular
| (R:0, G:0, B:0, A:0) |
Ambient
| (R:0, G:0, B:0, A:0) |
Position
| (0, 0, 0) |
Direction
| (0, 0, 1) |
Range
| 0 |
Falloff
| 0 |
Attenuation0
| 0 |
Attenuation1
| 0 |
Attenuation2
| 0 |
Theta
| 0 |
Phi
| 0 |
IDirect3DDevice9::GetLightEnable メソッド (d3d9.h) は、デバイス内のライティングパラメーター一式の有効状態を取得します。
| Index | DWORD | in | このメソッドの対象となるライティングパラメーター一式の 0 から始まるインデックス。 |
| pEnable | BOOL* | inout | 指定したライティングパラメーターの状態が格納される変数へのポインター。呼び出し後、このアドレスの値が 0 以外であれば、指定したライティングパラメーターが有効であることを示します。値が 0 の場合は無効であることを示します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。
IDirect3DDevice9::SetClipPlane メソッド (d3d9.h) は、デバイスのユーザー定義クリッピング平面の係数を設定します。
| Index | DWORD | in | 平面方程式の係数を設定する対象のクリッピング平面のインデックス。 |
| pPlane | FLOAT* | in | 設定するクリッピング平面の係数を、一般形の平面方程式の形式で表す 4 要素の値の配列のアドレスへのポインター。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。このエラーは、Index の値がデバイスがサポートするクリッピング平面インデックスの最大値を超えているか、pPlane の配列が 4 つの浮動小数点値を格納するのに十分な大きさでないことを示します。
解説(Remarks)
このメソッドで設定する係数は、一般形の平面方程式の形式を取ります。pPlane の配列内の値を、配列に現れる順に A、B、C、D と呼ぶとすると、これらは一般形の平面方程式に当てはめられ、Ax + By + Cz + Dw = 0 となります。同次座標 (x, y, z, w) を持つ点は、Ax + By + Cz + Dw >= 0 であればその平面の半空間内で可視となります。クリッピング平面の後ろにある点はシーンからクリップされます。
固定機能パイプラインを使用する場合、平面方程式はワールド空間にあるものとみなされます。プログラマブルパイプラインを使用する場合、平面方程式はクリッピング空間 (出力頂点と同じ空間) にあるものとみなされます。
このメソッドは、設定したクリッピング平面方程式を有効にはしません。クリッピング平面を有効にするには、D3DRS_CLIPPLANEENABLE レンダーステートに適用する DWORD 値の対応するビットを設定してください。
IDirect3DDevice9::GetClipPlane メソッド (d3d9.h) は、デバイスのユーザー定義クリッピング平面の係数を取得します。
| Index | DWORD | in | 平面方程式の係数を取得する対象のクリッピング平面のインデックス。 |
| pPlane | FLOAT* | inout | クリッピング平面の係数を一般形の平面方程式の形式で表す 4 要素の値の配列へのポインター。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。このエラーは、Index の値がデバイスがサポートするクリッピング平面インデックスの最大値を超えているか、pPlane の配列が 4 つの浮動小数点値を格納するのに十分な大きさでないことを示します。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。"
このメソッドが報告する係数は、一般形の平面方程式の形式を取ります。pPlane の配列内の値を、配列に現れる順に A、B、C、D と呼ぶとすると、これらは一般形の平面方程式に当てはめられ、Ax + By + Cz + Dw = 0 となります。同次座標 (x, y, z, w) を持つ点は、Ax + By + Cz + Dw >= 0 であればその平面の半空間内で可視となります。クリッピング平面上または平面の後ろにある点はシーンからクリップされます。
このメソッドが使用する平面方程式はワールド空間に存在し、事前の IDirect3DDevice9::SetClipPlane メソッドの呼び出しによって設定されます。
IDirect3DDevice9::SetRenderState メソッド (d3d9helper.h) は、デバイスのレンダーステートパラメーターを 1 つ設定します。
| State | D3DRENDERSTATETYPE | in | 変更対象のデバイス状態変数。このパラメーターには、D3DRENDERSTATETYPE 列挙型の任意のメンバーを指定できます。 |
| Value | DWORD | in | 設定するデバイスレンダーステートの新しい値。このパラメーターの意味は、State に指定した値によって異なります。たとえば State が D3DRS_SHADEMODE の場合、第 2 引数は D3DSHADEMODE 列挙型のメンバーの 1 つになります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL が返されます。
IDirect3DDevice9::GetRenderState メソッド (d3d9.h) は、デバイスのレンダーステート値を取得します。
| State | D3DRENDERSTATETYPE | in | 問い合わせ対象のデバイス状態変数。このパラメーターには、D3DRENDERSTATETYPE 列挙型の任意のメンバーを指定できます。 |
| pValue | DWORD* | inout | メソッドから戻る際に、問い合わせたレンダーステート変数の値を受け取る変数へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。"
IDirect3DDevice9::CreateStateBlock メソッド (d3d9.h) は、すべてのデバイス状態、頂点関連の状態、またはピクセル関連の状態の値を格納する新しいステートブロックを作成します。
| Type | D3DSTATEBLOCKTYPE | in | このメソッドが取得すべき状態データの種類。このパラメーターには、D3DSTATEBLOCKTYPE 列挙型で定義された値を設定できます。 |
| ppSB | IDirect3DStateBlock9** | out | ステートブロックインターフェースへのポインター。IDirect3DStateBlock9 を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
頂点関連のデバイス状態とは、通常、システムが頂点を処理する方法に影響する状態を指します。ピクセル関連の状態とは、一般に、ラスタライズ中にシステムがピクセルデータや深度バッファーデータを処理する方法に影響するデバイス状態を指します。両方のグループに含まれる状態もあります。
|
Direct3D 9 と Direct3D 10 の違い:
Direct3D 9 では、ステートブロックはオブジェクトの作成時に、取得するよう要求された状態のデータを保持します。ステートブロックの値を変更するには、IDirect3DStateBlock9::Capture を呼び出すか、IDirect3DDevice9::BeginStateBlock/IDirect3DDevice9::EndStateBlock を使用します。Direct3D 10 では、ステートブロックオブジェクトの作成時に状態は保存されません。 |
IDirect3DDevice9::BeginStateBlock メソッド (d3d9.h) は、デバイスステートブロックの記録を開始するよう Direct3D に指示します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、E_OUTOFMEMORY。
解説(Remarks)
アプリケーションは、このメソッドを呼び出す前に IDirect3DDevice9::ValidateDevice メソッドを呼び出すことで、記録されるすべての状態が有効であることを確認できます。
IDirect3DDevice9::BeginStateBlock を呼び出した後、IDirect3DDevice9::EndStateBlock を呼び出すまでの間に、次のメソッドをステートブロックに記録できます。
- IDirect3DDevice9::LightEnable
- IDirect3DDevice9::SetClipPlane
- IDirect3DDevice9::SetCurrentTexturePalette
- IDirect3DDevice9::SetFVF
- IDirect3DDevice9::SetIndices
- IDirect3DDevice9::SetLight
- IDirect3DDevice9::SetMaterial
- IDirect3DDevice9::SetNPatchMode
- IDirect3DDevice9::SetPixelShader
- IDirect3DDevice9::SetPixelShaderConstantB
- IDirect3DDevice9::SetPixelShaderConstantF
- IDirect3DDevice9::SetPixelShaderConstantI
- IDirect3DDevice9::SetRenderState
- IDirect3DDevice9::SetSamplerState
- IDirect3DDevice9::SetScissorRect
- IDirect3DDevice9::SetStreamSource
- IDirect3DDevice9::SetStreamSourceFreq
- IDirect3DDevice9::SetTexture
- IDirect3DDevice9::SetTextureStageState
- IDirect3DDevice9::SetTransform
- IDirect3DDevice9::SetViewport
- IDirect3DDevice9::SetVertexDeclaration
- IDirect3DDevice9::SetVertexShader
- IDirect3DDevice9::SetVertexShaderConstantB
- IDirect3DDevice9::SetVertexShaderConstantF
- IDirect3DDevice9::SetVertexShaderConstantI
IDirect3DDevice9::EndStateBlock メソッド (d3d9.h) は、デバイスステートブロックの記録を停止してステートブロックインターフェースへのポインターを取得するよう Direct3D に指示します。
| ppSB | IDirect3DStateBlock9** | out | ステートブロックインターフェースへのポインター。IDirect3DStateBlock9 を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetClipStatus メソッド (d3d9.h) は、クリップステータスを設定します。
| pClipStatus | D3DCLIPSTATUS9* | in | 設定するクリップステータスを記述する D3DCLIPSTATUS9 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 引数のいずれかが無効な場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
クリップステータスはソフトウェア頂点処理中に使用されます。そのため、このメソッドはピュアデバイスおよび非ピュアのハードウェア処理デバイスではサポートされません。ピュアデバイスの詳細については、D3DCREATE を参照してください。
頂点処理中 (IDirect3DDevice9::ProcessVertices、IDirect3DDevice9::DrawPrimitive、その他の描画関数による処理中) にクリッピングが有効な場合、Direct3D はすべての頂点についてクリップコードを計算します。クリップコードは D3DCS_* ビットの組み合わせです。頂点が特定のクリッピング平面の外側にある場合、クリップコードの対応するビットが設定されます。Direct3D は、ClipUnion メンバーと ClipIntersection メンバーを持つ D3DCLIPSTATUS9 を使用してクリップステータスを保持します。ClipUnion はすべての頂点クリップコードのビットごとの「OR」、ClipIntersection はすべての頂点クリップコードのビットごとの「AND」です。初期値は ClipUnion が 0、ClipIntersection が 0xFFFFFFFF です。D3DRS_CLIPPING が FALSE に設定されている場合、ClipUnion と ClipIntersection は 0 に設定されます。Direct3D は描画呼び出しの際にクリップステータスを更新します。特定のオブジェクトについてクリップステータスを計算するには、ClipUnion と ClipIntersection を初期値に設定してから描画を続けてください。
IDirect3DDevice9::DrawRectPatch と IDirect3DDevice9::DrawTriPatch にはソフトウェアエミュレーションがないため、これらではクリップステータスは更新されません。
IDirect3DDevice9::GetClipStatus メソッド (d3d9.h) は、クリップステータスを取得します。
| pClipStatus | D3DCLIPSTATUS9* | inout | クリップステータスを記述する D3DCLIPSTATUS9 構造体へのポインター。 |
戻り値
解説(Remarks)
頂点処理中 (IDirect3DDevice9::ProcessVertices、IDirect3DDevice9::DrawPrimitive、その他の描画関数による処理中) にクリッピングが有効な場合、Direct3D はすべての頂点についてクリップコードを計算します。クリップコードは D3DCS_* ビットの組み合わせです。頂点が特定のクリッピング平面の外側にある場合、クリップコードの対応するビットが設定されます。Direct3D は、ClipUnion メンバーと ClipIntersection メンバーを持つ D3DCLIPSTATUS9 を使用してクリップステータスを保持します。ClipUnion はすべての頂点クリップコードのビットごとの「OR」、ClipIntersection はすべての頂点クリップコードのビットごとの「AND」です。初期値は ClipUnion が 0、ClipIntersection が 0xFFFFFFFF です。D3DRS_CLIPPING が FALSE に設定されている場合、ClipUnion と ClipIntersection は 0 に設定されます。Direct3D は描画呼び出しの際にクリップステータスを更新します。特定のオブジェクトについてクリップステータスを計算するには、ClipUnion と ClipIntersection を初期値に設定してから描画を続けてください。
IDirect3DDevice9::DrawRectPatch と IDirect3DDevice9::DrawTriPatch にはソフトウェアエミュレーションがないため、これらではクリップステータスは更新されません。
クリップステータスはソフトウェア頂点処理中に使用されます。そのため、このメソッドはピュアデバイスおよび非ピュアのハードウェア処理デバイスではサポートされません。ピュアデバイスの詳細については、D3DCREATE を参照してください。
IDirect3DDevice9::GetTexture メソッド (d3d9.h) は、デバイスのステージに割り当てられているテクスチャーを取得します。
| Stage | DWORD | in | 取得するテクスチャーのステージ識別子。ステージ識別子は 0 から始まります。 |
| ppTexture | IDirect3DBaseTexture9** | out | 返されるテクスチャーを表す IDirect3DBaseTexture9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは機能しません。ただし、このメソッドはインターフェースを返すため、ピュアデバイスでも機能します。
このメソッドを呼び出すと、IDirect3DTexture9 インターフェースの内部参照カウントが増加します。この IDirect3DTexture9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::SetTexture メソッド (d3d9helper.h) は、デバイスのステージにテクスチャーを割り当てます。
| Stage | DWORD | in | 0 から始まるサンプラー番号。 テクスチャーはサンプラーにバインドされます。サンプラーは、フィルタリングモードやアドレスラップモードなどのサンプリング状態を定義します。テクスチャーの参照方法は、プログラマブルパイプラインと固定機能パイプラインで異なります。
|
| pTexture | IDirect3DBaseTexture9* | in | 設定するテクスチャーを表す IDirect3DBaseTexture9 インターフェースへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
テクスチャーがプール種別 D3DPOOL_SCRATCH で作成されている場合、SetTexture は使用できません。プール種別が D3DPOOL_SYSTEMMEM のテクスチャーについても、DevCaps に D3DDEVCAPS_TEXTURESYSTEMMEMORY が設定されていない限り SetTexture は使用できません。
IDirect3DDevice9::GetTextureStageState メソッド (d3d9.h) は、割り当てられているテクスチャーの状態値を取得します。
| Stage | DWORD | in | 状態を取得するテクスチャーのステージ識別子。ステージ識別子は 0 から始まります。デバイスには最大 8 個のテクスチャーを設定できるため、Stage に指定できる最大値は 7 です。 |
| Type | D3DTEXTURESTAGESTATETYPE | in | 取得するテクスチャー状態。このパラメーターには、D3DTEXTURESTAGESTATETYPE 列挙型の任意のメンバーを指定できます。 |
| pValue | DWORD* | inout | 取得した状態値が格納される変数へのポインター。取得される値の意味は Type パラメーターによって決まります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他のフラグ値のいずれかを指定してデバイスを作成する必要があります。"
IDirect3DDevice9::SetTextureStageState メソッド (d3d9helper.h) は、現在割り当てられているテクスチャーの状態値を設定します。
| Stage | DWORD | in | 状態値を設定するテクスチャーのステージ識別子。ステージ識別子は 0 から始まります。デバイスには最大 8 個のテクスチャーを設定できるため、Stage に指定できる最大値は 7 です。 |
| Type | D3DTEXTURESTAGESTATETYPE | in | 設定するテクスチャー状態。このパラメーターには、D3DTEXTURESTAGESTATETYPE 列挙型の任意のメンバーを指定できます。 |
| Value | DWORD | in | 設定する状態値。この値の意味は Type パラメーターによって決まります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::GetSamplerState メソッド (d3d9.h) は、サンプラー状態の値を取得します。
| Sampler | DWORD | in | サンプラーステージのインデックス。 |
| Type | D3DSAMPLERSTATETYPE | in | このパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。 |
| pValue | DWORD* | inout | 取得する状態値。この値の意味は Type パラメーターによって決まります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスについてはデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。"
IDirect3DDevice9::SetSamplerState メソッド (d3d9helper.h) は、サンプラー状態の値を設定します。
| Sampler | DWORD | in | サンプラーステージのインデックス。サンプラーステージの詳細については、vs_3_0 のサンプリングステージレジスター (DirectX HLSL) を参照してください。 |
| Type | D3DSAMPLERSTATETYPE | in | このパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。 |
| Value | DWORD | in | 設定する状態値。この値の意味は Type パラメーターによって決まります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::ValidateDevice メソッド (d3d9.h) は、現在のテクスチャーブレンディング処理と引数を 1 パスでレンダリングできるかどうかをデバイスについて報告します。
| pNumPasses | DWORD* | inout | マルチパスレンダリングによって目的の効果を実現するために必要なレンダリングパス数が格納される DWORD 値へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_CONFLICTINGRENDERSTATE、D3DERR_CONFLICTINGTEXTUREFILTER、D3DERR_DEVICELOST、D3DERR_DRIVERINTERNALERROR、D3DERR_TOOMANYOPERATIONS、D3DERR_UNSUPPORTEDALPHAARG、D3DERR_UNSUPPORTEDALPHAOPERATION、D3DERR_UNSUPPORTEDCOLORARG、D3DERR_UNSUPPORTEDCOLOROPERATION、D3DERR_UNSUPPORTEDFACTORVALUE、D3DERR_UNSUPPORTEDTEXTUREFILTER、D3DERR_WRONGTEXTUREFORMAT。
解説(Remarks)
IDirect3DDevice9::ValidateDevice メソッドは、他の機能情報では判断できない場合にのみ、シナリオの検証に使用してください。たとえばマルチステージテクスチャリングのシナリオでは、D3DCAPS9 構造体の MaxTextureBlendStages メンバーと MaxSimultaneousTextures メンバーを調べることで、そのデバイスでマルチステージテクスチャリングが可能かどうかを判別できます。
現在のハードウェアが、処理と引数のあらゆる組み合わせを実装しているとは限りません。特定のブレンディング処理を指定した引数で実行できるかどうかは、目的のブレンディング処理を設定したうえで IDirect3DDevice9::ValidateDevice メソッドを呼び出すことで判別できます。
IDirect3DDevice9::ValidateDevice メソッドは、呼び出し時点の現在のレンダーステート、テクスチャー、テクスチャーステージ状態を使用して検証を行います。呼び出し後にこれらの要素を変更すると以前の結果は無効になるため、シーンをレンダリングする前にこのメソッドを再度呼び出す必要があります。
パフォーマンスを最大化するため、IDirect3DDevice9::ValidateDevice は初期化時に呼び出してください。レンダリングループの中では使用しないでください。
拡散反射の補間値を引数または処理として使用すること (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) は、現在のハードウェアではほとんどサポートされていません。多くのハードウェアでは、補間された色データを導入できるのは最後のテクスチャー処理ステージだけです。
各ステージでは、テクスチャー (D3DTA_TEXTURE) を第 2 引数ではなく第 1 引数として指定するようにしてください。
多くのカードは、任意のテクスチャーステージで拡散反射値やスカラー値を使用することをサポートしていません。多くの場合、これらは最初または最後のテクスチャーブレンディングステージでのみ利用できます。
多くのカードでは、最初のテクスチャーに関連付けられたブレンディングユニットが、アルファをカラーチャンネルに複製するか入力を反転する以上のことを行えません。そのため、可能であればアプリケーションは 2 番目のテクスチャーステージのみを使用する必要があるかもしれません。このようなハードウェアでは、最初のユニットは既定の状態、すなわち第 1 カラー引数が D3DTA_TEXTURE に設定され、処理が D3DTOP_SELECTARG1 である状態とみなされます。
出力アルファに対する処理が、カラー処理より複雑であったり大きく異なっていたりする場合、サポートされない可能性が高くなります。
一部のハードウェアは、D3DTA_TFACTOR と D3DTA_DIFFUSE の同時使用をサポートしていません。
多くのカードは、複数テクスチャーとミップマップのトライリニアフィルタリングの同時使用をサポートしていません。マルチテクスチャーブレンディング処理に関与するテクスチャーに対してトライリニアフィルタリングを要求して検証が失敗した場合は、トライリニアフィルタリングをオフにして再度検証してください。その場合は、代わりにマルチパスレンダリングを行うとよいでしょう。
IDirect3DDevice9::SetPaletteEntries メソッド (d3d9.h) は、パレットエントリを設定します。
| PaletteNumber | DWORD | in | 処理の対象となる特定のパレットを識別する序数値。 |
| pEntries | PALETTEENTRY* | in | 設定するパレットエントリを表す PALETTEENTRY 構造体へのポインター。pEntries が指す PALETTEENTRY 構造体の数は 256 であるとみなされます。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
Direct3D 9 のアプリケーションでは、このメソッドに渡すパレットは D3DCAPS9 構造体の D3DPTEXTURECAPS_ALPHAPALETTE 機能ビットに従う必要があります。D3DPTEXTURECAPS_ALPHAPALETTE が設定されていない場合、パレットのすべてのエントリのアルファは 1.0 でなければならず、そうでなければこのメソッドは D3DERR_INVALIDCALL で失敗します。D3DPTEXTURECAPS_ALPHAPALETTE が設定されている場合は、任意のアルファ値の組み合わせが許可されます。なお、すべてのパレットエントリのアルファが 0 に設定されている場合、デバッグランタイムは警告メッセージを出力します。
デバイスには論理パレットが 1 つ関連付けられており、すべてのテクスチャーステージで共有されます。
IDirect3DDevice9::GetPaletteEntries メソッド (d3d9.h) は、パレットエントリを取得します。
| PaletteNumber | DWORD | in | 取得する特定のパレットを識別する序数値。 |
| pEntries | PALETTEENTRY* | inout | 返されるパレットエントリを表す PALETTEENTRY 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
PALETTEENTRY の詳細については、Platform SDK を参照してください。
IDirect3DDevice9::SetCurrentTexturePalette メソッド (d3d9.h) は、現在のテクスチャーパレットを設定します。
| PaletteNumber | DWORD | in | 現在のテクスチャーパレットとして設定するテクスチャーパレットを指定する値。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
デバイスには論理パレットが 1 つ関連付けられており、すべてのテクスチャーステージで共有されます。
IDirect3DDevice9::GetCurrentTexturePalette メソッド (d3d9.h) は、現在のテクスチャーパレットを取得します。
| PaletteNumber | DWORD* | inout | 現在のテクスチャーパレットを識別する、返される値へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetScissorRect メソッド (d3d9helper.h) は、シザー矩形を設定します。
| pRect | RECT* | in | シザーテストが有効な場合に、レンダーターゲット内のレンダリング領域を定義する RECT 構造体へのポインター。このパラメーターを NULL にすることはできません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
シザー矩形は矩形のクリッピング領域として使用されます。
DirectX における矩形の使用方法の詳細については、矩形 (Direct3D 9) を参照してください。
IDirect3DDevice9::GetScissorRect メソッド (d3d9.h) は、シザー矩形を取得します。
| pRect | RECT* | inout | シザーテストが有効な場合に、レンダーターゲット内のレンダリング領域を定義する RECT 構造体へのポインターを返します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
シザー矩形は矩形のクリッピング領域として使用されます。
DirectX における矩形の使用方法の詳細については、矩形 (Direct3D 9) を参照してください。
IDirect3DDevice9::SetSoftwareVertexProcessing メソッド (d3d9helper.h) を使用すると、ソフトウェア頂点処理モードとハードウェア頂点処理モードを切り替えられます。
| bSoftware | BOOL | in | ソフトウェア頂点処理を指定する場合は TRUE、ハードウェア頂点処理を指定する場合は FALSE です。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
モード変更の制限は次のとおりです (D3DCREATE 定数に関する注意事項も参照してください)。
- デバイスが D3DCREATE_SOFTWARE_VERTEXPROCESSING で作成された場合、頂点処理はソフトウェアで行われ、変更できません。
- デバイスが D3DCREATE_HARDWARE_VERTEXPROCESSING で作成された場合、頂点処理はハードウェアで行われ、変更できません。
- デバイスが D3DCREATE_MIXED_VERTEXPROCESSING で作成された場合、頂点処理は既定でハードウェアで行われます。IDirect3DDevice9::SetSoftwareVertexProcessing を使用して、処理をソフトウェアに (またはハードウェアに戻すように) 切り替えられます。
Direct3D 9 では、代わりに SetSoftwareVertexProcessing を使用してください。この新しい API は StateBlocks には記録されません。
IDirect3DDevice9::GetSoftwareVertexProcessing メソッド (d3d9.h) は、頂点処理モード (ハードウェアまたはソフトウェア) を取得します。
戻り値
型: BOOL
ソフトウェア頂点処理が設定されている場合は TRUE を返します。それ以外の場合は FALSE を返します。
解説(Remarks)
アプリケーションは混合モードのデバイスを作成することで、ソフトウェア頂点処理とハードウェア頂点処理の両方を使用できます。DirectX 8.x で 2 つの頂点処理モードを切り替えるには、レンダーステート D3DRS_SOFTWAREVERTEXPROCESSING と適切な BOOL 引数を指定して IDirect3DDevice9::SetRenderState を使用していました。レンダーステートによる方法の欠点は、ステートブロックのセマンティクスを定義することが難しい点でした。アプリケーションとランタイムは、ステートブロックの記録と再生の際に追加の作業を行い、注意を払う必要がありました。
Direct3D 9 では、代わりに IDirect3DDevice9::SetSoftwareVertexProcessing を使用してください。この新しい API は StateBlocks には記録されません。
D3DCREATE 定数に関する注意事項も参照してください。
IDirect3DDevice9::SetNPatchMode メソッド (d3d9.h) は、N パッチを有効または無効にします。
| nSegments | FLOAT | in | 分割セグメント数を指定します。セグメント数が 1.0 未満の場合、N パッチは無効になります。既定値は 0.0 です。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。
IDirect3DDevice9::GetNPatchMode メソッド (d3d9.h) は、N パッチモードのセグメント数を取得します。
戻り値
型: FLOAT
分割セグメント数を指定します。セグメント数が 1.0 未満の場合、N パッチは無効になります。既定値は 0.0 です。
IDirect3DDevice9::DrawPrimitive メソッド (d3d9.h) は、現在のデータ入力ストリーム一式から、指定した種類の非インデックス幾何プリミティブの並びをレンダリングします。
| PrimitiveType | D3DPRIMITIVETYPE | in | レンダリングするプリミティブの種類を表す D3DPRIMITIVETYPE 列挙型のメンバー。 |
| StartVertex | DWORD | in | 読み込む最初の頂点のインデックス。StartVertex から始めて、必要な数の頂点が頂点バッファーから読み出されます。 |
| PrimitiveCount | DWORD | in | レンダリングするプリミティブの数。許容される最大プリミティブ数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判別できます。PrimitiveCount は、プリミティブの種類に応じて決まるプリミティブの数です。ラインリストの場合、各プリミティブは 2 頂点で構成されます。三角形リストの場合、各プリミティブは 3 頂点で構成されます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
従来のアプリケーションを Direct3D 9 に移行する場合は、Draw 系の呼び出しを行う前に、固定機能パイプラインを使用するための IDirect3DDevice9::SetFVF か、頂点シェーダーを使用するための IDirect3DDevice9::SetVertexDeclaration のいずれかの呼び出しを追加する必要があります。
IDirect3DDevice9::DrawIndexedPrimitive メソッド (d3d9.h) は、指定した幾何プリミティブを頂点の配列にレンダリングします。
| param0 | D3DPRIMITIVETYPE | in | 描画するプリミティブの種別を示すD3DPRIMITIVETYPE。 |
| BaseVertexIndex | INT | in | 頂点バッファーの先頭から最初の頂点までのオフセット。シナリオ 4 を参照してください。 |
| MinVertexIndex | DWORD | in | この呼び出しで使用される頂点の最小頂点インデックス。これは BaseVertexIndex を基準とする 0 から始まるインデックスです。 |
| NumVertices | DWORD | in | この呼び出しで使用される頂点の数。最初の頂点は BaseVertexIndex + MinIndex のインデックス位置にあります。 |
| startIndex | DWORD | in | 頂点バッファーにアクセスする際に使用する最初のインデックスの位置。StartIndex から始めて、頂点バッファー内の頂点をインデックス参照します。 |
| primCount | DWORD | in | レンダリングするプリミティブの数。使用される頂点数は、プリミティブ数とプリミティブの種類によって決まります。許容される最大プリミティブ数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判別できます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、現在のデータ入力ストリーム一式からインデックス付きプリミティブを描画します。MinIndex およびインデックスストリーム内のすべてのインデックスは、BaseVertexIndex を基準とします。
MinIndex と NumVertices の各パラメーターは、IDirect3DDevice9::DrawIndexedPrimitive の各呼び出しで使用される頂点インデックスの範囲を指定します。これらは、頂点をインデックス参照する前に連続した範囲の頂点を処理することで、インデックス付きプリミティブの頂点処理を最適化するために使用されます。この呼び出しで使用されるインデックスが、この範囲外の頂点を参照することは無効です。
インデックス配列が設定されていない場合、IDirect3DDevice9::DrawIndexedPrimitive は失敗します。
D3DPRIMITIVETYPE 列挙型の D3DPT_POINTLIST メンバーはサポートされておらず、このメソッドで有効な種類ではありません。
従来のアプリケーションを Direct3D 9 に移行する場合は、Draw 系の呼び出しを行う前に、固定機能パイプラインを使用するための IDirect3DDevice9::SetFVF か、頂点シェーダーを使用するための IDirect3DDevice9::SetVertexDeclaration のいずれかの呼び出しを追加する必要があります。
IDirect3DDevice9::DrawPrimitiveUP メソッド (d3d9.h) は、ユーザーメモリのポインターで指定されたデータを、指定した種類の幾何プリミティブの並びとしてレンダリングします。
| PrimitiveType | D3DPRIMITIVETYPE | in | レンダリングするプリミティブの種類を表す D3DPRIMITIVETYPE 列挙型のメンバー。 |
| PrimitiveCount | DWORD | in | レンダリングするプリミティブの数。許容される最大プリミティブ数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判別できます。 |
| pVertexStreamZeroData | void* | in | 頂点データを指すユーザーメモリのポインター。 |
| VertexStreamZeroStride | DWORD | in | 各頂点のデータのバイト数。この値を 0 にすることはできません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を想定しています。このメソッドがサポートする頂点ストリームは 1 つだけです。この呼び出しの効果は、指定された頂点データのポインターとストライドを頂点ストリーム 0 として使用することです。現在の頂点シェーダーの宣言がストリーム 0 以外の頂点ストリームを参照していることは無効です。
IDirect3DDevice9::DrawPrimitiveUP の呼び出し後は、IDirect3DDevice9::GetStreamSource が参照するストリーム 0 の設定は NULL に設定されます。
IDirect3DDevice9::DrawPrimitiveUP に渡した頂点データは、呼び出し後まで保持しておく必要はありません。Direct3D は呼び出しから戻る前にそのデータへのアクセスを完了します。
従来のアプリケーションを Direct3D 9 に移行する場合は、Draw 系の呼び出しを行う前に、固定機能パイプラインを使用するための IDirect3DDevice9::SetFVF か、頂点シェーダーを使用するための IDirect3DDevice9::SetVertexDeclaration のいずれかの呼び出しを追加する必要があります。
IDirect3DDevice9::DrawIndexedPrimitiveUP メソッド (d3d9.h) は、ユーザーメモリのポインターで指定されたデータを使用して、指定した幾何プリミティブをレンダリングします。
| PrimitiveType | D3DPRIMITIVETYPE | in | レンダリングするプリミティブの種類を表す D3DPRIMITIVETYPE 列挙型のメンバー。 |
| MinVertexIndex | DWORD | in | 最小頂点インデックス。これは 0 から始まるインデックスです。 |
| NumVertices | DWORD | in | この呼び出しで使用される頂点の数。最初の頂点は MinVertexIndex のインデックス位置にあります。 |
| PrimitiveCount | DWORD | in | レンダリングするプリミティブの数。許容される最大プリミティブ数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判別できます (インデックス数はプリミティブ数とプリミティブの種類によって決まります)。 |
| pIndexData | void* | in | インデックスデータを指すユーザーメモリのポインター。 |
| IndexDataFormat | D3DFORMAT | in | インデックスデータのフォーマットを表す D3DFORMAT 列挙型のメンバー。有効な設定は次のいずれかです。 |
| pVertexStreamZeroData | void* | in | 頂点データを指すユーザーメモリのポインター。頂点データはストリーム 0 になければなりません。 |
| VertexStreamZeroStride | DWORD | in | 各頂点のデータのバイト数。この値を 0 にすることはできません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を想定しています。このメソッドがサポートする頂点ストリームは 1 つだけで、ストリーム 0 として宣言されている必要があります。
IDirect3DDevice9::DrawIndexedPrimitiveUP の呼び出し後は、IDirect3DDevice9::GetStreamSource が参照するストリーム 0 の設定は NULL に設定されます。また、IDirect3DDevice9::SetIndices のインデックスバッファー設定も NULL に設定されます。
IDirect3DDevice9::DrawIndexedPrimitiveUP に渡した頂点データは、呼び出し後まで保持しておく必要はありません。Direct3D は呼び出しから戻る前にそのデータへのアクセスを完了します。
従来のアプリケーションを Direct3D 9 に移行する場合は、Draw 系の呼び出しを行う前に、固定機能パイプラインを使用するための IDirect3DDevice9::SetFVF か、頂点シェーダーを使用するための IDirect3DDevice9::SetVertexDeclaration のいずれかの呼び出しを追加する必要があります。
IDirect3DDevice9::ProcessVertices メソッド (d3d9.h) は、頂点シェーダーで定義された頂点処理を入力データストリーム一式に適用します。
| SrcStartIndex | DWORD | in | 読み込む最初の頂点のインデックス。 |
| DestIndex | DWORD | in | 結果を格納する出力先頂点バッファー内の最初の頂点のインデックス。 |
| VertexCount | DWORD | in | 処理する頂点の数。 |
| pDestBuffer | IDirect3DVertexBuffer9* | in | インターリーブされた頂点データのストリームを表す出力先頂点バッファーである、IDirect3DVertexBuffer9 インターフェースへのポインター。 |
| pVertexDecl | IDirect3DVertexDeclaration9* | in | 出力頂点データの宣言を表す IDirect3DVertexDeclaration9 インターフェースへのポインター。頂点シェーダー 3.0 以上が現在の頂点シェーダーとして設定されている場合、出力頂点宣言は必須です。 |
| Flags | DWORD | in | 処理オプション。既定の処理を行う場合は、このパラメーターを 0 に設定します。頂点処理の影響を受けない頂点データをシステムが出力先バッファーにコピーしないようにするには、D3DPV_DONOTCOPYDATA を設定します。D3DPV_DONOTCOPYDATA の値は、出力先バッファーに適した 1 つ以上の D3DLOCK の値と組み合わせることができます。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドの処理順序は次のとおりです。
- ワールド行列 + ビュー行列 + 射影行列を使用して、頂点を射影空間へ変換します。
- ビューポートの設定を使用してスクリーン座標を計算します。
- クリッピングが有効な場合、クリッピングコードを計算し、出力先頂点バッファーに関連付けられた内部バッファーに格納します。頂点がビューフラスタム内にある場合は、そのスクリーン座標が計算されます。頂点がビューフラスタム外にある場合、その頂点は射影空間の座標のまま出力先頂点バッファーに格納されます。
- その他の注意点: ユーザーは内部のクリップコードバッファーにアクセスできません。三角形やその他のプリミティブに対するクリッピングは行われません。
Direct3D がテクスチャー座標を生成する場合、または入力テクスチャー座標をコピーもしくは変換する場合において、出力テクスチャー座標のフォーマットが Direct3D の生成する数より多くのテクスチャー座標成分を定義しているとき、Direct3D はそれらの余分な成分を変更しません。
IDirect3DDevice9::CreateVertexDeclaration メソッド (d3d9.h) は、デバイスと頂点要素から頂点シェーダー宣言を作成します。
| pVertexElements | D3DVERTEXELEMENT9* | in | D3DVERTEXELEMENT9 の頂点要素の配列。 |
| ppDecl | IDirect3DVertexDeclaration9** | out | 作成された頂点シェーダー宣言を返す IDirect3DVertexDeclaration9 ポインターへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
DirectX の各バージョン間で頂点宣言をどのように対応付けるかの詳細な説明については、頂点宣言 (Direct3D 9) のページを参照してください。
IDirect3DDevice9::SetVertexDeclaration メソッド (d3d9helper.h) は、頂点宣言 (Direct3D 9) を設定します。
| pDecl | IDirect3DVertexDeclaration9* | in | 頂点宣言を保持する IDirect3DVertexDeclaration9 オブジェクトへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 戻り値は D3DERR_INVALIDCALL になることがあります。
解説(Remarks)
頂点宣言は、頂点のデータメンバー (テクスチャー座標、色、法線など) を定義する IDirect3DVertexDeclaration9 オブジェクトです。このデータは、頂点シェーダーとピクセルシェーダーを実装する際に役立ちます。
IDirect3DDevice9::GetVertexDeclaration メソッド (d3d9.h) は、頂点シェーダー宣言を取得します。
| ppDecl | IDirect3DVertexDeclaration9** | out | 返される IDirect3DVertexDeclaration9 オブジェクトへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 戻り値は D3DERR_INVALIDCALL になることがあります。
IDirect3DDevice9::SetFVF メソッド (d3d9.h) は、現在の頂点ストリーム宣言を設定します。
| FVF | DWORD | in | 固定機能の頂点型を格納する DWORD。詳細については、D3DFVF を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
位置、拡散反射色と鏡面反射色、およびテクスチャー座標を持つ頂点を初期化して使用する手順は次のとおりです。
-
カスタム頂点型と FVF コードを定義します。
struct LVertex { FLOAT x, y, z; D3DCOLOR specular, diffuse; FLOAT tu, tv; }; const DWORD VertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_SPECULAR | D3DFVF_TEX1 ); -
IDirect3DDevice9::CreateVertexBuffer を使用して、4 頂点分の領域を持つ頂点バッファーを作成します。
g_d3dDevice->CreateVertexBuffer( 4*sizeof(LVertex), D3DUSAGE_WRITEONLY, VertexFVF, D3DPOOL_DEFAULT, &pBigSquareVB, NULL ); -
各頂点の値を設定します。
LVertex * v; pBigSquareVB->Lock( 0, 0, (BYTE**)&v, 0 ); v[0].x = 0.0f; v[0].y = 10.0; v[0].z = 10.0f; v[0].diffuse = 0xffff0000; v[0].specular = 0xff00ff00; v[0].tu = 0.0f; v[0].tv = 0.0f; v[1].x = 0.0f; v[1].y = 0.0f; v[1].z = 10.0f; v[1].diffuse = 0xff00ff00; v[1].specular = 0xff00ffff; v[1].tu = 0.0f; v[1].tv = 0.0f; v[2].x = 10.0f; v[2].y = 10.0f; v[2].z = 10.0f; v[2].diffuse = 0xffff00ff; v[2].specular = 0xff000000; v[2].tu = 0.0f; v[2].tv = 0.0f; v[3].x = 0.0f; v[3].y = 10.0f; v[3].z = 10.0f; v[3].diffuse = 0xffffff00; v[3].specular = 0xffff0000; v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock(); -
頂点バッファーが初期化され、レンダリングの準備が整いました。次のコード例は、従来の FVF を使用して正方形を描画する方法を示しています。
g_d3dDevice->SetFVF(VertexFVF); g_d3dDevice->SetStreamSource(0, pBigSquareVB, 0, sizeof(LVertex)); g_d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2);
-
カスタム頂点型と FVF コードを定義します。
struct Vertex { FLOAT x, y, z; FLOAT nx, ny, nz; FLOAT tu, tv; }; const DWORD VertexFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 ); - IDirect3DDevice9::CreateVertexBuffer を使用して、4 頂点分の領域を持つ頂点バッファーを作成します (上の例と同様)。
-
各頂点の値を設定します。
Vertex * v; pBigSquareVB->Lock(0, 0, (BYTE**)&v, 0); v[0].x = 0.0f; v[0].y = 10.0; v[0].z = 10.0f; v[0].nx = 0.0f; v[0].ny = 1.0f; v[0].nz = 0.0f; v[0].tu = 0.0f; v[0].tv = 0.0f; v[1].x = 0.0f; v[1].y = 0.0f; v[1].z = 10.0f; v[1].nx = 0.0f; v[1].ny = 1.0f; v[1].nz = 0.0f; v[1].tu = 0.0f; v[1].tv = 0.0f; v[2].x = 10.0f; v[2].y = 10.0f; v[2].z = 10.0f; v[2].nx = 0.0f; v[2].ny = 1.0f; v[2].nz = 0.0f; v[2].tu = 0.0f; v[2].tv = 0.0f; v[3].x = 0.0f; v[3].y = 10.0f; v[3].z = 10.0f; v[3].nx = 0.0f; v[3].ny = 1.0f; v[3].nz = 0.0f; v[3].tu = 0.0f; v[3].tv = 0.0f; pBigSquareVB->Unlock(); - オブジェクトを描画します (上の例と同様)。
IDirect3DDevice9::GetFVF メソッド (d3d9.h) は、固定機能頂点宣言を取得します。
| pFVF | DWORD* | inout | 固定機能の頂点型を指す DWORD ポインター。詳細については、D3DFVF を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
固定機能頂点宣言は、固定機能パイプラインで処理される頂点をどのように使用するかを決定する FVF フラグの集合です。
IDirect3DDevice9::CreateVertexShader メソッド (d3d9.h) は、頂点シェーダーを作成します。
| pFunction | DWORD* | in | 埋め込まれたデバッグ情報やシンボルテーブル情報を含む、頂点シェーダーを表すトークン配列へのポインター。
|
| ppShader | IDirect3DVertexShader9** | out | 返される頂点シェーダーインターフェースへのポインター (IDirect3DVertexShader9 を参照)。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
解説(Remarks)
デバイスの作成時、IDirect3D9::CreateDevice は動作フラグを使用して、頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。次の 3 つの選択肢があります。
- D3DCREATE_HARDWARE_VERTEXPROCESSING を設定して、頂点をハードウェアで処理する。
- D3DCREATE_SOFTWARE_VERTEXPROCESSING を設定して、頂点をソフトウェアで処理する。
- D3DCREATE_MIXED_VERTEXPROCESSING を設定して、頂点をハードウェアまたはソフトウェアのいずれかで処理する。混合モードのデバイスでソフトウェア処理とハードウェア処理を切り替えるには、IDirect3DDevice9::SetSoftwareVertexProcessing を使用します。
IDirect3DDevice9::SetVertexShader メソッド (d3d9helper.h) は、頂点シェーダーを設定します。
| pShader | IDirect3DVertexShader9* | in | 頂点シェーダーインターフェース。詳細については、IDirect3DVertexShader9 を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
(プログラマブル頂点シェーダーを設定した後に) 固定機能の頂点シェーダーを設定するには、IDirect3DDevice9::SetVertexShader(NULL) を呼び出してプログラマブルシェーダーを解放し、その後、固定機能の頂点フォーマットを指定して IDirect3DDevice9::SetFVF を呼び出します。
IDirect3DDevice9::GetVertexShader メソッド (d3d9.h) は、現在設定されている頂点シェーダーを取得します。
| ppShader | IDirect3DVertexShader9** | out | 頂点シェーダーインターフェースへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。 ppShader が無効な場合は D3DERR_INVALIDCALL が返されます。
解説(Remarks)
通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは機能しません。ただし、このメソッドはインターフェースを返すため、ピュアデバイスでも機能します。
IDirect3DDevice9::SetVertexShaderConstantF メソッド (d3d9helper.h) は、浮動小数点型の頂点シェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | FLOAT* | in | 定数の配列へのポインター。 |
| Vector4fCount | DWORD | in | 定数の配列に含まれる 4 要素 float ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetVertexShaderConstantF メソッド (d3d9.h) は、浮動小数点型の頂点シェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | FLOAT* | inout | 定数の配列へのポインター。 |
| Vector4fCount | DWORD | in | 定数の配列に含まれる 4 要素 float ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetVertexShaderConstantI メソッド (d3d9helper.h) は、整数型の頂点シェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | INT* | in | 定数の配列へのポインター。 |
| Vector4iCount | DWORD | in | 定数の配列に含まれる 4 要素整数ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetVertexShaderConstantI メソッド (d3d9.h) は、整数型の頂点シェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | INT* | inout | 定数の配列へのポインター。 |
| Vector4iCount | DWORD | in | 定数の配列に含まれる 4 要素整数ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetVertexShaderConstantB メソッド (d3d9helper.h) は、ブール型の頂点シェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | BOOL* | in | 定数の配列へのポインター。 |
| BoolCount | DWORD | in | 定数の配列に含まれるブール値の数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetVertexShaderConstantB メソッド (d3d9.h) は、ブール型の頂点シェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | BOOL* | inout | 定数の配列へのポインター。 |
| BoolCount | DWORD | in | 定数の配列に含まれるブール値の数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetStreamSource メソッド (d3d9helper.h) は、頂点バッファーをデバイスのデータストリームにバインドします。
| StreamNumber | DWORD | in | データストリームを指定します。範囲は 0 から最大ストリーム数 -1 までです。 |
| pStreamData | IDirect3DVertexBuffer9* | in | 指定したデータストリームにバインドする頂点バッファーを表す IDirect3DVertexBuffer9 インターフェースへのポインター。 |
| OffsetInBytes | DWORD | in | ストリームの先頭から頂点データの先頭までのオフセット (バイト単位)。デバイスがストリームオフセットをサポートしているかどうかを確認するには、D3DDEVCAPS2 の D3DDEVCAPS2_STREAMOFFSET 定数を参照してください。 |
| Stride | DWORD | in | コンポーネントのストライド (バイト単位)。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
FVF 頂点シェーダーを使用する場合、頂点ストリームのストライドは FVF から算出される頂点サイズと一致していなければなりません。宣言を使用する場合、ストライドは宣言から算出されるストリームサイズ以上である必要があります。
SetStreamSource を呼び出す際、通常はストライドが頂点サイズと等しいことが求められます。ただし、同一または類似のジオメトリの複数インスタンスを描画したい場合 (インスタンシングを使用して描画する場合など) もあります。そのような場合は、ストライドに 0 を指定して、頂点バッファーのオフセットを進めないようランタイムに指示します (つまり、すべてのインスタンスで同じ頂点データを使用します)。インスタンシングの詳細については、ジオメトリの複数インスタンスの効率的な描画 (Direct3D 9) を参照してください。
IDirect3DDevice9::GetStreamSource メソッド (d3d9.h) は、指定したデータストリームにバインドされている頂点バッファーを取得します。
| StreamNumber | DWORD | in | データストリームを指定します。範囲は 0 から最大ストリーム数から 1 を引いた値までです。 |
| ppStreamData | IDirect3DVertexBuffer9** | out | 指定したデータストリームにバインドされ、返される頂点バッファーを表す IDirect3DVertexBuffer9 インターフェースへのポインターのアドレス。 |
| pOffsetInBytes | DWORD* | inout | ストリームの先頭から頂点データの先頭までのオフセットを格納するポインター。オフセットはバイト単位です。「解説」を参照してください。 |
| pStride | DWORD* | inout | 返されるコンポーネントのストライド (バイト単位) へのポインター。「解説」を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
ストリームとは、コンポーネントデータの一様な配列として定義されます。各コンポーネントは、位置、法線、色などの単一の要素を表す 1 つ以上の要素で構成されます。
FVF 頂点シェーダーを使用する場合、頂点ストリームのストライドは FVF から算出される頂点サイズと一致していなければなりません。宣言を使用する場合、ストライドは宣言から算出されるストリームサイズ以上である必要があります。
このメソッドを呼び出すと、IDirect3DVertexBuffer9 インターフェースの内部参照カウントが増加します。この IDirect3DVertexBuffer9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::SetStreamSourceFreq メソッド (d3d9helper.h) は、ストリームソースの周波数分周値を設定します。
| StreamNumber | DWORD | in | ストリームソース番号。 |
| Setting | DWORD | in | インスタンシングの分周設定を示すDWORD。INDEXEDDATA等を含む。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
d3d9types.h には、SetStreamSourceFreq と組み合わせて使用するために設計された 2 つの定数、D3DSTREAMSOURCE_INDEXEDDATA と D3DSTREAMSOURCE_INSTANCEDATA が定義されています。これらの定数の使用方法については、ジオメトリの複数インスタンスの効率的な描画 (Direct3D 9) を参照してください。
IDirect3DDevice9::GetStreamSourceFreq メソッド (d3d9.h) は、ストリームソースの周波数分周値を取得します。
| StreamNumber | DWORD | in | ストリームソース番号。 - Divider型: [out] UINT* 周波数分周値を返します。 |
| pSetting | DWORD* | inout | 現在の分周設定値を受け取るDWORDポインタ。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
頂点シェーダーは、1 頂点につき複数回呼び出せるようになりました。非インデックスジオメトリの描画を参照してください。
IDirect3DDevice9::SetIndices メソッド (d3d9.h) は、インデックスデータを設定します。
| pIndexData | IDirect3DIndexBuffer9* | in | 設定するインデックスデータを表す IDirect3DIndexBuffer9 インターフェースへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
アプリケーションがこのインターフェースへの参照を保持しなくなると、インターフェースは自動的に解放されます。
IDirect3DDevice9::SetIndices メソッドは、現在のインデックス配列をインデックスバッファーに設定します。この単一のインデックス集合が、すべてのストリームのインデックス参照に使用されます。
IDirect3DDevice9::GetIndices メソッド (d3d9.h) は、インデックスデータを取得します。
| ppIndexData | IDirect3DIndexBuffer9** | out | 返されるインデックスデータを表す IDirect3DIndexBuffer9 インターフェースへのポインターのアドレス。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドを呼び出すと、IDirect3DIndexBuffer9 インターフェースの内部参照カウントが増加します。この IDirect3DIndexBuffer9 インターフェースの使用を終えたときに IUnknown::Release を呼び出さないと、メモリリークが発生します。
IDirect3DDevice9::CreatePixelShader メソッド (d3d9.h) は、ピクセルシェーダーを作成します。
| pFunction | DWORD* | in | ブレンディング処理を指定するピクセルシェーダー関数のトークン配列へのポインター。この値を NULL にすることはできません。 |
| ppShader | IDirect3DPixelShader9** | out | 返されるピクセルシェーダーインターフェースへのポインター。IDirect3DPixelShader9 を参照してください。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、 E_OUTOFMEMORY。
IDirect3DDevice9::SetPixelShader メソッド (d3d9.h) は、事前に作成したピクセルシェーダーを現在のピクセルシェーダーとして設定します。
| pShader | IDirect3DPixelShader9* | in | ピクセルシェーダーインターフェース。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::GetPixelShader メソッド (d3d9.h) は、現在設定されているピクセルシェーダーを取得します。
| ppShader | IDirect3DPixelShader9** | out | ピクセルシェーダーインターフェースへのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは機能しません。
IDirect3DDevice9::SetPixelShaderConstantF メソッド (d3d9helper.h) は、浮動小数点型のシェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | FLOAT* | in | 定数の配列へのポインター。 |
| Vector4fCount | DWORD | in | 定数の配列に含まれる 4 要素 float ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetPixelShaderConstantF メソッド (d3d9.h) は、浮動小数点型のシェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | FLOAT* | inout | 定数の配列へのポインター。 |
| Vector4fCount | DWORD | in | 定数の配列に含まれる 4 要素 float ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetPixelShaderConstantI メソッド (d3d9helper.h) は、整数型のシェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | INT* | in | 定数の配列へのポインター。 |
| Vector4iCount | DWORD | in | 定数の配列に含まれる 4 要素整数ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetPixelShaderConstantI メソッド (d3d9.h) は、整数型のシェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | INT* | inout | 定数の配列へのポインター。 |
| Vector4iCount | DWORD | in | 定数の配列に含まれる 4 要素整数ベクトルの数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::SetPixelShaderConstantB メソッド (d3d9.h) は、ブール型のシェーダー定数を設定します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | BOOL* | in | 定数の配列へのポインター。 |
| BoolCount | DWORD | in | 定数の配列に含まれるブール値の数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::GetPixelShaderConstantB メソッド (d3d9.h) は、ブール型のシェーダー定数を取得します。
| StartRegister | DWORD | in | 最初の定数値を格納するレジスター番号。 |
| pConstantData | BOOL* | inout | 定数の配列へのポインター。 |
| BoolCount | DWORD | in | 定数の配列に含まれるブール値の数。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::DrawRectPatch メソッド (d3d9.h) は、現在設定されているストリームを使用して矩形パッチを描画します。
| Handle | DWORD | in | 描画する矩形パッチのハンドル。 |
| pNumSegs | FLOAT* | in | テセレーション時に矩形パッチの各辺をいくつのセグメントに分割するかを指定する、4 つの浮動小数点値の配列へのポインター。D3DRECTPATCH_INFO を参照してください。 |
| pRectPatchInfo | D3DRECTPATCH_INFO* | in | 描画する矩形パッチを記述する D3DRECTPATCH_INFO 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
静的パッチの場合: 頂点シェーダーを設定し、適切なストリームを設定して、pRectPatchInfo パラメーターにパッチ情報を指定し、Direct3D が情報を取得してキャッシュできるようにハンドルを指定します。その後、pRectPatchInfo を NULL に設定して IDirect3DDevice9::DrawRectPatch を呼び出すと、パッチを効率的に描画できます。キャッシュされたパッチを描画する際、現在設定されているストリームは無視されます。キャッシュされた pNumSegs を上書きするには、pNumSegs に新しい値を指定します。キャッシュされたパッチをレンダリングする際は、そのパッチを取得したときに設定していたものと同じ頂点シェーダーを設定する必要があります。
ハンドルを指定して IDirect3DDevice9::DrawRectPatch を呼び出すと、以前の IDirect3DDevice9::DrawTriPatch の呼び出しで同じハンドルによりキャッシュされた情報は無効になります。
動的パッチの場合、パッチをレンダリングするたびにパッチデータが変化するため、情報をキャッシュしても効率的ではありません。アプリケーションは Handle を 0 に設定することで、このことを Direct3D に伝えられます。この場合、Direct3D は現在設定されているストリームと pNumSegs の値を使用してパッチを描画し、情報は一切キャッシュしません。Handle を 0 に設定すると同時に pRectPatchInfo を NULL に設定することはできません。
IDirect3DDevice9::DrawTriPatch メソッド (d3d9.h) は、現在設定されているストリームを使用して三角形パッチを描画します。
| Handle | DWORD | in | 描画する三角形パッチのハンドル。 |
| pNumSegs | FLOAT* | in | テセレーション時に三角形パッチの各辺をいくつのセグメントに分割するかを指定する、3 つの浮動小数点値の配列へのポインター。D3DTRIPATCH_INFO を参照してください。 |
| pTriPatchInfo | D3DTRIPATCH_INFO* | in | 描画する三角形の高次パッチを記述する D3DTRIPATCH_INFO 構造体へのポインター。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
静的パッチの場合: 頂点シェーダーを設定し、適切なストリームを設定して、pTriPatchInfo パラメーターにパッチ情報を指定し、Direct3D が情報を取得してキャッシュできるようにハンドルを指定します。パッチを効率的に描画するには、pTriPatchInfo を NULL に設定して IDirect3DDevice9::DrawTriPatch を呼び出します。キャッシュされたパッチを描画する際、現在設定されているストリームは無視されます。キャッシュされた pNumSegs を上書きするには、pNumSegs に新しい値を指定します。キャッシュされたパッチをレンダリングする際は、そのパッチを取得したときに設定していたものと同じ頂点シェーダーを設定する必要があります。
ハンドルを指定して IDirect3DDevice9::DrawTriPatch を呼び出すと、以前の IDirect3DDevice9::DrawRectPatch の呼び出しで同じハンドルによりキャッシュされた情報は無効になります。
動的パッチの場合、パッチをレンダリングするたびにパッチデータが変化するため、情報をキャッシュしても効率的ではありません。アプリケーションは Handle を 0 に設定することで、このことを Direct3D に伝えられます。この場合、Direct3D は現在設定されているストリームと pNumSegs の値を使用してパッチを描画し、情報は一切キャッシュしません。Handle を 0 に設定すると同時に pTriPatchInfo を NULL に設定することはできません。
IDirect3DDevice9::DeletePatch メソッド (d3d9.h) は、キャッシュされた高次パッチを解放します。
| Handle | DWORD | in | 削除する、キャッシュされた高次パッチのハンドル。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
IDirect3DDevice9::CreateQuery メソッド (d3d9.h) は、状態クエリを作成します。
| Type | D3DQUERYTYPE | in | クエリの種類を指定します。詳細については、D3DQUERYTYPE を参照してください。 |
| ppQuery | IDirect3DQuery9** | out | クエリオブジェクトを管理するクエリインターフェースへのポインターを返します。IDirect3DQuery9 を参照してください。 このパラメーターに NULL を設定すると、クエリがサポートされているかどうかを確認できます。クエリがサポートされていない場合、このメソッドは D3DERR_NOTAVAILABLE を返します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_NOTAVAILABLE または E_OUTOFMEMORY になります。
解説(Remarks)
このメソッドは、同期クエリと非同期クエリの両方に対応しています。Direct3D 9 でサポートされなくなった GetInfo に代わるものです。
同期クエリと非同期クエリは、D3DQUERYTYPE を指定して IDirect3DDevice9::CreateQuery で作成します。クエリを作成し、問い合わせ対象の API 呼び出しを行った後は、IDirect3DQuery9::Issue でクエリを発行し、IDirect3DQuery9::GetData でクエリの結果を取得します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDirect3DDevice9 "{D0223B96-BF7A-43FD-92BD-A43B0D82B9EB}" #usecom global IDirect3DDevice9 IID_IDirect3DDevice9 "{}" #comfunc global IDirect3DDevice9_TestCooperativeLevel 3 #comfunc global IDirect3DDevice9_GetAvailableTextureMem 4 #comfunc global IDirect3DDevice9_EvictManagedResources 5 #comfunc global IDirect3DDevice9_GetDirect3D 6 sptr #comfunc global IDirect3DDevice9_GetDeviceCaps 7 var #comfunc global IDirect3DDevice9_GetDisplayMode 8 int,var #comfunc global IDirect3DDevice9_GetCreationParameters 9 var #comfunc global IDirect3DDevice9_SetCursorProperties 10 int,int,sptr #comfunc global IDirect3DDevice9_SetCursorPosition 11 int,int,int #comfunc global IDirect3DDevice9_ShowCursor 12 int #comfunc global IDirect3DDevice9_CreateAdditionalSwapChain 13 var,sptr #comfunc global IDirect3DDevice9_GetSwapChain 14 int,sptr #comfunc global IDirect3DDevice9_GetNumberOfSwapChains 15 #comfunc global IDirect3DDevice9_Reset 16 var #comfunc global IDirect3DDevice9_Present 17 var,var,sptr,var #comfunc global IDirect3DDevice9_GetBackBuffer 18 int,int,int,sptr #comfunc global IDirect3DDevice9_GetRasterStatus 19 int,var #comfunc global IDirect3DDevice9_SetDialogBoxMode 20 int #comfunc global IDirect3DDevice9_SetGammaRamp 21 int,int,var #comfunc global IDirect3DDevice9_GetGammaRamp 22 int,var #comfunc global IDirect3DDevice9_CreateTexture 23 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateVolumeTexture 24 int,int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateCubeTexture 25 int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateVertexBuffer 26 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateIndexBuffer 27 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateRenderTarget 28 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateDepthStencilSurface 29 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_UpdateSurface 30 sptr,var,sptr,var #comfunc global IDirect3DDevice9_UpdateTexture 31 sptr,sptr #comfunc global IDirect3DDevice9_GetRenderTargetData 32 sptr,sptr #comfunc global IDirect3DDevice9_GetFrontBufferData 33 int,sptr #comfunc global IDirect3DDevice9_StretchRect 34 sptr,var,sptr,var,int #comfunc global IDirect3DDevice9_ColorFill 35 sptr,var,int #comfunc global IDirect3DDevice9_CreateOffscreenPlainSurface 36 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_SetRenderTarget 37 int,sptr #comfunc global IDirect3DDevice9_GetRenderTarget 38 int,sptr #comfunc global IDirect3DDevice9_SetDepthStencilSurface 39 sptr #comfunc global IDirect3DDevice9_GetDepthStencilSurface 40 sptr #comfunc global IDirect3DDevice9_BeginScene 41 #comfunc global IDirect3DDevice9_EndScene 42 #comfunc global IDirect3DDevice9_Clear 43 int,var,int,int,float,int #comfunc global IDirect3DDevice9_SetTransform 44 int,var #comfunc global IDirect3DDevice9_GetTransform 45 int,var #comfunc global IDirect3DDevice9_MultiplyTransform 46 int,var #comfunc global IDirect3DDevice9_SetViewport 47 var #comfunc global IDirect3DDevice9_GetViewport 48 var #comfunc global IDirect3DDevice9_SetMaterial 49 var #comfunc global IDirect3DDevice9_GetMaterial 50 var #comfunc global IDirect3DDevice9_SetLight 51 int,var #comfunc global IDirect3DDevice9_GetLight 52 int,var #comfunc global IDirect3DDevice9_LightEnable 53 int,int #comfunc global IDirect3DDevice9_GetLightEnable 54 int,var #comfunc global IDirect3DDevice9_SetClipPlane 55 int,var #comfunc global IDirect3DDevice9_GetClipPlane 56 int,var #comfunc global IDirect3DDevice9_SetRenderState 57 int,int #comfunc global IDirect3DDevice9_GetRenderState 58 int,var #comfunc global IDirect3DDevice9_CreateStateBlock 59 int,sptr #comfunc global IDirect3DDevice9_BeginStateBlock 60 #comfunc global IDirect3DDevice9_EndStateBlock 61 sptr #comfunc global IDirect3DDevice9_SetClipStatus 62 var #comfunc global IDirect3DDevice9_GetClipStatus 63 var #comfunc global IDirect3DDevice9_GetTexture 64 int,sptr #comfunc global IDirect3DDevice9_SetTexture 65 int,sptr #comfunc global IDirect3DDevice9_GetTextureStageState 66 int,int,var #comfunc global IDirect3DDevice9_SetTextureStageState 67 int,int,int #comfunc global IDirect3DDevice9_GetSamplerState 68 int,int,var #comfunc global IDirect3DDevice9_SetSamplerState 69 int,int,int #comfunc global IDirect3DDevice9_ValidateDevice 70 var #comfunc global IDirect3DDevice9_SetPaletteEntries 71 int,var #comfunc global IDirect3DDevice9_GetPaletteEntries 72 int,var #comfunc global IDirect3DDevice9_SetCurrentTexturePalette 73 int #comfunc global IDirect3DDevice9_GetCurrentTexturePalette 74 var #comfunc global IDirect3DDevice9_SetScissorRect 75 var #comfunc global IDirect3DDevice9_GetScissorRect 76 var #comfunc global IDirect3DDevice9_SetSoftwareVertexProcessing 77 int #comfunc global IDirect3DDevice9_GetSoftwareVertexProcessing 78 #comfunc global IDirect3DDevice9_SetNPatchMode 79 float #comfunc global IDirect3DDevice9_GetNPatchMode 80 #comfunc global IDirect3DDevice9_DrawPrimitive 81 int,int,int #comfunc global IDirect3DDevice9_DrawIndexedPrimitive 82 int,int,int,int,int,int #comfunc global IDirect3DDevice9_DrawPrimitiveUP 83 int,int,sptr,int #comfunc global IDirect3DDevice9_DrawIndexedPrimitiveUP 84 int,int,int,int,sptr,int,sptr,int #comfunc global IDirect3DDevice9_ProcessVertices 85 int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9_CreateVertexDeclaration 86 var,sptr #comfunc global IDirect3DDevice9_SetVertexDeclaration 87 sptr #comfunc global IDirect3DDevice9_GetVertexDeclaration 88 sptr #comfunc global IDirect3DDevice9_SetFVF 89 int #comfunc global IDirect3DDevice9_GetFVF 90 var #comfunc global IDirect3DDevice9_CreateVertexShader 91 var,sptr #comfunc global IDirect3DDevice9_SetVertexShader 92 sptr #comfunc global IDirect3DDevice9_GetVertexShader 93 sptr #comfunc global IDirect3DDevice9_SetVertexShaderConstantF 94 int,var,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantF 95 int,var,int #comfunc global IDirect3DDevice9_SetVertexShaderConstantI 96 int,var,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantI 97 int,var,int #comfunc global IDirect3DDevice9_SetVertexShaderConstantB 98 int,var,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantB 99 int,var,int #comfunc global IDirect3DDevice9_SetStreamSource 100 int,sptr,int,int #comfunc global IDirect3DDevice9_GetStreamSource 101 int,sptr,var,var #comfunc global IDirect3DDevice9_SetStreamSourceFreq 102 int,int #comfunc global IDirect3DDevice9_GetStreamSourceFreq 103 int,var #comfunc global IDirect3DDevice9_SetIndices 104 sptr #comfunc global IDirect3DDevice9_GetIndices 105 sptr #comfunc global IDirect3DDevice9_CreatePixelShader 106 var,sptr #comfunc global IDirect3DDevice9_SetPixelShader 107 sptr #comfunc global IDirect3DDevice9_GetPixelShader 108 sptr #comfunc global IDirect3DDevice9_SetPixelShaderConstantF 109 int,var,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantF 110 int,var,int #comfunc global IDirect3DDevice9_SetPixelShaderConstantI 111 int,var,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantI 112 int,var,int #comfunc global IDirect3DDevice9_SetPixelShaderConstantB 113 int,var,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantB 114 int,var,int #comfunc global IDirect3DDevice9_DrawRectPatch 115 int,var,var #comfunc global IDirect3DDevice9_DrawTriPatch 116 int,var,var #comfunc global IDirect3DDevice9_DeletePatch 117 int #comfunc global IDirect3DDevice9_CreateQuery 118 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。#define global IID_IDirect3DDevice9 "{D0223B96-BF7A-43FD-92BD-A43B0D82B9EB}" #usecom global IDirect3DDevice9 IID_IDirect3DDevice9 "{}" #comfunc global IDirect3DDevice9_TestCooperativeLevel 3 #comfunc global IDirect3DDevice9_GetAvailableTextureMem 4 #comfunc global IDirect3DDevice9_EvictManagedResources 5 #comfunc global IDirect3DDevice9_GetDirect3D 6 sptr #comfunc global IDirect3DDevice9_GetDeviceCaps 7 sptr #comfunc global IDirect3DDevice9_GetDisplayMode 8 int,sptr #comfunc global IDirect3DDevice9_GetCreationParameters 9 sptr #comfunc global IDirect3DDevice9_SetCursorProperties 10 int,int,sptr #comfunc global IDirect3DDevice9_SetCursorPosition 11 int,int,int #comfunc global IDirect3DDevice9_ShowCursor 12 int #comfunc global IDirect3DDevice9_CreateAdditionalSwapChain 13 sptr,sptr #comfunc global IDirect3DDevice9_GetSwapChain 14 int,sptr #comfunc global IDirect3DDevice9_GetNumberOfSwapChains 15 #comfunc global IDirect3DDevice9_Reset 16 sptr #comfunc global IDirect3DDevice9_Present 17 sptr,sptr,sptr,sptr #comfunc global IDirect3DDevice9_GetBackBuffer 18 int,int,int,sptr #comfunc global IDirect3DDevice9_GetRasterStatus 19 int,sptr #comfunc global IDirect3DDevice9_SetDialogBoxMode 20 int #comfunc global IDirect3DDevice9_SetGammaRamp 21 int,int,sptr #comfunc global IDirect3DDevice9_GetGammaRamp 22 int,sptr #comfunc global IDirect3DDevice9_CreateTexture 23 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateVolumeTexture 24 int,int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateCubeTexture 25 int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateVertexBuffer 26 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateIndexBuffer 27 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateRenderTarget 28 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_CreateDepthStencilSurface 29 int,int,int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_UpdateSurface 30 sptr,sptr,sptr,sptr #comfunc global IDirect3DDevice9_UpdateTexture 31 sptr,sptr #comfunc global IDirect3DDevice9_GetRenderTargetData 32 sptr,sptr #comfunc global IDirect3DDevice9_GetFrontBufferData 33 int,sptr #comfunc global IDirect3DDevice9_StretchRect 34 sptr,sptr,sptr,sptr,int #comfunc global IDirect3DDevice9_ColorFill 35 sptr,sptr,int #comfunc global IDirect3DDevice9_CreateOffscreenPlainSurface 36 int,int,int,int,sptr,sptr #comfunc global IDirect3DDevice9_SetRenderTarget 37 int,sptr #comfunc global IDirect3DDevice9_GetRenderTarget 38 int,sptr #comfunc global IDirect3DDevice9_SetDepthStencilSurface 39 sptr #comfunc global IDirect3DDevice9_GetDepthStencilSurface 40 sptr #comfunc global IDirect3DDevice9_BeginScene 41 #comfunc global IDirect3DDevice9_EndScene 42 #comfunc global IDirect3DDevice9_Clear 43 int,sptr,int,int,float,int #comfunc global IDirect3DDevice9_SetTransform 44 int,sptr #comfunc global IDirect3DDevice9_GetTransform 45 int,sptr #comfunc global IDirect3DDevice9_MultiplyTransform 46 int,sptr #comfunc global IDirect3DDevice9_SetViewport 47 sptr #comfunc global IDirect3DDevice9_GetViewport 48 sptr #comfunc global IDirect3DDevice9_SetMaterial 49 sptr #comfunc global IDirect3DDevice9_GetMaterial 50 sptr #comfunc global IDirect3DDevice9_SetLight 51 int,sptr #comfunc global IDirect3DDevice9_GetLight 52 int,sptr #comfunc global IDirect3DDevice9_LightEnable 53 int,int #comfunc global IDirect3DDevice9_GetLightEnable 54 int,sptr #comfunc global IDirect3DDevice9_SetClipPlane 55 int,sptr #comfunc global IDirect3DDevice9_GetClipPlane 56 int,sptr #comfunc global IDirect3DDevice9_SetRenderState 57 int,int #comfunc global IDirect3DDevice9_GetRenderState 58 int,sptr #comfunc global IDirect3DDevice9_CreateStateBlock 59 int,sptr #comfunc global IDirect3DDevice9_BeginStateBlock 60 #comfunc global IDirect3DDevice9_EndStateBlock 61 sptr #comfunc global IDirect3DDevice9_SetClipStatus 62 sptr #comfunc global IDirect3DDevice9_GetClipStatus 63 sptr #comfunc global IDirect3DDevice9_GetTexture 64 int,sptr #comfunc global IDirect3DDevice9_SetTexture 65 int,sptr #comfunc global IDirect3DDevice9_GetTextureStageState 66 int,int,sptr #comfunc global IDirect3DDevice9_SetTextureStageState 67 int,int,int #comfunc global IDirect3DDevice9_GetSamplerState 68 int,int,sptr #comfunc global IDirect3DDevice9_SetSamplerState 69 int,int,int #comfunc global IDirect3DDevice9_ValidateDevice 70 sptr #comfunc global IDirect3DDevice9_SetPaletteEntries 71 int,sptr #comfunc global IDirect3DDevice9_GetPaletteEntries 72 int,sptr #comfunc global IDirect3DDevice9_SetCurrentTexturePalette 73 int #comfunc global IDirect3DDevice9_GetCurrentTexturePalette 74 sptr #comfunc global IDirect3DDevice9_SetScissorRect 75 sptr #comfunc global IDirect3DDevice9_GetScissorRect 76 sptr #comfunc global IDirect3DDevice9_SetSoftwareVertexProcessing 77 int #comfunc global IDirect3DDevice9_GetSoftwareVertexProcessing 78 #comfunc global IDirect3DDevice9_SetNPatchMode 79 float #comfunc global IDirect3DDevice9_GetNPatchMode 80 #comfunc global IDirect3DDevice9_DrawPrimitive 81 int,int,int #comfunc global IDirect3DDevice9_DrawIndexedPrimitive 82 int,int,int,int,int,int #comfunc global IDirect3DDevice9_DrawPrimitiveUP 83 int,int,sptr,int #comfunc global IDirect3DDevice9_DrawIndexedPrimitiveUP 84 int,int,int,int,sptr,int,sptr,int #comfunc global IDirect3DDevice9_ProcessVertices 85 int,int,int,sptr,sptr,int #comfunc global IDirect3DDevice9_CreateVertexDeclaration 86 sptr,sptr #comfunc global IDirect3DDevice9_SetVertexDeclaration 87 sptr #comfunc global IDirect3DDevice9_GetVertexDeclaration 88 sptr #comfunc global IDirect3DDevice9_SetFVF 89 int #comfunc global IDirect3DDevice9_GetFVF 90 sptr #comfunc global IDirect3DDevice9_CreateVertexShader 91 sptr,sptr #comfunc global IDirect3DDevice9_SetVertexShader 92 sptr #comfunc global IDirect3DDevice9_GetVertexShader 93 sptr #comfunc global IDirect3DDevice9_SetVertexShaderConstantF 94 int,sptr,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantF 95 int,sptr,int #comfunc global IDirect3DDevice9_SetVertexShaderConstantI 96 int,sptr,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantI 97 int,sptr,int #comfunc global IDirect3DDevice9_SetVertexShaderConstantB 98 int,sptr,int #comfunc global IDirect3DDevice9_GetVertexShaderConstantB 99 int,sptr,int #comfunc global IDirect3DDevice9_SetStreamSource 100 int,sptr,int,int #comfunc global IDirect3DDevice9_GetStreamSource 101 int,sptr,sptr,sptr #comfunc global IDirect3DDevice9_SetStreamSourceFreq 102 int,int #comfunc global IDirect3DDevice9_GetStreamSourceFreq 103 int,sptr #comfunc global IDirect3DDevice9_SetIndices 104 sptr #comfunc global IDirect3DDevice9_GetIndices 105 sptr #comfunc global IDirect3DDevice9_CreatePixelShader 106 sptr,sptr #comfunc global IDirect3DDevice9_SetPixelShader 107 sptr #comfunc global IDirect3DDevice9_GetPixelShader 108 sptr #comfunc global IDirect3DDevice9_SetPixelShaderConstantF 109 int,sptr,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantF 110 int,sptr,int #comfunc global IDirect3DDevice9_SetPixelShaderConstantI 111 int,sptr,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantI 112 int,sptr,int #comfunc global IDirect3DDevice9_SetPixelShaderConstantB 113 int,sptr,int #comfunc global IDirect3DDevice9_GetPixelShaderConstantB 114 int,sptr,int #comfunc global IDirect3DDevice9_DrawRectPatch 115 int,sptr,sptr #comfunc global IDirect3DDevice9_DrawTriPatch 116 int,sptr,sptr #comfunc global IDirect3DDevice9_DeletePatch 117 int #comfunc global IDirect3DDevice9_CreateQuery 118 int,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。 ; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。