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 デバイスの現在の協調レベル (cooperative level) の状態を報告します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK であり、デバイスが動作可能で呼び出し元のアプリケーションが処理を継続できることを示します。 メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DEVICELOST、D3DERR_DEVICENOTRESET、D3DERR_DRIVERINTERNALERROR。
解説(Remarks)
デバイスが失われており、現時点では復元できない場合、IDirect3DDevice9::TestCooperativeLevel は D3DERR_DEVICELOST を返します。たとえば、フルスクリーンのデバイスがフォーカスを失った場合がこれに該当します。アプリケーションはデバイスの喪失を検出した場合、処理を一時停止し、D3DERR_DEVICENOTRESET が返されるまで IDirect3DDevice9::TestCooperativeLevel を定期的に呼び出す必要があります。その後、IDirect3DDevice9::Reset を呼び出してデバイスのリセットを試み、成功した場合は必要なリソースを復元して通常の動作を再開できます。なお、デバイスが「lost」または「not reset」の状態にある場合、IDirect3DDevice9::Present は D3DERR_DEVICELOST を返します。
リセット対象のデバイスを作成したスレッドとは別のスレッドから呼び出した場合、IDirect3DDevice9::TestCooperativeLevel の呼び出しは失敗します。
IDirect3DDevice9::GetAvailableTextureMem メソッド (d3d9.h) は、使用可能なテクスチャ メモリ量の推定値を返します。
戻り値
型: UINT
この関数は、使用可能なテクスチャ メモリの推定値を返します。
解説(Remarks)
戻り値は最も近い MB 単位に丸められます。これは、アラインメントや特定のリソースによる消費に影響するその他の要因により、ビデオ メモリの推定値が厳密なものにはならないという事実を反映するためです。アプリケーションはこの値を用いて、ミップマップを何レベルまで割り当てるかといった大まかなメモリ可用性の見積もりを行うことはできますが、別のリソースを割り当てるだけのメモリが残っているかどうかといった細かい判断には使用できません。
IDirect3DDevice9::EvictManagedResources メソッド (d3d9.h) は、Direct3D 管理およびドライバー管理の両方を含む、すべての管理対象リソースを追い出します (evict)。
戻り値
型: 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) は、レンダリング デバイスの機能 (capabilities) を取得します。
| 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 つしかサポートできません。
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 が返される) 「not reset」状態にすでにある場合を除き、「lost」状態に置かれます (IDirect3DDevice9::TestCooperativeLevel の呼び出しで D3DERR_DEVICELOST が返されることで示されます)。デバイス喪失時の IDirect3DDevice9::Reset の使用方法の詳細については、IDirect3DDevice9::TestCooperativeLevel および Lost Devices (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 つになります。
グループ内の複数のディスプレイ アダプターをリセットする場合は、アダプター グループ内の各ディスプレイに 1 つずつ対応する D3DPRESENT_PARAMETERS 構造体の配列を指すように pPresentationParameters を設定します。
マルチヘッド デバイスが 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 でなければなりません。スワップチェーンの詳細については、Flipping Surfaces (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 はフルスクリーン モードのアプリケーションでのみガンマ ランプを設定します。ガンマ補正の詳細については、Gamma (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 が 1x1 ピクセルまでのすべてのテクスチャ サブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。 |
| Usage | DWORD | in | Usage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、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 つのテクスチャのみがサポートされます。Levels 引数は 1 でなければなりません。
- Pool 引数は D3DPOOL_SYSTEMMEM でなければなりません。
- pSharedHandle 引数は、システム メモリ ポインターを保持できるバッファーへの有効なポインターでなければなりません。*pSharedHandle は、テクスチャの幅 * テクスチャの高さ * テクスチャ形式のピクセルあたりのバイト数、というバイト サイズを持つシステム メモリへの有効なポインターでなければなりません。
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 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、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 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、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 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、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 Vertex Buffers (Direct3D 9) を参照してください。
非 FVF バッファーは、マルチパス レンダリングや、単一パスでのマルチテクスチャ レンダリングの際にデータをインターリーブするために使用できます。この場合、1 つのバッファーにジオメトリ データを格納し、他のバッファーにレンダリング対象の各テクスチャのテクスチャ座標を格納します。レンダリング時には、ジオメトリ データを含むバッファーが、テクスチャ座標を含む各バッファーとインターリーブされます。代わりに FVF バッファーを使用した場合、各バッファーにはレンダリングされるテクスチャごとのテクスチャ座標データに加えて、同一のジオメトリ データを含める必要が生じます。これは、採用する方式に応じて速度またはメモリのいずれかの面で不利になります。テクスチャ座標の詳細については、Texture Coordinates (Direct3D 9) を参照してください。
IDirect3DDevice9::CreateIndexBuffer メソッド (d3d9.h) は、インデックス バッファーを作成します。
| Length | DWORD | in | インデックス バッファーのサイズ (バイト単位) です。 | ||||||
| Usage | DWORD | in | Usage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、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 に変換されたフロント バッファーの内容が格納されます。
アンチエイリアシングされたスクリーン ショットを取得する方法は、このメソッドのみです。
この関数は設計上非常に低速であり、パフォーマンスが重要な処理経路では使用すべきではありません。
詳細については、Lost Devices and Retrieved Data を参照してください。
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 を参照)。
- 同一サーフェス上のコピー元矩形とコピー先矩形の間での拡大縮小はサポートされません。
- コピー先サーフェスがオフスクリーン プレーン サーフェスで、コピー元がそうでない場合、拡大縮小はサポートされません。
- いずれかのサーフェスが圧縮形式の場合、コピー元矩形とコピー先矩形の間で拡大縮小を行うことはできません (Using Compressed Textures (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 メンバーに格納されています。Multiple Render Targets (Direct3D 9) を参照してください。
新しいレンダーターゲットを設定すると、ビューポート (Viewports and Clipping (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 メンバーに格納されています。Multiple Render Targets (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::EndScene の対の内側にある状態で IDirect3DDevice9::BeginScene を呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、IDirect3DDevice9::EndScene を先に呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。
解説(Remarks)
アプリケーションは、レンダリングを行う前に必ず IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了した時点かつ再び IDirect3DDevice9::BeginScene を呼び出す前に、必ず IDirect3DDevice9::EndScene を呼び出さなければなりません。
IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったのであり、IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の IDirect3DDevice9::BeginScene が失敗している場合、IDirect3DDevice9::EndScene の呼び出しも失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。
連続する present の呼び出し (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の間には、IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が 1 つだけ存在するようにしてください。IDirect3DDevice9::BeginScene はレンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のすべてのレンダリングをランタイムへ送信した後に 1 回呼び出します。present の呼び出しの間に入れ子でない IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が複数存在することは許容されますが、対が 2 つ以上あるとパフォーマンスが低下する可能性があります。 CPU とグラフィックス アクセラレーターの並列性を最大化するには、present の呼び出しよりできるだけ早い段階で IDirect3DDevice9::EndScene を呼び出すことが有利です。
IDirect3DDevice9::EndScene メソッド (d3d9.h) は、IDirect3DDevice9::BeginScene の呼び出しによって開始されたシーンを終了します。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。すでに IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対の内側にある状態で IDirect3DDevice9::BeginScene を呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、IDirect3DDevice9::EndScene を先に呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。
解説(Remarks)
このメソッドが成功すると、シーンはドライバーによるレンダリングのためにキューへ登録されます。これは同期メソッドではないため、このメソッドから戻った時点でシーンのレンダリングが完了していることは保証されません。
アプリケーションは、レンダリングを行う前に必ず IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了した時点かつ再び IDirect3DDevice9::BeginScene を呼び出す前に、必ず IDirect3DDevice9::EndScene を呼び出さなければなりません。
IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったのであり、IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の IDirect3DDevice9::BeginScene が失敗している場合、
IDirect3DDevice9::EndScene の呼び出しも失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。
連続する present の呼び出し (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の間には、IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対は多くとも 1 つだけ存在するようにしてください。IDirect3DDevice9::BeginScene はレンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のすべてのレンダリングをランタイムへ送信した後に 1 回呼び出します。CPU とグラフィックス アクセラレーターの並列性を最大化するには、present の呼び出しよりできるだけ早い段階で 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) は、デバイスの変換に関する単一の状態を設定します。
| 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 は、画面の一部分に描画するために使用できます。ビューポートの設定を有効にするため、ジオメトリを描画する前に必ず呼び出してください。
シーン内に複数のビューを描画するには、ビューごとに 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 は使用できません。また、DevCaps に D3DDEVCAPS_TEXTURESYSTEMMEMORY が設定されていない限り、プール タイプ D3DPOOL_SYSTEMMEM のテクスチャに対して 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 | サンプラー ステージのインデックスです。サンプラー ステージの詳細については、Sampling Stage Registers in vs_3_0 (DirectX HLSL) を参照してください。 |
| Type | D3DSAMPLERSTATETYPE | in | このパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。 |
| Value | DWORD | in | 設定する状態値です。この値の意味は Type パラメーターによって決まります。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
IDirect3DDevice9::ValidateDevice メソッド (d3d9.h) は、現在のテクスチャ ブレンド操作および引数を単一パスでレンダリングできるかどうかについて、デバイスの能力を報告します。
| 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_DIFFUSE、D3DTOP_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 に設定されている場合、デバッグ ランタイムは警告メッセージを出力します。
デバイスには単一の論理パレットが関連付けられ、すべてのテクスチャ ステージで共有されます。
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)
デバイスには単一の論理パレットが関連付けられ、すべてのテクスチャ ステージで共有されます。
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 における矩形の使用方法の詳細については、Rectangles (Direct3D 9) を参照してください。
IDirect3DDevice9::GetScissorRect メソッド (d3d9.h) は、シザー矩形を取得します。
| pRect | RECT* | inout | シザー テストが有効な場合に、レンダーターゲット内のレンダリング領域を定義する RECT 構造体へのポインターを返します。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
シザー矩形は、矩形のクリッピング領域として使用されます。
DirectX における矩形の使用方法の詳細については、Rectangles (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 | 頂点バッファーの先頭から最初の頂点までのオフセットです。Scenario 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 | 頂点 1 つあたりのデータのバイト数です。この値を 0 にすることはできません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を意図しています。このメソッドは単一の頂点ストリームのみをサポートします。この呼び出しの効果は、指定された頂点データ ポインターとストライドを頂点ストリーム 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 | 頂点 1 つあたりのデータのバイト数です。この値を 0 にすることはできません。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。
解説(Remarks)
このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を意図しています。このメソッドは単一の頂点ストリームのみをサポートし、そのストリームはストリーム 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 の各バージョン間で頂点宣言をどのように対応付けるかの詳細については、Vertex Declaration (Direct3D 9) のページを参照してください。
IDirect3DDevice9::SetVertexDeclaration メソッド (d3d9helper.h) は、頂点宣言 (Vertex Declaration、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 から算出される頂点サイズと一致していなければなりません。宣言 (declaration) を使用する場合、ストライドは宣言から算出されるストリーム サイズ以上である必要があります。
SetStreamSource を呼び出す際、通常はストライドが頂点サイズと等しいことが要求されます。ただし、同一または類似のジオメトリのインスタンスを複数描画したい場合 (インスタンシングによる描画を行う場合など) があります。この場合は、ストライドに 0 を指定して、頂点バッファーのオフセットを進めないようランタイムに指示します (すなわち、すべてのインスタンスで同じ頂点データを使用します)。インスタンシングの詳細については、Efficiently Drawing Multiple Instances of Geometry (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 から算出される頂点サイズと一致していなければなりません。宣言 (declaration) を使用する場合、ストライドは宣言から算出されるストリーム サイズ以上である必要があります。
このメソッドを呼び出すと、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 が定義されています。これらの定数の使用方法については、Efficiently Drawing Multiple Instances of Geometry (Direct3D 9) を参照してください。
IDirect3DDevice9::GetStreamSourceFreq メソッド (d3d9.h) は、ストリーム ソースの周波数分周値を取得します。
| StreamNumber | DWORD | in | ストリーム ソース番号です。 - Divider型: [out] UINT* 周波数分周値を返します。 |
| pSetting | DWORD* | inout | 現在の分周設定値を受け取るDWORDポインタ。 |
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。
解説(Remarks)
頂点シェーダーは、頂点あたり複数回呼び出せるようになりました。Drawing Non-Indexed Geometry を参照してください。
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 指定が可能。