Win32 API 日本語リファレンス
ホームGraphics.Direct3D9 › IDirect3DDevice9

IDirect3DDevice9

COM
IIDd0223b96-bf7a-43fd-92bd-a43b0d82b9eb継承元IUnknown自前メソッド開始 vtbl3

公式ドキュメント

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。

vtbl 3 HRESULT TestCooperativeLevel()

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 の呼び出しは失敗します。

vtbl 4 DWORD GetAvailableTextureMem()

IDirect3DDevice9::GetAvailableTextureMem メソッド (d3d9.h) は、使用可能なテクスチャ メモリ量の推定値を返します。

戻り値

型: UINT

この関数は、使用可能なテクスチャ メモリの推定値を返します。

解説(Remarks)

戻り値は最も近い MB 単位に丸められます。これは、アラインメントや特定のリソースによる消費に影響するその他の要因により、ビデオ メモリの推定値が厳密なものにはならないという事実を反映するためです。アプリケーションはこの値を用いて、ミップマップを何レベルまで割り当てるかといった大まかなメモリ可用性の見積もりを行うことはできますが、別のリソースを割り当てるだけのメモリが残っているかどうかといった細かい判断には使用できません。

vtbl 5 HRESULT EvictManagedResources()

IDirect3DDevice9::EvictManagedResources メソッド (d3d9.h) は、Direct3D 管理およびドライバー管理の両方を含む、すべての管理対象リソースを追い出します (evict)。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_OUTOFVIDEOMEMORY、D3DERR_COMMAND_UNPARSED のいずれかになります。

解説(Remarks)

この関数は、リソースの D3DPOOL_DEFAULT のコピーのみを追い出します。システム メモリ上のリソースのコピーは保持されます。D3DPOOL を参照してください。

vtbl 6 HRESULT GetDirect3D(IDirect3D9** ppD3D9)

IDirect3DDevice9::GetDirect3D メソッド (d3d9.h) は、このデバイスを作成した Direct3D オブジェクトのインスタンスへのインターフェイスを返します。

ppD3D9IDirect3D9**outこのデバイスを作成した Direct3D オブジェクトのインターフェイスを表す IDirect3D9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

IDirect3DDevice9::GetDirect3D を呼び出すと、IDirect3D9 インターフェイスの内部参照カウントが増加します。この IDirect3D9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 7 HRESULT GetDeviceCaps(D3DCAPS9* pCaps)

IDirect3DDevice9::GetDeviceCaps メソッド (d3d9.h) は、レンダリング デバイスの機能 (capabilities) を取得します。

pCapsD3DCAPS9*inout返されるデバイスを記述する D3DCAPS9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

デバイスがソフトウェア頂点処理モードで使用されている場合、IDirect3DDevice9::GetDeviceCaps はソフトウェア頂点パイプラインの機能を取得します。

vtbl 8 HRESULT GetDisplayMode(DWORD iSwapChain, D3DDISPLAYMODE* pMode)

IDirect3DDevice9::GetDisplayMode メソッド (d3d9.h) は、ディスプレイ モードの空間解像度、色解像度、およびリフレッシュ レートを取得します。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
pModeD3DDISPLAYMODE*inoutアダプターのディスプレイ モードに関するデータを格納する D3DDISPLAYMODE 構造体へのポインターです。これはデバイスのディスプレイ モードとは異なり、デバイスがフルスクリーン モードを所有していない場合はアクティブでないことがあります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

vtbl 9 HRESULT GetCreationParameters(D3DDEVICE_CREATION_PARAMETERS* pParameters)

IDirect3DDevice9::GetCreationParameters メソッド (d3d9.h) は、デバイスの作成パラメーターを取得します。

pParametersD3DDEVICE_CREATION_PARAMETERS*inoutデバイスの作成パラメーターを記述する D3DDEVICE_CREATION_PARAMETERS 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。

引数が無効な場合は D3DERR_INVALIDCALL が返されます。

解説(Remarks)

返された D3DDEVICE_CREATION_PARAMETERS 構造体の AdapterOrdinal メンバーを参照することで、このデバイスが表すアダプターの序数を取得できます。

vtbl 10 HRESULT SetCursorProperties(DWORD XHotSpot, DWORD YHotSpot, IDirect3DSurface9* pCursorBitmap)

IDirect3DDevice9::SetCursorProperties メソッド (d3d9.h) は、カーソルのプロパティを設定します。

XHotSpotDWORDinカーソルの中心を示す X 座標のオフセット (ピクセル単位) です。オフセットはカーソルの左上隅を基準とします。カーソルに新しい位置が与えられると、その位置からホット スポット座標を減算して求めたオフセット位置に画像が描画されます。
YHotSpotDWORDinカーソルの中心を示す Y 座標のオフセット (ピクセル単位) です。オフセットはカーソルの左上隅を基準とします。カーソルに新しい位置が与えられると、その位置からホット スポット座標を減算して求めたオフセット位置に画像が描画されます。
pCursorBitmapIDirect3DSurface9*inIDirect3DSurface9 インターフェイスへのポインターです。このパラメーターは 8888 ARGB サーフェス (D3DFMT_A8R8G8B8 形式) を指す必要があります。このサーフェスの内容はコピーされ、必要に応じて形式変換されたうえで、カーソルの表示に使用される内部バッファーに格納されます。このサーフェスの寸法はディスプレイ モードの寸法より小さく、かつ各方向とも 2 のべき乗である必要があります (ただし同じべき乗である必要はありません)。アルファ チャネルは 0.0 または 1.0 のいずれかでなければなりません。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

次のいずれかの条件を満たす場合、オペレーティング システムのカーソルが作成され使用されます。

それ以外の場合、DirectX はエミュレートされたカーソルを使用します。アプリケーションは IDirect3DDevice9::SetCursorPosition を使用して、エミュレートされたカーソルをマウスの動きに追従させます。

アプリケーションでは、常に 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 は成功しますが、カーソルはそのサイズに縮小されることがあります。ホット スポットも適切にスケーリングされます。

デバイスが失われるとカーソルは維持されません。このメソッドは、デバイスのリセット後に呼び出す必要があります。

vtbl 11 void SetCursorPosition(INT X, INT Y, DWORD Flags)

IDirect3DDevice9::SetCursorPosition メソッド (d3d9.h) は、カーソルの位置と更新オプションを設定します。

XINTin仮想デスクトップ座標での、カーソルの新しい X 座標です。「解説」を参照してください。
YINTin仮想デスクトップ座標での、カーソルの新しい Y 座標です。「解説」を参照してください。
FlagsDWORDin

カーソルの更新オプションを指定します。現在、定義されているフラグは 1 つだけです。

意味
D3DCURSOR_IMMEDIATE_UPDATE
リフレッシュ レートでカーソルを更新します。

このフラグを指定すると、システムはカーソルがディスプレイのリフレッシュ レートの少なくとも半分の頻度で更新されることを保証しますが、リフレッシュ レートを超える頻度で更新されることはありません。このフラグを指定しない場合、メソッドは次の IDirect3DDevice9::Present の呼び出しまでカーソルの更新を遅延させます。通常、このフラグを設定しない方がパフォーマンスは向上します。ただし、Present の呼び出し頻度が低く、カーソルの動きに目立った遅延をユーザーが感じるような場合には、このフラグを設定してください。このフラグはウィンドウ モードのアプリケーションでは効果がありません。一部のビデオ カードはハードウェア カラー カーソルを実装しており、そのようなカードではこのフラグは効果を持ちません。

解説(Remarks)

フルスクリーン モードで実行している場合、スクリーン空間座標は現在のディスプレイ モードに合わせて適切にスケーリングされたバック バッファー座標になります。ウィンドウ モードで実行している場合、スクリーン空間座標はデスクトップ座標になります。カーソル画像は、指定された位置から SetCursorProperties メソッドで指定したホット スポット オフセットを引いた位置に描画されます。

ShowCursor によってカーソルが非表示にされている場合、カーソルは描画されません。

vtbl 12 BOOL ShowCursor(BOOL bShow)

IDirect3DDevice9::ShowCursor メソッド (d3d9helper.h) は、カーソルを表示または非表示にします。

bShowBOOLinbShow が 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++ サンプルのコードを参照してください。

vtbl 13 HRESULT CreateAdditionalSwapChain(D3DPRESENT_PARAMETERS* pPresentationParameters, IDirect3DSwapChain9** pSwapChain)

IDirect3DDevice9::CreateAdditionalSwapChain メソッド (d3d9.h) は、複数のビューをレンダリングするための追加のスワップチェーンを作成します。

pPresentationParametersD3DPRESENT_PARAMETERS*inout

新しいスワップチェーンのプレゼンテーション パラメーターを格納する D3DPRESENT_PARAMETERS 構造体へのポインターです。この値を NULL にすることはできません。

このメソッドを呼び出すと、D3DPRESENT_PARAMETERS 構造体のメンバーの値が変更されます。

  • BackBufferCount == 0 の場合、CreateAdditionalSwapChain の呼び出しによって 1 に増加します。
  • アプリケーションがウィンドウ モードで、BackBufferWidth または BackBufferHeight のいずれかが 0 の場合、それらは hwnd のクライアント領域の幅と高さに設定されます。
pSwapChainIDirect3DSwapChain9**out追加されたスワップチェーンを表す IDirect3DSwapChain9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_DEVICELOST、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

解説(Remarks)

Direct3D 9 ではスワップチェーンがデバイスのプロパティとして 1 つ用意されているため、各デバイスには常に少なくとも 1 つのスワップチェーン (暗黙のスワップチェーン) が存在します。

なお、どのデバイスもフルスクリーンのスワップチェーンは 1 つしかサポートできません。

IDirect3D9::CreateDeviceIDirect3DDevice9::Reset、および CreateAdditionalSwapChain の呼び出し時に、ウィンドウ モードのバック バッファー形式として D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウ モードで CreateDevice を呼び出す前に、現在のデスクトップ形式を照会する必要はありません。フルスクリーン モードの場合は、バック バッファー形式を指定する必要があります。

vtbl 14 HRESULT GetSwapChain(DWORD iSwapChain, IDirect3DSwapChain9** pSwapChain)

IDirect3DDevice9::GetSwapChain メソッド (d3d9.h) は、スワップチェーンへのポインターを取得します。

iSwapChainDWORDinスワップチェーンの序数値です。詳細については、D3DCAPS9 の NumberOfAdaptersInGroup を参照してください。
pSwapChainIDirect3DSwapChain9**outスワップチェーンのコピーを受け取る IDirect3DSwapChain9 インターフェイスへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL。

vtbl 15 DWORD GetNumberOfSwapChains()

IDirect3DDevice9::GetNumberOfSwapChains メソッド (d3d9.h) は、暗黙のスワップチェーンの数を取得します。

戻り値

型: UINT

暗黙のスワップチェーンの数です。「解説」を参照してください。

解説(Remarks)

暗黙のスワップチェーンは、IDirect3D9::CreateDevice の実行中にデバイスによって作成されます。このメソッドは、CreateDevice によって作成されたスワップチェーンの数を返します。

アプリケーションは、IDirect3DDevice9::CreateAdditionalSwapChain を使用して追加のスワップチェーンを作成できます。

vtbl 16 HRESULT Reset(D3DPRESENT_PARAMETERS* pPresentationParameters)

IDirect3DDevice9::Reset メソッド (d3d9.h) は、スワップチェーンの種類、サイズ、形式をリセットします。

pPresentationParametersD3DPRESENT_PARAMETERS*inout

新しいプレゼンテーション パラメーターを記述する D3DPRESENT_PARAMETERS 構造体へのポインターです。この値を NULL にすることはできません。

フルスクリーン モードに切り替える際、Direct3D は (色変換を不要にするために) バック バッファーとフロント バッファーの形式が同一になるよう、バック バッファー形式に一致するデスクトップ形式を探します。

このメソッドから戻るとき:

  • BackBufferCount、BackBufferWidth、BackBufferHeight は 0 に設定されます。
  • BackBufferFormat はウィンドウ モードの場合にのみ D3DFMT_UNKNOWN に設定されます。フルスクリーン モードでは形式を指定する必要があります。

戻り値

型: 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::ResetIDirect3DDevice9::TestCooperativeLevel、および各種の Release メンバー関数のみです。それ以外のメソッドを呼び出すと例外が発生する可能性があります。

リセット対象のデバイスを作成したスレッドとは別のスレッドから呼び出した場合、IDirect3DDevice9::Reset の呼び出しは失敗します。

Direct3D 9 では、ピクセル シェーダーと頂点シェーダーは IDirect3DDevice9::Reset の呼び出し後も保持されます。アプリケーションが明示的に再作成する必要はありません。

IDirect3D9::CreateDeviceIDirect3DDevice9::Reset、および IDirect3DDevice9::CreateAdditionalSwapChain の呼び出し時に、ウィンドウ モードのバック バッファー形式として D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウ モードで IDirect3D9::CreateDevice を呼び出す前に、現在のデスクトップ形式を照会する必要はありません。フルスクリーン モードの場合は、バック バッファー形式を指定する必要があります。BackBufferCount を 0 に設定する (BackBufferCount = 0) と、バック バッファーは 1 つになります。

グループ内の複数のディスプレイ アダプターをリセットする場合は、アダプター グループ内の各ディスプレイに 1 つずつ対応する D3DPRESENT_PARAMETERS 構造体の配列を指すように pPresentationParameters を設定します。

マルチヘッド デバイスが D3DCREATE_ADAPTERGROUP_DEVICE で作成された場合、IDirect3DDevice9::Reset には D3DPRESENT_PARAMETERS 構造体の配列が必要であり、各構造体はフルスクリーン ディスプレイを指定しなければなりません。ウィンドウ モードに戻すには、アプリケーションはデバイスを破棄し、ウィンドウ モードで非マルチヘッド デバイスを再作成する必要があります。

vtbl 17 HRESULT Present(RECT* pSourceRect, RECT* pDestRect, HWND hDestWindowOverride, RGNDATA* pDirtyRegion)

IDirect3DDevice9::Present メソッド (d3d9.h) は、デバイスが所有するバック バッファー列のうち、次のバッファーの内容を表示 (プレゼント) します。

pSourceRectRECT*inスワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない値へのポインターです。pSourceRect は、コピー元の矩形を格納する RECT 構造体へのポインターです。NULL の場合、コピー元サーフェス全体が表示されます。矩形がコピー元サーフェスを超える場合、矩形はコピー元サーフェスにクリップされます。
pDestRectRECT*inスワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、NULL でなければならない値へのポインターです。pDestRect は、ウィンドウのクライアント座標系におけるコピー先の矩形を格納する RECT 構造体へのポインターです。NULL の場合、クライアント領域全体が塗りつぶされます。矩形がコピー先のクライアント領域を超える場合、矩形はコピー先のクライアント領域にクリップされます。
hDestWindowOverrideHWNDinこのプレゼンテーションの対象としてクライアント領域が使用されるコピー先ウィンドウへのポインターです。この値が NULL の場合、ランタイムはプレゼンテーションに D3DPRESENT_PARAMETERShDeviceWindow メンバーを使用します。
pDirtyRegionRGNDATA*inスワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、この値は NULL でなければなりません。スワップチェーンの詳細については、Flipping Surfaces (Direct3D 9) および D3DSWAPEFFECT を参照してください。この値が NULL 以外の場合、含まれるリージョンはバック バッファー座標で表現されます。リージョン内の矩形は、更新が必要なピクセルの最小集合です。このメソッドはこれらの矩形を考慮し、リージョン内のピクセルのみ、または適切に拡張された矩形集合のみをコピーすることでプレゼンテーションを最適化します。これはあくまで最適化のための補助情報であり、アプリケーションはリージョンが正確にコピーされることを前提にしてはいけません。実装はコピー元の矩形全体をコピーすることを選択できます。

戻り値

型: HRESULT

返される可能性のある値: D3D_OK または D3DERR_DEVICEREMOVED (D3DERR を参照)。

解説(Remarks)

必要に応じて、コピー元矩形内のピクセルを対象ウィンドウのクライアント領域内のコピー先矩形へ転送するために、拡大縮小 (ストレッチ) 操作が適用されます。

レンダーターゲットが現在のレンダーターゲットでない場合 (追加のスワップチェーンを作成して得られるバック バッファーなど) を除き、BeginScene と EndScene の間で Present を呼び出すと、D3DERR_INVALIDCALL を返して失敗します。これは Direct3D 9 における新しい動作です。

vtbl 18 HRESULT GetBackBuffer(DWORD iSwapChain, DWORD iBackBuffer, D3DBACKBUFFER_TYPE Type, IDirect3DSurface9** ppBackBuffer)

IDirect3DDevice9::GetBackBuffer メソッド (d3d9.h) は、デバイスのスワップチェーンからバック バッファーを取得します。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
iBackBufferDWORDin返すバック バッファー オブジェクトのインデックスです。バック バッファーには 0 からバック バッファー総数から 1 を引いた値までの番号が付けられます。値 0 はフロント バッファーではなく最初のバック バッファーを返します。フロント バッファーにはこのメソッドではアクセスできません。フロント バッファーのコピーを取得するには IDirect3DDevice9::GetFrontBufferData を使用してください。
TypeD3DBACKBUFFER_TYPEinDirect3D 9 ではステレオ ビューはサポートされないため、このパラメーターに指定できる有効な値は D3DBACKBUFFER_TYPE_MONO のみです。
ppBackBufferIDirect3DSurface9**out返されるバック バッファー サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。BackBuffer がバック バッファーの総数以上の場合、この関数は失敗し D3DERR_INVALIDCALL を返します。

解説(Remarks)

このメソッドを呼び出すと、IDirect3DSurface9 インターフェイスの内部参照カウントが増加します。この IDirect3DSurface9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 19 HRESULT GetRasterStatus(DWORD iSwapChain, D3DRASTER_STATUS* pRasterStatus)

IDirect3DDevice9::GetRasterStatus メソッド (d3d9.h) は、スワップチェーンが表示されているモニターのラスターに関する情報を返します。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
pRasterStatusD3DRASTER_STATUS*inoutこのアダプターが駆動するモニター上のラスターの位置やその他の状態に関する情報が格納される D3DRASTER_STATUS 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。pRasterStatus が無効な場合、またはデバイスが現在のスキャン ラインの読み取りをサポートしていない場合は D3DERR_INVALIDCALL が返されます。デバイスがスキャン ラインの読み取りをサポートしているかどうかを判定するには、D3DCAPS9 の Caps メンバーに D3DCAPS_READ_SCANLINE フラグがあるかを確認してください。

vtbl 20 HRESULT SetDialogBoxMode(BOOL bEnableDialogs)

IDirect3DDevice9::SetDialogBoxMode メソッド (d3d9.h) は、フルスクリーン モードのアプリケーションで GDI ダイアログ ボックスを使用できるようにします。

bEnableDialogsBOOLinGDI ダイアログ ボックスを有効にする場合は TRUE、無効にする場合は FALSE です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。次のすべての条件を満たさない限り、メソッドは失敗し、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

GDI ダイアログ ボックスは、デバイス ウィンドウの子として作成する必要があります。また、親ウィンドウが子ウィンドウの再描画を管理できるようにするため、デバイスを作成したのと同じスレッド内で作成する必要があります。

このメソッドはウィンドウ モードのアプリケーションでは効果がありませんが、アプリケーションがデバイスをフルスクリーン モードにリセットした場合にはこの設定が適用されます。ウィンドウ モードのアプリケーションで SetDialogBoxMode が成功した場合、その後フルスクリーン モードへリセットする際に上記の制約が検査されます。また、SetDialogBoxMode を呼び出すとスワップチェーン上のすべてのバック バッファーが破棄されるため、アプリケーションはこの呼び出しの後にすべてのバック バッファーの内容を再描画する必要があります。

vtbl 21 void SetGammaRamp(DWORD iSwapChain, DWORD Flags, D3DGAMMARAMP* pRamp)

IDirect3DDevice9::SetGammaRamp メソッド (d3d9.h) は、暗黙のスワップチェーンに対するガンマ補正ランプを設定します。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
FlagsDWORDin

補正を適用するかどうかを示します。ガンマ補正を行うと表示の一貫性が高まりますが、処理オーバーヘッドが発生する可能性があるため、頻繁に使用すべきではありません。画面全体を赤く点滅させるような短時間のエフェクトはキャリブレーションすべきではありませんが、長時間にわたるガンマ変更はキャリブレーションすべきです。次のいずれかの値を設定できます。

項目 説明
D3DSGR_CALIBRATE ガンマ キャリブレーターがインストールされている場合、システムおよびモニターの応答曲線を考慮して、ランプはデバイスへ送られる前に修正されます。キャリブレーターがインストールされていない場合、ランプはそのままデバイスへ渡されます。
D3DSGR_NO_CALIBRATION ガンマ補正は適用されません。指定されたガンマ テーブルがそのままデバイスへ転送されます。
pRampD3DGAMMARAMP*in暗黙のスワップチェーンに設定するガンマ補正ランプを表す D3DGAMMARAMP 構造体へのポインターです。

解説(Remarks)

Direct3D 9 ではスワップチェーンがデバイスのプロパティとして 1 つ用意されているため、各デバイスには常に少なくとも 1 つのスワップチェーン (暗黙のスワップチェーン) が存在します。ガンマ ランプは直ちに反映され、垂直同期を待つことはありません。

スワップチェーンの現在のプレゼンテーション モード (フルスクリーンまたはウィンドウ) でデバイスがガンマ ランプをサポートしていない場合でも、エラーは返されません。アプリケーションは D3DCAPS9 構造体の Caps2 メンバーにある D3DCAPS2_FULLSCREENGAMMA および D3DCAPS2_CANCALIBRATEGAMMA の機能ビットを確認することで、デバイスの機能とキャリブレーターがインストールされているかどうかを判定できます。

ウィンドウ モードでのガンマ補正されたプレゼンテーションには、ハードウェアがこの機能をサポートしている場合、IDirect3DSwapChain9::Present を使用してください。DirectX 8 では、SetGammaRamp はフルスクリーン モードのアプリケーションでのみガンマ ランプを設定します。ガンマ補正の詳細については、Gamma (Direct3D 9) を参照してください。

vtbl 22 void GetGammaRamp(DWORD iSwapChain, D3DGAMMARAMP* pRamp)

IDirect3DDevice9::GetGammaRamp メソッド (d3d9.h) は、スワップチェーンのガンマ補正ランプを取得します。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
pRampD3DGAMMARAMP*inoutガンマ補正ランプが格納される、アプリケーションが用意した D3DGAMMARAMP 構造体へのポインターです。
vtbl 23 HRESULT CreateTexture(DWORD Width, DWORD Height, DWORD Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DTexture9** ppTexture, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateTexture メソッド (d3d9.h) は、テクスチャ リソースを作成します。

WidthDWORDinテクスチャの最上位レベルの幅 (ピクセル単位) です。以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 になる場合は代わりに 1 が使用されます。
HeightDWORDinテクスチャの最上位レベルの高さ (ピクセル単位) です。以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 になる場合は代わりに 1 が使用されます。
LevelsDWORDinテクスチャのレベル数です。これが 0 の場合、ミップマップ テクスチャをサポートするハードウェアでは、Direct3D が 1x1 ピクセルまでのすべてのテクスチャ サブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。
UsageDWORDinUsage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。usage パラメーターは IDirect3D9::CreateDevice の動作フラグと一致させることが推奨されます。
FormatD3DFORMATinテクスチャのすべてのレベルの形式を記述する D3DFORMAT 列挙型のメンバーです。
PoolD3DPOOLinテクスチャを配置するメモリ クラスを記述する D3DPOOL 列挙型のメンバーです。
ppTextureIDirect3DTexture9**out作成されたテクスチャ リソースを表す IDirect3DTexture9 インターフェイスへのポインターです。
pSharedHandleHANDLE*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 でシステム メモリ ポインターを使用する場合、次の制約があります。

vtbl 24 HRESULT CreateVolumeTexture(DWORD Width, DWORD Height, DWORD Depth, DWORD Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DVolumeTexture9** ppVolumeTexture, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateVolumeTexture メソッド (d3d9.h) は、ボリューム テクスチャ リソースを作成します。

WidthDWORDinボリューム テクスチャの最上位レベルの幅 (ピクセル単位) です。D3DCAPS9D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 (ゼロ) になる場合は代わりに 1 が使用されます。ドライバーがサポートする最大寸法 (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
HeightDWORDinボリューム テクスチャの最上位レベルの高さ (ピクセル単位) です。D3DCAPS9D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 (ゼロ) になる場合は代わりに 1 が使用されます。ドライバーがサポートする最大寸法 (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
DepthDWORDinボリューム テクスチャの最上位レベルの深度 (ピクセル単位) です。D3DCAPS9D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 (ゼロ) になる場合は代わりに 1 が使用されます。ドライバーがサポートする最大寸法 (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
LevelsDWORDinテクスチャのレベル数です。これが 0 の場合、ミップマップ ボリューム テクスチャをサポートするハードウェアでは、Direct3D が 1x1 ピクセルまでのすべてのテクスチャ サブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。
UsageDWORDinUsage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、D3DUSAGE_DYNAMIC または D3DUSAGE_SOFTWAREPROCESSING を使用します。詳細については、D3DUSAGE を参照してください。
FormatD3DFORMATinボリューム テクスチャのすべてのレベルの形式を記述する D3DFORMAT 列挙型のメンバーです。
PoolD3DPOOLinボリューム テクスチャを配置するメモリ クラスを記述する D3DPOOL 列挙型のメンバーです。
ppVolumeTextureIDirect3DVolumeTexture9**out作成されたボリューム テクスチャ リソースを表す IDirect3DVolumeTexture9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*inout予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

vtbl 25 HRESULT CreateCubeTexture(DWORD EdgeLength, DWORD Levels, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DCubeTexture9** ppCubeTexture, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateCubeTexture メソッド (d3d9.h) は、キューブ テクスチャ リソースを作成します。

EdgeLengthDWORDinキューブ テクスチャの最上位レベルにおける、すべての面の辺のサイズです。各面の以降のレベルのピクセル寸法は、直前のレベルのピクセル寸法の半分を切り捨てた値になります (各次元で独立に計算されます)。各次元は最小 1 ピクセルでクランプされます。したがって、2 で除算した結果が 0 (ゼロ) になる場合は代わりに 1 が使用されます。
LevelsDWORDinキューブ テクスチャの各面におけるレベル数です。これが 0 の場合、ミップマップ キューブ テクスチャをサポートするハードウェアでは、Direct3D が各面について 1x1 ピクセルまでのすべてのキューブ テクスチャ サブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。
UsageDWORDinUsage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateCubeTexture の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと一致させることが推奨されます。詳細については「解説」を参照してください。
FormatD3DFORMATinキューブ テクスチャのすべての面のすべてのレベルの形式を記述する D3DFORMAT 列挙型のメンバーです。
PoolD3DPOOLinキューブ テクスチャを配置するメモリ クラスを記述する D3DPOOL 列挙型のメンバーです。
ppCubeTextureIDirect3DCubeTexture9**out作成されたキューブ テクスチャ リソースを表す IDirect3DCubeTexture9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*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 つだけのテクスチャを返します。

vtbl 26 HRESULT CreateVertexBuffer(DWORD Length, DWORD Usage, DWORD FVF, D3DPOOL Pool, IDirect3DVertexBuffer9** ppVertexBuffer, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateVertexBuffer メソッド (d3d9.h) は、頂点バッファーを作成します。

LengthDWORDin頂点バッファーのサイズ (バイト単位) です。FVF 頂点バッファーの場合、Length は少なくとも 1 頂点を格納できる大きさである必要がありますが、頂点サイズの倍数である必要はありません。非 FVF バッファーでは Length は検証されません。「解説」を参照してください。
UsageDWORDinUsage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateVertexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと一致させることが推奨されます。詳細については「解説」を参照してください。
FVFDWORDinこのバッファー内の頂点の頂点フォーマットを記述する用途指定子である D3DFVF の組み合わせです。このパラメーターに有効な FVF コードを設定した場合、作成される頂点バッファーは FVF 頂点バッファーになります (「解説」を参照)。一方、このパラメーターを 0 に設定した場合、頂点バッファーは非 FVF 頂点バッファーになります。
PoolD3DPOOLinリソースを配置する有効なメモリ クラスを記述する D3DPOOL 列挙型のメンバーです。D3DPOOL_SCRATCH は設定しないでください。
ppVertexBufferIDirect3DVertexBuffer9**out作成された頂点バッファー リソースを表す IDirect3DVertexBuffer9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*inout予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

解説(Remarks)

頂点バッファーは、ハードウェア頂点処理とソフトウェア頂点処理のいずれでも使用できます。どちらになるかは、デバイスと頂点バッファーの作成方法によって決まります。

デバイスの作成時、CreateDevice は動作フラグを用いて頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。次の 3 つの選択肢があります。

混合モードのデバイスでは、デバイスの作成後に (IDirect3DDevice9::SetSoftwareVertexProcessing を使用して) ソフトウェア処理とハードウェア処理を切り替える必要が生じる場合があります。

頂点バッファーの作成時、CreateVertexBuffer は usage パラメーターを用いて頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。

混合モードのデバイスで頂点バッファーを使用するには、ハードウェア処理とソフトウェア処理の両方に使用できる単一の頂点バッファーを作成します。IDirect3DDevice9::SetStreamSource を使用して現在の頂点バッファーを設定し、必要に応じて IDirect3DDevice9::SetRenderState を使用してデバイスの動作を対応するように変更します。頂点バッファーの用途はデバイスの動作と一致させることが推奨されます。なお、ソフトウェア処理用に作成された頂点バッファーをビデオ メモリに配置することはできません。

IDirect3DDevice9 インターフェイスは、頂点バッファー オブジェクトに格納された頂点データを使用したプリミティブのレンダリングをサポートします。頂点バッファーは IDirect3DDevice9 から作成され、それを作成した IDirect3DDevice9 オブジェクトでのみ使用できます。

FVF パラメーターに 0 以外の値 (有効な FVF コードでなければなりません) を設定すると、バッファーの内容が FVF コードによって特徴付けられることを示します。FVF コードを指定して作成された頂点バッファーは、FVF 頂点バッファーと呼ばれます。詳細については、FVF Vertex Buffers (Direct3D 9) を参照してください。

非 FVF バッファーは、マルチパス レンダリングや、単一パスでのマルチテクスチャ レンダリングの際にデータをインターリーブするために使用できます。この場合、1 つのバッファーにジオメトリ データを格納し、他のバッファーにレンダリング対象の各テクスチャのテクスチャ座標を格納します。レンダリング時には、ジオメトリ データを含むバッファーが、テクスチャ座標を含む各バッファーとインターリーブされます。代わりに FVF バッファーを使用した場合、各バッファーにはレンダリングされるテクスチャごとのテクスチャ座標データに加えて、同一のジオメトリ データを含める必要が生じます。これは、採用する方式に応じて速度またはメモリのいずれかの面で不利になります。テクスチャ座標の詳細については、Texture Coordinates (Direct3D 9) を参照してください。

vtbl 27 HRESULT CreateIndexBuffer(DWORD Length, DWORD Usage, D3DFORMAT Format, D3DPOOL Pool, IDirect3DIndexBuffer9** ppIndexBuffer, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateIndexBuffer メソッド (d3d9.h) は、インデックス バッファーを作成します。

LengthDWORDinインデックス バッファーのサイズ (バイト単位) です。
UsageDWORDinUsage には 0 を指定でき、これは用途 (usage) の値がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateIndexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと一致させることが推奨されます。詳細については「解説」を参照してください。
FormatD3DFORMATin

インデックス バッファーの形式を記述する D3DFORMAT 列挙型のメンバーです。詳細については「解説」を参照してください。有効な設定は次のとおりです。

項目 説明
D3DFMT_INDEX16 各インデックスは 16 ビットです。
D3DFMT_INDEX32 各インデックスは 32 ビットです。
PoolD3DPOOLinリソースを配置する有効なメモリ クラスを記述する D3DPOOL 列挙型のメンバーです。
ppIndexBufferIDirect3DIndexBuffer9**out作成されたインデックス バッファー リソースを表す IDirect3DIndexBuffer9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*inoutWindows 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 メンバーは、レンダリングに使用できるインデックス バッファーの種類を示します。

vtbl 28 HRESULT CreateRenderTarget(DWORD Width, DWORD Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Lockable, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateRenderTarget メソッド (d3d9.h) は、レンダーターゲット サーフェスを作成します。

WidthDWORDinレンダーターゲット サーフェスの幅 (ピクセル単位) です。
HeightDWORDinレンダーターゲット サーフェスの高さ (ピクセル単位) です。
FormatD3DFORMATinレンダーターゲットの形式を記述する D3DFORMAT 列挙型のメンバーです。
MultiSampleD3DMULTISAMPLE_TYPEinマルチサンプリング バッファーの種類を記述する D3DMULTISAMPLE_TYPE 列挙型のメンバーです。このパラメーターは、このレンダーターゲットのアンチエイリアシングの種類を指定します。このサーフェスを IDirect3DDevice9::SetRenderTarget に渡す場合、そのマルチサンプル タイプは IDirect3DDevice9::SetDepthStencilSurface で設定される深度ステンシルのものと同じでなければなりません。
MultisampleQualityDWORDin品質レベルです。有効な範囲は、0 から IDirect3D9::CheckDeviceMultiSampleType で使用される pQualityLevels が返すレベルから 1 を引いた値までです。これより大きい値を渡すと、エラー D3DERR_INVALIDCALL が返されます。対となるレンダーターゲットと深度ステンシル サーフェスの MultisampleQuality の値、およびマルチサンプル タイプは、すべて一致していなければなりません。
LockableBOOLin

アプリケーションが Lockable に TRUE を指定しない限り、レンダーターゲットはロックできません。

なお、ロック可能なレンダーターゲットは、一部のグラフィックス ハードウェアでパフォーマンスを低下させます。読み戻し (ビデオ メモリからシステム メモリへのデータ転送) の性能は使用するハードウェアの種類 (AGP か PCI Express か) に依存し、通常はアップロード (システム メモリからビデオ メモリへのデータ転送) の性能よりはるかに低くなります。レンダーターゲットへの読み取りアクセスが必要な場合は、ロック可能なレンダーターゲットではなく GetRenderTargetData を使用してください。

ppSurfaceIDirect3DSurface9**outIDirect3DSurface9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*inout予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

解説(Remarks)

レンダーターゲット サーフェスは D3DPOOL_DEFAULT メモリ クラスに配置されます。

ロック可能でマルチサンプリングされたレンダーターゲットの作成はサポートされていません。

vtbl 29 HRESULT CreateDepthStencilSurface(DWORD Width, DWORD Height, D3DFORMAT Format, D3DMULTISAMPLE_TYPE MultiSample, DWORD MultisampleQuality, BOOL Discard, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateDepthStencilSurface メソッド (d3d9.h) は、深度ステンシル リソースを作成します。

WidthDWORDin深度ステンシル サーフェスの幅 (ピクセル単位) です。
HeightDWORDin深度ステンシル サーフェスの高さ (ピクセル単位) です。
FormatD3DFORMATin深度ステンシル サーフェスの形式を記述する D3DFORMAT 列挙型のメンバーです。この値は、このデバイスで列挙される深度ステンシル形式のいずれかでなければなりません。
MultiSampleD3DMULTISAMPLE_TYPEinマルチサンプリング バッファーの種類を記述する D3DMULTISAMPLE_TYPE 列挙型のメンバーです。この値は、許可されているマルチサンプル タイプのいずれかでなければなりません。このサーフェスを IDirect3DDevice9::SetDepthStencilSurface に渡す場合、そのマルチサンプル タイプは IDirect3DDevice9::SetRenderTarget で設定されるレンダーターゲットのものと同じでなければなりません。
MultisampleQualityDWORDin品質レベルです。有効な範囲は、0 から IDirect3D9::CheckDeviceMultiSampleType で使用される pQualityLevels が返すレベルから 1 を引いた値までです。これより大きい値を渡すと、エラー D3DERR_INVALIDCALL が返されます。対となるレンダーターゲットと深度ステンシル サーフェスの MultisampleQuality の値、および MultiSample タイプは、すべて一致していなければなりません。
DiscardBOOLin

Z バッファーの破棄を有効にする場合はこのフラグを TRUE に、そうでない場合は FALSE に設定します。 このフラグを設定すると、IDirect3DDevice9::Present を呼び出した後、または別の深度サーフェスを指定して IDirect3DDevice9::SetDepthStencilSurface を呼び出した後、深度ステンシル バッファーの内容は無効になります。

このフラグは、D3DPRESENTFLAG の定数 D3DPRESENTFLAG_DISCARD_DEPTHSTENCIL と同じ動作をします。

ppSurfaceIDirect3DSurface9**out作成された深度ステンシル サーフェス リソースを表す IDirect3DSurface9 インターフェイスへのポインターのアドレスです。
pSharedHandleHANDLE*inout予約済みです。このパラメーターには NULL を設定してください。Windows Vista 向けの Direct3D 9 では、このパラメーターをリソースの共有に使用できます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_NOTAVAILABLE、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

解説(Remarks)

深度ステンシル バッファーのメモリ クラスは常に D3DPOOL_DEFAULT です。

vtbl 30 HRESULT UpdateSurface(IDirect3DSurface9* pSourceSurface, RECT* pSourceRect, IDirect3DSurface9* pDestinationSurface, POINT* pDestPoint)

IDirect3DDevice9::UpdateSurface メソッド (d3d9.h) は、あるサーフェスから別のサーフェスへ、矩形状のピクセルの部分領域をコピーします。

pSourceSurfaceIDirect3DSurface9*inコピー元サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターです。このパラメーターは、pDestinationSurface とは異なるサーフェスを指す必要があります。
pSourceRectRECT*inコピー元サーフェス上の矩形へのポインターです。このパラメーターに NULL を指定すると、サーフェス全体がコピーされます。
pDestinationSurfaceIDirect3DSurface9*inコピー先サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターです。
pDestPointPOINT*inコピー先矩形の左上隅へのポインターです。このパラメーターに NULL を指定すると、サーフェス全体がコピーされます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL。

解説(Remarks)

このメソッドは、DirectX 8 の CopyRects に相当します。

この関数には次の制約があります。

次の表に、サポートされる組み合わせを示します。
コピー先の形式
テクスチャ RT テクスチャ RT オフスクリーン プレーン
コピー元の形式 テクスチャ 可*
RT テクスチャ 不可 不可 不可 不可
RT 不可 不可 不可 不可
オフスクリーン プレーン

アプリケーションが D3DPOOL_DEFAULT のレンダーターゲットから D3DPOOL_SYSTEMMEM のサーフェスへデータをコピーする必要がある場合は、GetRenderTargetData を使用できます。

vtbl 31 HRESULT UpdateTexture(IDirect3DBaseTexture9* pSourceTexture, IDirect3DBaseTexture9* pDestinationTexture)

IDirect3DDevice9::UpdateTexture メソッド (d3d9.h) は、テクスチャのダーティ (更新済み) 領域を更新します。

pSourceTextureIDirect3DBaseTexture9*inコピー元テクスチャを表す IDirect3DBaseTexture9 インターフェイスへのポインターです。コピー元テクスチャはシステム メモリ (D3DPOOL_SYSTEMMEM) 上になければなりません。
pDestinationTextureIDirect3DBaseTexture9*inコピー先テクスチャを表す IDirect3DBaseTexture9 インターフェイスへのポインターです。コピー先テクスチャは D3DPOOL_DEFAULT メモリ プールになければなりません。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

テクスチャの一部をダーティ状態にするには、テクスチャをロックするか、次のいずれかのメソッドを呼び出します。

IDirect3DDevice9::UpdateTexture は、前回の更新操作以降に蓄積された変更を算出することで、テクスチャのダーティ領域を取得します。

パフォーマンス上の理由から、ダーティ領域はテクスチャのレベル 0 に対してのみ記録されます。サブレベルについては、対応する (スケーリングされた) 矩形またはボックスも同様にダーティであると見なされます。ダーティ領域は、D3DLOCK_NO_DIRTY_UPDATED3DLOCK_READONLY を指定せずに LockRect または IDirect3DVolumeTexture9::LockBox を呼び出した際に自動的に記録されます。また、IDirect3DDevice9::UpdateSurface のコピー先サーフェスもダーティとしてマークされます。

テクスチャの種類が異なる場合、最下位レベルのバッファーのサイズが異なる場合、または対応するレベルが一致しない場合、このメソッドは失敗します。たとえば、次の寸法を持つ 6 レベルのコピー元テクスチャを考えます。


32x16, 16x8, 8x4, 4x2, 2x1, 1x1

この 6 レベルのコピー元テクスチャは、次の 1 レベルのコピー先に対するコピー元になり得ます。


1x1

また、次の 2 レベルのコピー先に対しても同様です。


2x1, 1x1

さらに、次の 3 レベルのコピー先に対しても同様です。


4x2, 2x1, 1x1

さらに、テクスチャの形式が異なる場合もこのメソッドは失敗します。コピー先テクスチャのレベル数がコピー元より少ない場合は、対応するレベルのみがコピーされます。コピー元テクスチャのレベル数がコピー先より少ない場合、このメソッドは失敗します。

コピー元テクスチャにダーティ領域がある場合、その領域のみにコピーを限定することで処理を最適化できます。ただし、ダーティとマークされたバイトのみがコピーされることは保証されません。

コピー元とコピー先のサーフェスの組み合わせには、次の可能性があります。

vtbl 32 HRESULT GetRenderTargetData(IDirect3DSurface9* pRenderTarget, IDirect3DSurface9* pDestSurface)

IDirect3DDevice9::GetRenderTargetData メソッド (d3d9.h) は、レンダーターゲットのデータをデバイス メモリからシステム メモリへコピーします。

pRenderTargetIDirect3DSurface9*inレンダーターゲットを表す IDirect3DSurface9 オブジェクトへのポインターです。
pDestSurfaceIDirect3DSurface9*inコピー先サーフェスを表す IDirect3DSurface9 オブジェクトへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DRIVERINTERNALERROR、D3DERR_DEVICELOST、D3DERR_INVALIDCALL。

解説(Remarks)

コピー先サーフェスは、オフスクリーン プレーン サーフェスであるか、D3DPOOL_SYSTEMMEM で作成されたテクスチャ (ミップマップまたはキューブ テクスチャ) のレベルでなければなりません。

コピー元サーフェスは、通常のレンダーターゲットであるか、POOL_DEFAULT で作成されたレンダーターゲット テクスチャ (ミップマップまたはキューブ テクスチャ) のレベルでなければなりません。

次の場合、このメソッドは失敗します。

vtbl 33 HRESULT GetFrontBufferData(DWORD iSwapChain, IDirect3DSurface9* pDestSurface)

IDirect3DDevice9::GetFrontBufferData メソッド (d3d9.h) は、デバイスのフロント バッファーを、アプリケーションが用意したシステム メモリ バッファーへコピーします。

iSwapChainDWORDinスワップチェーンを指定する符号なし整数です。
pDestSurfaceIDirect3DSurface9*in

フロント バッファーの内容のコピーを受け取る IDirect3DSurface9 インターフェイスへのポインターです。データは、デバイスの出力上で垂直方向に最も上の行から最も下の行へ向かって、行間に余分な間隔を挟まず連続した行として返されます。

ウィンドウ モードの場合、コピー先サーフェスのサイズはデスクトップのサイズにする必要があります。フルスクリーン モードの場合、コピー先サーフェスのサイズは画面サイズにする必要があります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DRIVERINTERNALERROR、D3DERR_DEVICELOST、D3DERR_INVALIDCALL

解説(Remarks)

pDestSurface が指すバッファーには、標準的な 32 ビット/ピクセル形式である D3DFMT_A8R8G8B8 に変換されたフロント バッファーの内容が格納されます。

アンチエイリアシングされたスクリーン ショットを取得する方法は、このメソッドのみです。

この関数は設計上非常に低速であり、パフォーマンスが重要な処理経路では使用すべきではありません。

詳細については、Lost Devices and Retrieved Data を参照してください。

vtbl 34 HRESULT StretchRect(IDirect3DSurface9* pSourceSurface, RECT* pSourceRect, IDirect3DSurface9* pDestSurface, RECT* pDestRect, D3DTEXTUREFILTERTYPE Filter)

IDirect3DDevice9::StretchRect メソッド (d3d9helper.h) は、コピー元矩形の内容をコピー先矩形へコピーします。コピーの際に、コピー元を拡大縮小したりフィルタリングしたりできます。

pSourceSurfaceIDirect3DSurface9*inコピー元サーフェスへのポインターです。IDirect3DSurface9 を参照してください。
pSourceRectRECT*inコピー元矩形へのポインターです。このパラメーターに NULL を指定すると、コピー元サーフェス全体が使用されます。
pDestSurfaceIDirect3DSurface9*inコピー先サーフェスへのポインターです。IDirect3DSurface9 を参照してください。
pDestRectRECT*inコピー先矩形へのポインターです。このパラメーターに NULL を指定すると、コピー先サーフェス全体が使用されます。
FilterD3DTEXTUREFILTERTYPEinフィルターの種類です。指定できる値は D3DTEXF_NONED3DTEXF_POINTD3DTEXF_LINEAR です。詳細については、D3DTEXTUREFILTERTYPE を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

StretchRect の制約

深度サーフェスおよびステンシル サーフェスに関する追加の制約 StretchRect を使用したマルチサンプル レンダーターゲットのダウンサンプリング

StretchRect を使用して、あるレンダーターゲットから別のレンダーターゲットへコピーできます。コピー元のレンダーターゲットがマルチサンプリングされている場合、結果としてコピー元レンダーターゲットがダウンサンプリングされます。たとえば、次のようにします。

なお、StretchRect によるマルチサンプル レンダーターゲットのダウンサンプリングで追加のサーフェスを使用すると、パフォーマンスが低下します。

ドライバーのサポート

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 不可 不可
オフスクリーン プレーン 不可 不可
vtbl 35 HRESULT ColorFill(IDirect3DSurface9* pSurface, RECT* pRect, DWORD color)

IDirect3DDevice9::ColorFill メソッド (d3d9.h) は、D3DPOOL_DEFAULT のサーフェスの矩形領域を指定した色で塗りつぶすことをアプリケーションに許可します。

pSurfaceIDirect3DSurface9*in塗りつぶす対象のサーフェスへのポインターです。
pRectRECT*inコピー元矩形へのポインターです。NULL を指定すると、サーフェス全体が塗りつぶされます。
colorDWORDin塗りつぶしに使用する色です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

このメソッドは、レンダーターゲット、レンダーターゲット テクスチャ サーフェス、またはプール タイプが D3DPOOL_DEFAULT のオフスクリーン プレーン サーフェスに対してのみ適用できます。

IDirect3DDevice9::ColorFill はすべての形式で動作します。ただし、リファレンス デバイスまたはソフトウェア デバイスを使用する場合、サポートされる形式は D3DFMT_X1R5G5B5D3DFMT_A1R5G5B5D3DFMT_R5G6B5D3DFMT_X8R8G8B8D3DFMT_A8R8G8B8D3DFMT_YUY2D3DFMT_G8R8_G8B8D3DFMT_UYVYD3DFMT_R8G8_B8G8D3DFMT_R16FD3DFMT_G16R16FD3DFMT_A16B16G16R16FD3DFMT_R32FD3DFMT_G32R32F、および D3DFMT_A32B32G32R32F のみです。

DirectX 7 または DirectX 8.x のドライバーを使用する場合、サポートされる YUV 形式は D3DFMT_UYVYD3DFMT_YUY2 のみです。

vtbl 36 HRESULT CreateOffscreenPlainSurface(DWORD Width, DWORD Height, D3DFORMAT Format, D3DPOOL Pool, IDirect3DSurface9** ppSurface, HANDLE* pSharedHandle)

IDirect3DDevice9::CreateOffscreenPlainSurface メソッド (d3d9.h) は、オフスクリーン サーフェスを作成します。

WidthDWORDinサーフェスの幅です。
HeightDWORDinサーフェスの高さです。
FormatD3DFORMATinサーフェスの形式です。D3DFORMAT を参照してください。
PoolD3DPOOLinサーフェスのプール タイプです。D3DPOOL を参照してください。
ppSurfaceIDirect3DSurface9**out作成された IDirect3DSurface9 インターフェイスへのポインターです。
pSharedHandleHANDLE*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 を参照してください。

オフスクリーン プレーン サーフェスは、プール タイプにかかわらず常にロック可能です。

vtbl 37 HRESULT SetRenderTarget(DWORD RenderTargetIndex, IDirect3DSurface9* pRenderTarget)

IDirect3DDevice9::SetRenderTarget メソッド (d3d9helper.h) は、デバイスに新しいカラー バッファーを設定します。

RenderTargetIndexDWORDinレンダーターゲットのインデックスです。「解説」を参照してください。
pRenderTargetIDirect3DSurface9*in新しいカラー バッファーへのポインターです。NULL の場合、対応する RenderTargetIndex のカラー バッファーが無効化されます。デバイスには常にカラー バッファーが関連付けられている必要があります。 新しいレンダーターゲット サーフェスには、少なくとも D3DUSAGE_RENDERTARGET が指定されている必要があります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 次のいずれかの場合、このメソッドは D3DERR_INVALIDCALL を返します。

解説(Remarks)

デバイスは複数のレンダーターゲットをサポートできます。デバイスがサポートするレンダーターゲットの数は、D3DCAPS9 の NumSimultaneousRTs メンバーに格納されています。Multiple Render Targets (Direct3D 9) を参照してください。

新しいレンダーターゲットを設定すると、ビューポート (Viewports and Clipping (Direct3D 9) を参照) は新しいレンダーターゲットの全体サイズに設定されます。

一部のハードウェアは、深度ステンシル バッファーとカラー バッファーの互換性を検査します。この検査が行われる場合でも、デバッグ ビルドでのみ実施されます。

このメソッドの使用には次の制約があります。

これらの制約は、デバッグ ランタイムを使用している場合に、IDirect3DDevice9 の Draw 系メソッドのいずれかが呼び出された際にのみ検証されます。

キューブ テクスチャは、サーフェスの集合であるという点で他のサーフェスとは異なります。キューブ テクスチャを指定して IDirect3DDevice9::SetRenderTarget を呼び出すには、IDirect3DCubeTexture9::GetCubeMapSurface を使用して個々の面を選択し、得られたサーフェスを IDirect3DDevice9::SetRenderTarget に渡す必要があります。

vtbl 38 HRESULT GetRenderTarget(DWORD RenderTargetIndex, IDirect3DSurface9** ppRenderTarget)

IDirect3DDevice9::GetRenderTarget メソッド (d3d9.h) は、レンダーターゲット サーフェスを取得します。

RenderTargetIndexDWORDinレンダーターゲットのインデックスです。「解説」を参照してください。
ppRenderTargetIDirect3DSurface9**outこのデバイスについて返されるレンダーターゲット サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、引数のいずれかが無効であれば D3DERR_INVALIDCALL、指定されたインデックスに利用可能なレンダーターゲットが存在しなければ D3DERR_NOTFOUND が返されます。

解説(Remarks)

通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは動作しません。ただし、このメソッドはインターフェイスを返すため、ピュア デバイスでも動作します。

デバイスは複数のレンダーターゲットをサポートできるようになりました。デバイスがサポートするレンダーターゲットの数は、D3DCAPS9 の NumSimultaneousRTs メンバーに格納されています。Multiple Render Targets (Direct3D 9) を参照してください。

このメソッドを呼び出すと、IDirect3DSurface9 インターフェイスの内部参照カウントが増加します。この IDirect3DSurface9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 39 HRESULT SetDepthStencilSurface(IDirect3DSurface9* pNewZStencil)

IDirect3DDevice9::SetDepthStencilSurface メソッド (d3d9.h) は、深度ステンシル サーフェスを設定します。

pNewZStencilIDirect3DSurface9*in深度ステンシル サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターのアドレスです。これを NULL に設定すると、深度ステンシル操作が無効になります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 pZStencilSurface が NULL 以外の場合、ステンシル サーフェスが無効であれば戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドの使用には次の制約があります。

これらの制約は、デバッグ ランタイムを使用している場合に、IDirect3DDevice9 の Draw 系メソッドのいずれかが呼び出された際にのみ検証されます。

キューブ テクスチャは、サーフェスの集合であるという点で他のサーフェスとは異なります。キューブ テクスチャを指定して IDirect3DDevice9::SetDepthStencilSurface を呼び出すには、IDirect3DCubeTexture9::GetCubeMapSurface を使用して個々の面を選択し、得られたサーフェスを IDirect3DDevice9::SetDepthStencilSurface に渡す必要があります。

vtbl 40 HRESULT GetDepthStencilSurface(IDirect3DSurface9** ppZStencilSurface)

IDirect3DDevice9::GetDepthStencilSurface メソッド (d3d9.h) は、Direct3DDevice オブジェクトが所有する深度ステンシル サーフェスを取得します。

ppZStencilSurfaceIDirect3DSurface9**out返される深度ステンシル サーフェスを表す IDirect3DSurface9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。デバイスに深度ステンシル バッファーが関連付けられていない場合、戻り値は D3DERR_NOTFOUND になります。それ以外でメソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドを呼び出すと、IDirect3DSurface9 インターフェイスの内部参照カウントが増加します。この IDirect3DSurface9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 41 HRESULT BeginScene()

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 を呼び出すことが有利です。

vtbl 42 HRESULT 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 を呼び出すことが有利です。

vtbl 43 HRESULT Clear(DWORD Count, D3DRECT* pRects, DWORD Flags, DWORD Color, FLOAT Z, DWORD Stencil)

IDirect3DDevice9::Clear メソッド (d3d9.h) は、レンダーターゲット、複数のレンダーターゲット、ステンシル バッファー、深度バッファーなど、1 つ以上のサーフェスをクリアします。

CountDWORDinpRects が指す配列内の矩形の数です。pRects が NULL の場合は 0 に設定する必要があります。pRects が有効なポインターの場合、0 にすることはできません。
pRectsD3DRECT*inクリアする矩形を記述する D3DRECT 構造体の配列へのポインターです。サーフェス全体をクリアするには、矩形をレンダリング ターゲットの寸法に設定します。各矩形は、レンダーターゲット上の点に対応するスクリーン座標を使用します。座標はビューポート矩形の境界にクリップされます。ビューポート矩形全体をクリアすることを示すには、このパラメーターを NULL に、Count を 0 に設定します。
FlagsDWORDinクリアするサーフェスを指定する、1 つ以上の D3DCLEAR フラグの組み合わせです。
ColorDWORDinレンダーターゲットをこの ARGB 色でクリアします。
ZFLOATin深度バッファーを、0 から 1 の範囲を取るこの新しい z 値でクリアします。「解説」を参照してください。
StencilDWORDinステンシル バッファーを、0 から 2ⁿ-1 (n はステンシル バッファーのビット深度) の範囲を取るこの新しい値でクリアします。「解説」を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

このメソッドは、レンダーターゲット、MRT 内のすべてのレンダーターゲット、ステンシル バッファー、深度バッファーなどのサーフェスをクリアするために使用します。クリアされるサーフェスの数は Flags によって決まります。矩形の配列で定義されるサーフェスの一部分をクリアするには、pRects を使用します。

次の場合、IDirect3DDevice9::Clear は失敗します。

vtbl 44 HRESULT SetTransform(D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix)

IDirect3DDevice9::SetTransform メソッド (d3d9helper.h) は、デバイスの変換に関する単一の状態を設定します。

StateD3DTRANSFORMSTATETYPEin変更対象のデバイス状態変数です。このパラメーターには、D3DTRANSFORMSTATETYPE 列挙型の任意のメンバー、または D3DTS_WORLDMATRIX マクロを指定できます。
pMatrixD3DMATRIX*in現在の変換を変更する D3DMATRIX 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL が返されます。

vtbl 45 HRESULT GetTransform(D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix)

IDirect3DDevice9::GetTransform メソッド (d3d9.h) は、変換状態を記述する行列を取得します。

StateD3DTRANSFORMSTATETYPEin変更対象のデバイス状態変数です。このパラメーターには、D3DTRANSFORMSTATETYPE 列挙型の任意のメンバー、または D3DTS_WORLDMATRIX マクロを指定できます。
pMatrixD3DMATRIX*inout返される変換状態を記述する D3DMATRIX 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL となります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他のフラグ値のいずれかを指定してデバイスを作成する必要があります。

vtbl 46 HRESULT MultiplyTransform(D3DTRANSFORMSTATETYPE param0, D3DMATRIX* param1)

IDirect3DDevice9::MultiplyTransform メソッド (d3d9.h) は、デバイスのワールド行列、ビュー行列、または射影行列に、指定した行列を乗算します。

param0D3DTRANSFORMSTATETYPEin対象とする変換行列の種類を示すD3DTRANSFORMSTATETYPE。
param1D3DMATRIX*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)
vtbl 47 HRESULT SetViewport(D3DVIEWPORT9* pViewport)

IDirect3DDevice9::SetViewport メソッド (d3d9helper.h) は、デバイスのビューポート パラメーターを設定します。

pViewportD3DVIEWPORT9*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 の呼び出しとジオメトリの描画を繰り返します。

vtbl 48 HRESULT GetViewport(D3DVIEWPORT9* pViewport)

IDirect3DDevice9::GetViewport メソッド (d3d9.h) は、デバイスに現在設定されているビューポート パラメーターを取得します。

pViewportD3DVIEWPORT9*inout返されるビューポート パラメーターを表す D3DVIEWPORT9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。pViewport パラメーターが無効な場合は D3DERR_INVALIDCALL が返されます。

解説(Remarks)

通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは動作しません。ただし、このメソッドはピュア デバイスでも動作します。

vtbl 49 HRESULT SetMaterial(D3DMATERIAL9* pMaterial)

IDirect3DDevice9::SetMaterial メソッド (d3d9.h) は、デバイスのマテリアル プロパティを設定します。

pMaterialD3DMATERIAL9*in設定するマテリアル プロパティを記述する D3DMATERIAL9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。pMaterial パラメーターが無効な場合は D3DERR_INVALIDCALL となります。

vtbl 50 HRESULT GetMaterial(D3DMATERIAL9* pMaterial)

IDirect3DDevice9::GetMaterial メソッド (d3d9.h) は、デバイスの現在のマテリアル プロパティを取得します。

pMaterialD3DMATERIAL9*inout現在設定されているマテリアル プロパティが格納される D3DMATERIAL9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。pMaterial パラメーターが無効な場合は D3DERR_INVALIDCALL となります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。

vtbl 51 HRESULT SetLight(DWORD Index, D3DLIGHT9* param1)

IDirect3DDevice9::SetLight メソッド (d3d9.h) は、このデバイスに一組のライティング プロパティを割り当てます。

IndexDWORDin設定するライティング プロパティ セットの 0 から始まるインデックスです。このインデックスにライティング プロパティ セットが既に存在する場合、pLight で指定された新しいプロパティで上書きされます。
param1D3DLIGHT9*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 メソッドを呼び出します。

vtbl 52 HRESULT GetLight(DWORD Index, D3DLIGHT9* param1)

IDirect3DDevice9::GetLight メソッド (d3d9.h) は、このデバイスが使用する一組のライティング プロパティを取得します。

IndexDWORDin取得するライティング プロパティ セットの 0 から始まるインデックスです。このインデックスに対して IDirect3DDevice9::SetLight メソッドでライティング プロパティが設定されていない場合、このメソッドは失敗します。
param1D3DLIGHT9*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 メソッドは次の表に示すプロパティを持つ光源を作成し、それを有効または無効にします。

vtbl 53 HRESULT LightEnable(DWORD Index, BOOL Enable)

IDirect3DDevice9::LightEnable メソッド (d3d9.h) は、デバイス内の一組のライティング パラメーターを有効または無効にします。

IndexDWORDinこのメソッドの対象となるライティング パラメーター セットの、0 から始まるインデックスです。
EnableBOOLinライティング パラメーター セットを有効にするか無効にするかを示す値です。指定したインデックスのパラメーターによるライティングを有効にする場合はこのパラメーターを TRUE に、無効にする場合は FALSE に設定します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

LightIndex の値がデバイス内に割り当てられているライト プロパティ セットの範囲外の場合、IDirect3DDevice9::LightEnable メソッドは次のプロパティを持つ D3DLIGHT9 構造体で表される光源を作成し、その有効状態を bEnable で指定された値に設定します。

メンバー 既定値
Type
</td>
D3DLIGHT_DIRECTIONAL
Diffuse
</td>
(R:1, G:1, B:1, A:0)
Specular
</td>
(R:0, G:0, B:0, A:0)
Ambient
</td>
(R:0, G:0, B:0, A:0)
Position
</td>
(0, 0, 0)
Direction
</td>
(0, 0, 1)
Range
</td>
0
Falloff
</td>
0
Attenuation0
</td>
0
Attenuation1
</td>
0
Attenuation2
</td>
0
Theta
</td>
0
Phi
</td>
0
vtbl 54 HRESULT GetLightEnable(DWORD Index, BOOL* pEnable)

IDirect3DDevice9::GetLightEnable メソッド (d3d9.h) は、デバイス内の一組のライティング パラメーターの有効状態を取得します。

IndexDWORDinこのメソッドの対象となるライティング パラメーター セットの、0 から始まるインデックスです。
pEnableBOOL*inout指定したライティング パラメーターの状態が格納される変数へのポインターです。呼び出し後、このアドレスの値が 0 以外であれば、指定したライティング パラメーターが有効であることを示します。値が 0 の場合は無効であることを示します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。

vtbl 55 HRESULT SetClipPlane(DWORD Index, FLOAT* pPlane)

IDirect3DDevice9::SetClipPlane メソッド (d3d9.h) は、デバイスのユーザー定義クリッピング プレーンの係数を設定します。

IndexDWORDin平面方程式の係数を設定する対象のクリッピング プレーンのインデックスです。
pPlaneFLOAT*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 値の対応するビットを設定します。

vtbl 56 HRESULT GetClipPlane(DWORD Index, FLOAT* pPlane)

IDirect3DDevice9::GetClipPlane メソッド (d3d9.h) は、デバイスのユーザー定義クリッピング プレーンの係数を取得します。

IndexDWORDin平面方程式の係数を取得する対象のクリッピング プレーンのインデックスです。
pPlaneFLOAT*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 メソッドの呼び出しによって設定されます。

vtbl 57 HRESULT SetRenderState(D3DRENDERSTATETYPE State, DWORD Value)

IDirect3DDevice9::SetRenderState メソッド (d3d9helper.h) は、デバイスのレンダー ステート パラメーターを 1 つ設定します。

StateD3DRENDERSTATETYPEin変更対象のデバイス状態変数です。このパラメーターには、D3DRENDERSTATETYPE 列挙型の任意のメンバーを指定できます。
ValueDWORDin設定するデバイス レンダー ステートの新しい値です。このパラメーターの意味は、State に指定した値によって異なります。たとえば、StateD3DRS_SHADEMODE であれば、第 2 パラメーターは D3DSHADEMODE 列挙型のメンバーの 1 つになります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL が返されます。

vtbl 58 HRESULT GetRenderState(D3DRENDERSTATETYPE State, DWORD* pValue)

IDirect3DDevice9::GetRenderState メソッド (d3d9.h) は、デバイスのレンダー ステートの値を取得します。

StateD3DRENDERSTATETYPEin照会対象のデバイス状態変数です。このパラメーターには、D3DRENDERSTATETYPE 列挙型の任意のメンバーを指定できます。
pValueDWORD*inoutメソッドから戻る際に、照会したレンダー ステート変数の値を受け取る変数へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。引数のいずれかが無効な場合は D3DERR_INVALIDCALL となります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。"

vtbl 59 HRESULT CreateStateBlock(D3DSTATEBLOCKTYPE Type, IDirect3DStateBlock9** ppSB)

IDirect3DDevice9::CreateStateBlock メソッド (d3d9.h) は、すべてのデバイス状態、頂点関連の状態、またはピクセル関連の状態の値を格納する新しいステート ブロックを作成します。

TypeD3DSTATEBLOCKTYPEinこのメソッドがキャプチャすべき状態データの種類です。このパラメーターには、D3DSTATEBLOCKTYPE 列挙型で定義された値を設定できます。
ppSBIDirect3DStateBlock9**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 では、ステート ブロック オブジェクトの作成時に状態は保存されません。

vtbl 60 HRESULT BeginStateBlock()

IDirect3DDevice9::BeginStateBlock メソッド (d3d9.h) は、デバイス ステート ブロックの記録を開始するよう Direct3D に指示します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、E_OUTOFMEMORY

解説(Remarks)

アプリケーションは、このメソッドを呼び出す前に IDirect3DDevice9::ValidateDevice メソッドを呼び出すことで、記録されるすべての状態が有効であることを確認できます。

IDirect3DDevice9::BeginStateBlock を呼び出した後、IDirect3DDevice9::EndStateBlock を呼び出すまでの間に、次のメソッドをステート ブロックに記録できます。

ステート ブロック内での状態変更の順序は保証されません。同一の状態がステート ブロック内で複数回指定された場合、最後の値のみが使用されます。
vtbl 61 HRESULT EndStateBlock(IDirect3DStateBlock9** ppSB)

IDirect3DDevice9::EndStateBlock メソッド (d3d9.h) は、デバイス ステート ブロックの記録を停止するよう Direct3D に指示し、ステート ブロック インターフェイスへのポインターを取得します。

ppSBIDirect3DStateBlock9**outステート ブロック インターフェイスへのポインターです。IDirect3DStateBlock9 を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 62 HRESULT SetClipStatus(D3DCLIPSTATUS9* pClipStatus)

IDirect3DDevice9::SetClipStatus メソッド (d3d9.h) は、クリップ ステータスを設定します。

pClipStatusD3DCLIPSTATUS9*in設定するクリップ ステータスを記述する D3DCLIPSTATUS9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 引数のいずれかが無効な場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

クリップ ステータスはソフトウェア頂点処理の際に使用されます。したがって、このメソッドはピュアまたは非ピュアのハードウェア処理デバイスではサポートされません。ピュア デバイスの詳細については、D3DCREATE を参照してください。

頂点処理中に (IDirect3DDevice9::ProcessVerticesIDirect3DDevice9::DrawPrimitive、その他の描画関数によって) クリッピングが有効になっている場合、Direct3D はすべての頂点についてクリップ コードを計算します。クリップ コードは D3DCS_* ビットの組み合わせです。頂点が特定のクリッピング プレーンの外側にある場合、クリッピング コードの対応するビットが設定されます。Direct3D は、ClipUnion および ClipIntersection メンバーを持つ D3DCLIPSTATUS9 を用いてクリップ ステータスを保持します。ClipUnion はすべての頂点クリップ コードのビット単位の "OR"、ClipIntersection はすべての頂点クリップ コードのビット単位の "AND" です。初期値は ClipUnion が 0、ClipIntersection が 0xFFFFFFFF です。D3DRS_CLIPPINGFALSE に設定されている場合、ClipUnion と ClipIntersection は 0 に設定されます。Direct3D は描画呼び出しの際にクリップ ステータスを更新します。特定のオブジェクトについてクリップ ステータスを計算するには、ClipUnion と ClipIntersection を初期値に設定してから描画を続行します。

クリップ ステータスは IDirect3DDevice9::DrawRectPatch および IDirect3DDevice9::DrawTriPatch では更新されません。これらにはソフトウェア エミュレーションが存在しないためです。

vtbl 63 HRESULT GetClipStatus(D3DCLIPSTATUS9* pClipStatus)

IDirect3DDevice9::GetClipStatus メソッド (d3d9.h) は、クリップ ステータスを取得します。

pClipStatusD3DCLIPSTATUS9*inout クリップ ステータスを記述する D3DCLIPSTATUS9 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。

引数が無効な場合は D3DERR_INVALIDCALL が返されます。

解説(Remarks)

頂点処理中に (IDirect3DDevice9::ProcessVerticesIDirect3DDevice9::DrawPrimitive、その他の描画関数によって) クリッピングが有効になっている場合、Direct3D はすべての頂点についてクリップ コードを計算します。クリップ コードは D3DCS_* ビットの組み合わせです。頂点が特定のクリッピング プレーンの外側にある場合、クリッピング コードの対応するビットが設定されます。Direct3D は、ClipUnion および ClipIntersection メンバーを持つ D3DCLIPSTATUS9 を用いてクリップ ステータスを保持します。ClipUnion はすべての頂点クリップ コードのビット単位の "OR"、ClipIntersection はすべての頂点クリップ コードのビット単位の "AND" です。初期値は ClipUnion が 0、ClipIntersection が 0xFFFFFFFF です。D3DRS_CLIPPINGFALSE に設定されている場合、ClipUnion と ClipIntersection は 0 に設定されます。Direct3D は描画呼び出しの際にクリップ ステータスを更新します。特定のオブジェクトについてクリップ ステータスを計算するには、ClipUnion と ClipIntersection を初期値に設定してから描画を続行します。

クリップ ステータスは IDirect3DDevice9::DrawRectPatch および IDirect3DDevice9::DrawTriPatch では更新されません。これらにはソフトウェア エミュレーションが存在しないためです。

クリップ ステータスはソフトウェア頂点処理の際に使用されます。したがって、このメソッドはピュアまたは非ピュアのハードウェア処理デバイスではサポートされません。ピュア デバイスの詳細については、D3DCREATE を参照してください。

vtbl 64 HRESULT GetTexture(DWORD Stage, IDirect3DBaseTexture9** ppTexture)

IDirect3DDevice9::GetTexture メソッド (d3d9.h) は、デバイスのステージに割り当てられているテクスチャを取得します。

StageDWORDin取得するテクスチャのステージ識別子です。ステージ識別子は 0 から始まります。
ppTextureIDirect3DBaseTexture9**out返されるテクスチャを表す IDirect3DBaseTexture9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは動作しません。ただし、このメソッドはインターフェイスを返すため、ピュア デバイスでも動作します。

このメソッドを呼び出すと、IDirect3DTexture9 インターフェイスの内部参照カウントが増加します。この IDirect3DTexture9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 65 HRESULT SetTexture(DWORD Stage, IDirect3DBaseTexture9* pTexture)

IDirect3DDevice9::SetTexture メソッド (d3d9helper.h) は、デバイスのステージにテクスチャを割り当てます。

StageDWORDin

0 から始まるサンプラー番号です。テクスチャはサンプラーにバインドされます。サンプラーは、フィルタリング モードやアドレス ラップ モードなどのサンプリング状態を定義します。テクスチャは、プログラマブル パイプラインと固定機能パイプラインとで異なる方法で参照されます。

  • プログラマブル シェーダーは、サンプラー番号を使用してテクスチャを参照します。プログラマブル シェーダーが利用できるサンプラーの数は、シェーダーのバージョンによって異なります。頂点シェーダーについては Sampler (Direct3D 9 asm-vs) を、ピクセル シェーダーについては Sampler (Direct3D 9 asm-ps) を参照してください。
  • 一方、固定機能パイプラインはテクスチャ ステージ番号でテクスチャを参照します。サンプラーの最大数は、D3DCAPS9 構造体の MaxSimultaneousTextures と MaxTextureBlendStages の 2 つの機能値から決まります。
ステージ/サンプラー番号には、他に 2 つの特別なケースがあります。
pTextureIDirect3DBaseTexture9*in設定するテクスチャを表す IDirect3DBaseTexture9 インターフェイスへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

テクスチャがプール タイプ D3DPOOL_SCRATCH で作成されている場合、SetTexture は使用できません。また、DevCaps に D3DDEVCAPS_TEXTURESYSTEMMEMORY が設定されていない限り、プール タイプ D3DPOOL_SYSTEMMEM のテクスチャに対して SetTexture を使用することはできません。

vtbl 66 HRESULT GetTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD* pValue)

IDirect3DDevice9::GetTextureStageState メソッド (d3d9.h) は、割り当てられているテクスチャの状態値を取得します。

StageDWORDin状態を取得する対象のテクスチャのステージ識別子です。ステージ識別子は 0 から始まります。デバイスは最大 8 個のテクスチャを設定できるため、Stage に指定できる最大値は 7 です。
TypeD3DTEXTURESTAGESTATETYPEin取得するテクスチャ ステートです。このパラメーターには、D3DTEXTURESTAGESTATETYPE 列挙型の任意のメンバーを指定できます。
pValueDWORD*inout取得した状態値が格納される変数へのポインターです。取得される値の意味は Type パラメーターによって決まります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他のフラグ値のいずれかを指定してデバイスを作成する必要があります。"

vtbl 67 HRESULT SetTextureStageState(DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value)

IDirect3DDevice9::SetTextureStageState メソッド (d3d9helper.h) は、現在割り当てられているテクスチャの状態値を設定します。

StageDWORDin状態値を設定する対象のテクスチャのステージ識別子です。ステージ識別子は 0 から始まります。デバイスは最大 8 個のテクスチャを設定できるため、Stage に指定できる最大値は 7 です。
TypeD3DTEXTURESTAGESTATETYPEin設定するテクスチャ ステートです。このパラメーターには、D3DTEXTURESTAGESTATETYPE 列挙型の任意のメンバーを指定できます。
ValueDWORDin設定する状態値です。この値の意味は Type パラメーターによって決まります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

vtbl 68 HRESULT GetSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD* pValue)

IDirect3DDevice9::GetSamplerState メソッド (d3d9.h) は、サンプラー ステートの値を取得します。

SamplerDWORDinサンプラー ステージのインデックスです。
TypeD3DSAMPLERSTATETYPEinこのパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。
pValueDWORD*inout取得する状態値です。この値の意味は Type パラメーターによって決まります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスではデバイス状態を返しません。このメソッドを使用したい場合は、D3DCREATE の他の値のいずれかを指定してデバイスを作成する必要があります。"

vtbl 69 HRESULT SetSamplerState(DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value)

IDirect3DDevice9::SetSamplerState メソッド (d3d9helper.h) は、サンプラー ステートの値を設定します。

SamplerDWORDinサンプラー ステージのインデックスです。サンプラー ステージの詳細については、Sampling Stage Registers in vs_3_0 (DirectX HLSL) を参照してください。
TypeD3DSAMPLERSTATETYPEinこのパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。
ValueDWORDin設定する状態値です。この値の意味は Type パラメーターによって決まります。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

vtbl 70 HRESULT ValidateDevice(DWORD* pNumPasses)

IDirect3DDevice9::ValidateDevice メソッド (d3d9.h) は、現在のテクスチャ ブレンド操作および引数を単一パスでレンダリングできるかどうかについて、デバイスの能力を報告します。

pNumPassesDWORD*inoutマルチパス レンダリングによって目的のエフェクトを完成させるために必要なレンダリング パス数が格納される DWORD 値へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_CONFLICTINGRENDERSTATE、D3DERR_CONFLICTINGTEXTUREFILTER、D3DERR_DEVICELOST、D3DERR_DRIVERINTERNALERROR、D3DERR_TOOMANYOPERATIONS、D3DERR_UNSUPPORTEDALPHAARG、D3DERR_UNSUPPORTEDALPHAOPERATION、D3DERR_UNSUPPORTEDCOLORARG、D3DERR_UNSUPPORTEDCOLOROPERATION、D3DERR_UNSUPPORTEDFACTORVALUE、D3DERR_UNSUPPORTEDTEXTUREFILTER、D3DERR_WRONGTEXTUREFORMAT。

解説(Remarks)

IDirect3DDevice9::ValidateDevice メソッドは、他の機能情報だけでは判断できない場合にのみ、シナリオの検証に使用してください。たとえば、マルチステージ テクスチャリングのシナリオでは、D3DCAPS9 構造体の MaxTextureBlendStages および MaxSimultaneousTextures メンバーを照会することで、そのデバイスでマルチステージ テクスチャリングが可能かどうかを判定できます。

現行のハードウェアが、操作と引数のあらゆる組み合わせを実装しているとは限りません。特定のブレンド操作を所定の引数で実行できるかどうかは、目的のブレンド操作を設定してから IDirect3DDevice9::ValidateDevice メソッドを呼び出すことで判定できます。

IDirect3DDevice9::ValidateDevice メソッドは、呼び出し時点での現在のレンダー ステート、テクスチャ、テクスチャ ステージ ステートを使用して検証を行います。呼び出し後にこれらの要素を変更すると、それ以前の結果は無効となるため、シーンをレンダリングする前にこのメソッドを再度呼び出す必要があります。

最良のパフォーマンスを得るには、IDirect3DDevice9::ValidateDevice を初期化時に呼び出してください。レンダリング ループ内では使用しないでください。

引数としても操作としても、ディフューズの反復値の使用 (D3DTA_DIFFUSED3DTOP_BLENDDIFFUSEALPHA) が現行のハードウェアでサポートされることはまれです。ほとんどのハードウェアでは、反復されたカラー データを導入できるのは最後のテクスチャ操作ステージのみです。

各ステージでは、テクスチャ (D3DTA_TEXTURE) を第 2 引数ではなく第 1 引数として指定するようにしてください。

多くのカードは、任意のテクスチャ ステージでのディフューズ値やスカラー値の使用をサポートしていません。多くの場合、これらは最初または最後のテクスチャ ブレンド ステージでのみ利用できます。

多くのカードでは、最初のテクスチャに関連付けられたブレンド ユニットは、アルファをカラー チャネルに複製する、あるいは入力を反転する程度の機能しか持ちません。そのため、可能であればアプリケーションは 2 番目のテクスチャ ステージのみを使用する必要が生じる場合があります。そのようなハードウェアでは、最初のユニットは既定の状態、すなわち第 1 カラー引数が D3DTA_TEXTURE に設定され、操作が D3DTOP_SELECTARG1 である状態にあると想定されます。

出力アルファに対する操作が、カラー操作より複雑であったり大きく異なっていたりする場合、サポートされる可能性は低くなります。

一部のハードウェアは、D3DTA_TFACTORD3DTA_DIFFUSE の同時使用をサポートしていません。

多くのカードは、複数テクスチャとミップマップ トライリニア フィルタリングの同時使用をサポートしていません。マルチテクスチャ ブレンド操作に関与するテクスチャに対してトライリニア フィルタリングを要求して検証が失敗した場合は、トライリニア フィルタリングをオフにして再検証してください。この場合、代わりにマルチパス レンダリングを行うことを検討するとよいでしょう。

vtbl 71 HRESULT SetPaletteEntries(DWORD PaletteNumber, PALETTEENTRY* pEntries)

IDirect3DDevice9::SetPaletteEntries メソッド (d3d9.h) は、パレット エントリを設定します。

PaletteNumberDWORDin操作の対象となる特定のパレットを識別する序数値です。
pEntriesPALETTEENTRY*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 に設定されている場合、デバッグ ランタイムは警告メッセージを出力します。

デバイスには単一の論理パレットが関連付けられ、すべてのテクスチャ ステージで共有されます。

vtbl 72 HRESULT GetPaletteEntries(DWORD PaletteNumber, PALETTEENTRY* pEntries)

IDirect3DDevice9::GetPaletteEntries メソッド (d3d9.h) は、パレット エントリを取得します。

PaletteNumberDWORDin取得する特定のパレットを識別する序数値です。
pEntriesPALETTEENTRY*inout返されるパレット エントリを表す PALETTEENTRY 構造体へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

PALETTEENTRY の詳細については、Platform SDK を参照してください。

Direct3D 9 以降、PALETTEENTRY 構造体の peFlags メンバーは、Platform SDK に記載されているとおりには動作しません。現在、peFlags メンバーは 8 ビット パレット形式におけるアルファ チャネルとして機能します。
vtbl 73 HRESULT SetCurrentTexturePalette(DWORD PaletteNumber)

IDirect3DDevice9::SetCurrentTexturePalette メソッド (d3d9.h) は、現在のテクスチャ パレットを設定します。

PaletteNumberDWORDin現在のテクスチャ パレットとして設定するテクスチャ パレットを指定する値です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

デバイスには単一の論理パレットが関連付けられ、すべてのテクスチャ ステージで共有されます。

vtbl 74 HRESULT GetCurrentTexturePalette(DWORD* PaletteNumber)

IDirect3DDevice9::GetCurrentTexturePalette メソッド (d3d9.h) は、現在のテクスチャ パレットを取得します。

PaletteNumberDWORD*inout現在のテクスチャ パレットを識別する、返される値へのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 75 HRESULT SetScissorRect(RECT* pRect)

IDirect3DDevice9::SetScissorRect メソッド (d3d9helper.h) は、シザー矩形を設定します。

pRectRECT*inシザー テストが有効な場合に、レンダーターゲット内のレンダリング領域を定義する RECT 構造体へのポインターです。このパラメーターを NULL にすることはできません。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

シザー矩形は、矩形のクリッピング領域として使用されます。

DirectX における矩形の使用方法の詳細については、Rectangles (Direct3D 9) を参照してください。

vtbl 76 HRESULT GetScissorRect(RECT* pRect)

IDirect3DDevice9::GetScissorRect メソッド (d3d9.h) は、シザー矩形を取得します。

pRectRECT*inoutシザー テストが有効な場合に、レンダーターゲット内のレンダリング領域を定義する RECT 構造体へのポインターを返します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

シザー矩形は、矩形のクリッピング領域として使用されます。

DirectX における矩形の使用方法の詳細については、Rectangles (Direct3D 9) を参照してください。

vtbl 77 HRESULT SetSoftwareVertexProcessing(BOOL bSoftware)

IDirect3DDevice9::SetSoftwareVertexProcessing メソッド (d3d9helper.h) は、ソフトウェア頂点処理モードとハードウェア頂点処理モードを切り替えます。

bSoftwareBOOLinソフトウェア頂点処理を指定する場合は TRUE、ハードウェア頂点処理を指定する場合は FALSE です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

モード変更に関する制約は次のとおりです (D3DCREATE 定数に関する注記も参照してください)。

アプリケーションは、ソフトウェア頂点処理とハードウェア頂点処理の両方を使用するために混合モードのデバイスを作成できます。DirectX 8.x で 2 つの頂点処理モードを切り替えるには、レンダー ステート D3DRS_SOFTWAREVERTEXPROCESSING と適切な DWORD 引数を指定して IDirect3DDevice8::SetRenderState を使用していました。このレンダー ステートによる方式の欠点は、ステート ブロックのセマンティクスを定義することが難しい点にありました。アプリケーションとランタイムは、ステート ブロックの記録および再生の際に余分な処理を行い、注意を払う必要がありました。

Direct3D 9 では、代わりに SetSoftwareVertexProcessing を使用してください。この新しい API は StateBlocks には記録されません。

vtbl 78 BOOL GetSoftwareVertexProcessing()

IDirect3DDevice9::GetSoftwareVertexProcessing メソッド (d3d9.h) は、頂点処理モード (ハードウェアまたはソフトウェア) を取得します。

戻り値

型: BOOL

ソフトウェア頂点処理が設定されている場合は TRUE を返します。そうでない場合は FALSE を返します。

解説(Remarks)

アプリケーションは、ソフトウェア頂点処理とハードウェア頂点処理の両方を使用するために混合モードのデバイスを作成できます。DirectX 8.x で 2 つの頂点処理モードを切り替えるには、レンダー ステート D3DRS_SOFTWAREVERTEXPROCESSING と適切な BOOL 引数を指定して IDirect3DDevice9::SetRenderState を使用していました。このレンダー ステートによる方式の欠点は、ステート ブロックのセマンティクスを定義することが難しい点にありました。アプリケーションとランタイムは、ステート ブロックの記録および再生の際に余分な処理を行い、注意を払う必要がありました。

Direct3D 9 では、代わりに IDirect3DDevice9::SetSoftwareVertexProcessing を使用してください。この新しい API は StateBlocks には記録されません。

D3DCREATE 定数に関する注記も参照してください。

vtbl 79 HRESULT SetNPatchMode(FLOAT nSegments)

IDirect3DDevice9::SetNPatchMode メソッド (d3d9.h) は、N パッチを有効または無効にします。

nSegmentsFLOATin分割セグメント数を指定します。セグメント数が 1.0 未満の場合、N パッチは無効になります。既定値は 0.0 です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。

vtbl 80 FLOAT GetNPatchMode()

IDirect3DDevice9::GetNPatchMode メソッド (d3d9.h) は、N パッチ モードのセグメント数を取得します。

戻り値

型: FLOAT

分割セグメント数を指定します。セグメント数が 1.0 未満の場合、N パッチは無効になります。既定値は 0.0 です。

vtbl 81 HRESULT DrawPrimitive(D3DPRIMITIVETYPE PrimitiveType, DWORD StartVertex, DWORD PrimitiveCount)

IDirect3DDevice9::DrawPrimitive メソッド (d3d9.h) は、現在のデータ入力ストリームのセットから、指定した種類のインデックスなし幾何プリミティブの列をレンダリングします。

PrimitiveTypeD3DPRIMITIVETYPEinレンダリングするプリミティブの種類を記述する D3DPRIMITIVETYPE 列挙型のメンバーです。
StartVertexDWORDin読み込む最初の頂点のインデックスです。StartVertex を起点として、必要な数の頂点が頂点バッファーから読み出されます。
PrimitiveCountDWORDinレンダリングするプリミティブの数です。許可されるプリミティブの最大数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判定できます。PrimitiveCount は、プリミティブの種類に応じて決まるプリミティブの数です。ライン リストであれば各プリミティブは 2 頂点、トライアングル リストであれば各プリミティブは 3 頂点を持ちます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

既存のアプリケーションを Direct3D 9 へ移行する際は、Draw 系の呼び出しを行う前に、固定機能パイプラインを使用する場合は IDirect3DDevice9::SetFVF の呼び出しを、頂点シェーダーを使用する場合は IDirect3DDevice9::SetVertexDeclaration の呼び出しを追加する必要があります。

vtbl 82 HRESULT DrawIndexedPrimitive(D3DPRIMITIVETYPE param0, INT BaseVertexIndex, DWORD MinVertexIndex, DWORD NumVertices, DWORD startIndex, DWORD primCount)

IDirect3DDevice9::DrawIndexedPrimitive メソッド (d3d9.h) は、指定した幾何プリミティブを頂点の配列にレンダリングします。

param0D3DPRIMITIVETYPEin描画するプリミティブの種別を示すD3DPRIMITIVETYPE。
BaseVertexIndexINTin頂点バッファーの先頭から最初の頂点までのオフセットです。Scenario 4 を参照してください。
MinVertexIndexDWORDinこの呼び出しで使用される頂点の最小頂点インデックスです。これは BaseVertexIndex を基準とする 0 から始まるインデックスです。
NumVerticesDWORDinこの呼び出しで使用される頂点の数です。最初の頂点は、インデックス BaseVertexIndex + MinIndex の位置にあります。
startIndexDWORDin頂点バッファーへアクセスする際に使用する、最初のインデックスのインデックスです。StartIndex を起点として、頂点バッファーから頂点がインデックス参照されます。
primCountDWORDinレンダリングするプリミティブの数です。使用される頂点の数は、プリミティブ数とプリミティブの種類によって決まります。許可されるプリミティブの最大数は、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 の呼び出しを追加する必要があります。

vtbl 83 HRESULT DrawPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, DWORD PrimitiveCount, void* pVertexStreamZeroData, DWORD VertexStreamZeroStride)

IDirect3DDevice9::DrawPrimitiveUP メソッド (d3d9.h) は、ユーザー メモリ ポインターで指定されたデータを、指定した種類の幾何プリミティブの列としてレンダリングします。

PrimitiveTypeD3DPRIMITIVETYPEinレンダリングするプリミティブの種類を記述する D3DPRIMITIVETYPE 列挙型のメンバーです。
PrimitiveCountDWORDinレンダリングするプリミティブの数です。許可されるプリミティブの最大数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判定できます。
pVertexStreamZeroDatavoid*in頂点データへのユーザー メモリ ポインターです。
VertexStreamZeroStrideDWORDin頂点 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 の呼び出しを追加する必要があります。

vtbl 84 HRESULT DrawIndexedPrimitiveUP(D3DPRIMITIVETYPE PrimitiveType, DWORD MinVertexIndex, DWORD NumVertices, DWORD PrimitiveCount, void* pIndexData, D3DFORMAT IndexDataFormat, void* pVertexStreamZeroData, DWORD VertexStreamZeroStride)

IDirect3DDevice9::DrawIndexedPrimitiveUP メソッド (d3d9.h) は、ユーザー メモリ ポインターで指定されたデータを用いて、指定した幾何プリミティブをレンダリングします。

PrimitiveTypeD3DPRIMITIVETYPEinレンダリングするプリミティブの種類を記述する D3DPRIMITIVETYPE 列挙型のメンバーです。
MinVertexIndexDWORDin最小頂点インデックスです。これは 0 から始まるインデックスです。
NumVerticesDWORDin この呼び出しで使用される頂点の数です。最初の頂点は、インデックス MinVertexIndex の位置にあります。
PrimitiveCountDWORDinレンダリングするプリミティブの数です。許可されるプリミティブの最大数は、D3DCAPS9 構造体の MaxPrimitiveCount メンバーを確認することで判定できます (インデックスの数は、プリミティブ数とプリミティブの種類によって決まります)。
pIndexDatavoid*inインデックス データへのユーザー メモリ ポインターです。
IndexDataFormatD3DFORMATin

インデックス データの形式を記述する D3DFORMAT 列挙型のメンバーです。有効な設定は次のいずれかです。

pVertexStreamZeroDatavoid*in頂点データへのユーザー メモリ ポインターです。頂点データはストリーム 0 になければなりません。
VertexStreamZeroStrideDWORDin頂点 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 の呼び出しを追加する必要があります。

vtbl 85 HRESULT ProcessVertices(DWORD SrcStartIndex, DWORD DestIndex, DWORD VertexCount, IDirect3DVertexBuffer9* pDestBuffer, IDirect3DVertexDeclaration9* pVertexDecl, DWORD Flags)

IDirect3DDevice9::ProcessVertices メソッド (d3d9.h) は、頂点シェーダーで定義された頂点処理を、入力データ ストリームのセットに適用します。

SrcStartIndexDWORDin読み込む最初の頂点のインデックスです。
DestIndexDWORDin結果を格納する、コピー先頂点バッファー内の最初の頂点のインデックスです。
VertexCountDWORDin処理する頂点の数です。
pDestBufferIDirect3DVertexBuffer9*inインターリーブされた頂点データのストリームを表す、コピー先頂点バッファーである IDirect3DVertexBuffer9 インターフェイスへのポインターです。
pVertexDeclIDirect3DVertexDeclaration9*in出力頂点データ宣言を表す IDirect3DVertexDeclaration9 インターフェイスへのポインターです。頂点シェーダー 3.0 以降が現在の頂点シェーダーとして設定されている場合、出力頂点宣言が存在しなければなりません。
FlagsDWORDin処理オプションです。既定の処理を行うには、このパラメーターを 0 に設定します。頂点処理の影響を受けない頂点データがコピー先バッファーへコピーされないようにするには、D3DPV_DONOTCOPYDATA を設定します。D3DPV_DONOTCOPYDATA の値は、コピー先バッファーに適した 1 つ以上の D3DLOCK の値と組み合わせることができます。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドにおける処理の順序は次のとおりです。

コピー先頂点バッファー pDestBuffer は、IDirect3DDevice9::CreateVertexBuffer で 0 以外の FVF パラメーターを指定して作成されている必要があります。IDirect3DDevice9::CreateVertexBuffer メソッドの呼び出し時に指定した FVF コードが、コピー先頂点バッファーに存在する頂点要素を規定します。

Direct3D がテクスチャ座標を生成する場合、または入力テクスチャ座標をコピーもしくは変換する場合において、出力テクスチャ座標形式が Direct3D の生成するテクスチャ座標成分より多くの成分を定義しているとき、Direct3D はそれらの余分な成分を変更しません。

vtbl 86 HRESULT CreateVertexDeclaration(D3DVERTEXELEMENT9* pVertexElements, IDirect3DVertexDeclaration9** ppDecl)

IDirect3DDevice9::CreateVertexDeclaration メソッド (d3d9.h) は、デバイスと頂点要素から頂点シェーダー宣言を作成します。

pVertexElementsD3DVERTEXELEMENT9*inD3DVERTEXELEMENT9 頂点要素の配列です。
ppDeclIDirect3DVertexDeclaration9**out作成された頂点シェーダー宣言を返す IDirect3DVertexDeclaration9 ポインターへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

DirectX の各バージョン間で頂点宣言をどのように対応付けるかの詳細については、Vertex Declaration (Direct3D 9) のページを参照してください。

vtbl 87 HRESULT SetVertexDeclaration(IDirect3DVertexDeclaration9* pDecl)

IDirect3DDevice9::SetVertexDeclaration メソッド (d3d9helper.h) は、頂点宣言 (Vertex Declaration、Direct3D 9) を設定します。

pDeclIDirect3DVertexDeclaration9*in頂点宣言を保持する IDirect3DVertexDeclaration9 オブジェクトへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 戻り値は D3DERR_INVALIDCALL になることがあります。

解説(Remarks)

頂点宣言は、頂点のデータ メンバー (テクスチャ座標、色、法線など) を定義する IDirect3DVertexDeclaration9 オブジェクトです。このデータは、頂点シェーダーおよびピクセル シェーダーを実装する際に有用です。

vtbl 88 HRESULT GetVertexDeclaration(IDirect3DVertexDeclaration9** ppDecl)

IDirect3DDevice9::GetVertexDeclaration メソッド (d3d9.h) は、頂点シェーダー宣言を取得します。

ppDeclIDirect3DVertexDeclaration9**out返される IDirect3DVertexDeclaration9 オブジェクトへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 戻り値は D3DERR_INVALIDCALL になることがあります。

vtbl 89 HRESULT SetFVF(DWORD FVF)

IDirect3DDevice9::SetFVF メソッド (d3d9.h) は、現在の頂点ストリーム宣言を設定します。

FVFDWORDin固定機能の頂点タイプを格納する DWORD です。詳細については、D3DFVF を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

位置、ディフューズ色とスペキュラー色、およびテクスチャ座標を持つ頂点を初期化して使用するために必要な手順は次のとおりです。

  1. カスタム頂点タイプと FVF コードを定義します。
    
    struct LVertex
    {
        FLOAT    x, y, z;
        D3DCOLOR specular, diffuse;
        FLOAT    tu, tv;
    };
        
    const DWORD VertexFVF = (D3DFVF_XYZ | D3DFVF_DIFFUSE |
                             D3DFVF_SPECULAR | D3DFVF_TEX1 );
    
  2. IDirect3DDevice9::CreateVertexBuffer を使用して、4 頂点分の十分な領域を持つ頂点バッファーを作成します。
    
    g_d3dDevice->CreateVertexBuffer( 4*sizeof(LVertex),  
        D3DUSAGE_WRITEONLY, VertexFVF, D3DPOOL_DEFAULT, &pBigSquareVB, NULL );
    
  3. 各頂点の値を設定します。
    
    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();
    
  4. 頂点バッファーが初期化され、レンダリングの準備が整いました。次のコード例は、従来の FVF を使用して四角形を描画する方法を示しています。
    
    g_d3dDevice->SetFVF(VertexFVF);
    g_d3dDevice->SetStreamSource(0, pBigSquareVB, 0, sizeof(LVertex));
    g_d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0 ,2);
    
位置、法線、およびテクスチャ座標を持つ頂点を初期化して使用するために必要な手順は次のとおりです。
  1. カスタム頂点タイプと FVF コードを定義します。
    
    struct Vertex
    {
        FLOAT x, y, z;
        FLOAT nx, ny, nz;
        FLOAT tu, tv;
    };
        
    const DWORD VertexFVF = ( D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1 );
    
  2. IDirect3DDevice9::CreateVertexBuffer を使用して、4 頂点分の十分な領域を持つ頂点バッファーを作成します (上記の例と同様)。
  3. 各頂点の値を設定します。
    
    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();
    
  4. オブジェクトを描画します (上記の例と同様)。
vtbl 90 HRESULT GetFVF(DWORD* pFVF)

IDirect3DDevice9::GetFVF メソッド (d3d9.h) は、固定機能頂点宣言を取得します。

pFVFDWORD*inout固定機能の頂点タイプを指す DWORD ポインターです。詳細については、D3DFVF を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

固定機能頂点宣言とは、固定機能パイプラインで処理される頂点がどのように使用されるかを決定する FVF フラグの集合です。

vtbl 91 HRESULT CreateVertexShader(DWORD* pFunction, IDirect3DVertexShader9** ppShader)

IDirect3DDevice9::CreateVertexShader メソッド (d3d9.h) は、頂点シェーダーを作成します。

pFunctionDWORD*in

頂点シェーダーを表すトークンの配列 (埋め込みのデバッグ情報やシンボル テーブル情報を含む) へのポインターです。

  • HLSL シェーダーから配列を作成するには、D3DXCompileShader などの関数を使用します。
  • アセンブリ言語シェーダーからトークン配列を作成するには、D3DXAssembleShader のような関数を使用します。
  • エフェクトから配列を作成するには、ID3DXEffectCompiler::CompileShader のような関数を使用します。
ppShaderIDirect3DVertexShader9**out返される頂点シェーダー インターフェイスへのポインターです (IDirect3DVertexShader9 を参照)。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY

解説(Remarks)

デバイスの作成時、IDirect3D9::CreateDevice は動作フラグを用いて頂点をハードウェアで処理するかソフトウェアで処理するかを決定します。次の 3 つの選択肢があります。

D3DXCompileShader を使用する例については、HLSLwithoutEffects Sample を参照してください。
vtbl 92 HRESULT SetVertexShader(IDirect3DVertexShader9* pShader)

IDirect3DDevice9::SetVertexShader メソッド (d3d9helper.h) は、頂点シェーダーを設定します。

pShaderIDirect3DVertexShader9*in頂点シェーダー インターフェイスです。詳細については、IDirect3DVertexShader9 を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

(プログラマブル頂点シェーダーを設定した後に) 固定機能の頂点シェーダーを設定するには、IDirect3DDevice9::SetVertexShader(NULL) を呼び出してプログラマブル シェーダーを解放し、その後、固定機能の頂点フォーマットを指定して IDirect3DDevice9::SetFVF を呼び出します。

vtbl 93 HRESULT GetVertexShader(IDirect3DVertexShader9** ppShader)

IDirect3DDevice9::GetVertexShader メソッド (d3d9.h) は、現在設定されている頂点シェーダーを取得します。

ppShaderIDirect3DVertexShader9**out頂点シェーダー インターフェイスへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。 ppShader が無効な場合は D3DERR_INVALIDCALL が返されます。

解説(Remarks)

通常、状態を返すメソッドは D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは動作しません。ただし、このメソッドはインターフェイスを返すため、ピュア デバイスでも動作します。

vtbl 94 HRESULT SetVertexShaderConstantF(DWORD StartRegister, FLOAT* pConstantData, DWORD Vector4fCount)

IDirect3DDevice9::SetVertexShaderConstantF メソッド (d3d9helper.h) は、浮動小数点の頂点シェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataFLOAT*in定数の配列へのポインターです。
Vector4fCountDWORDin定数の配列に含まれる 4 要素 float ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 95 HRESULT GetVertexShaderConstantF(DWORD StartRegister, FLOAT* pConstantData, DWORD Vector4fCount)

IDirect3DDevice9::GetVertexShaderConstantF メソッド (d3d9.h) は、浮動小数点の頂点シェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataFLOAT*inout定数の配列へのポインターです。
Vector4fCountDWORDin定数の配列に含まれる 4 要素 float ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 96 HRESULT SetVertexShaderConstantI(DWORD StartRegister, INT* pConstantData, DWORD Vector4iCount)

IDirect3DDevice9::SetVertexShaderConstantI メソッド (d3d9helper.h) は、整数の頂点シェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataINT*in定数の配列へのポインターです。
Vector4iCountDWORDin定数の配列に含まれる 4 要素整数ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 97 HRESULT GetVertexShaderConstantI(DWORD StartRegister, INT* pConstantData, DWORD Vector4iCount)

IDirect3DDevice9::GetVertexShaderConstantI メソッド (d3d9.h) は、整数の頂点シェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataINT*inout定数の配列へのポインターです。
Vector4iCountDWORDin定数の配列に含まれる 4 要素整数ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 98 HRESULT SetVertexShaderConstantB(DWORD StartRegister, BOOL* pConstantData, DWORD BoolCount)

IDirect3DDevice9::SetVertexShaderConstantB メソッド (d3d9helper.h) は、ブール値の頂点シェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataBOOL*in定数の配列へのポインターです。
BoolCountDWORDin定数の配列に含まれるブール値の数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 99 HRESULT GetVertexShaderConstantB(DWORD StartRegister, BOOL* pConstantData, DWORD BoolCount)

IDirect3DDevice9::GetVertexShaderConstantB メソッド (d3d9.h) は、ブール値の頂点シェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataBOOL*inout定数の配列へのポインターです。
BoolCountDWORDin定数の配列に含まれるブール値の数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 100 HRESULT SetStreamSource(DWORD StreamNumber, IDirect3DVertexBuffer9* pStreamData, DWORD OffsetInBytes, DWORD Stride)

IDirect3DDevice9::SetStreamSource メソッド (d3d9helper.h) は、頂点バッファーをデバイスのデータ ストリームにバインドします。

StreamNumberDWORDinデータ ストリームを指定します。範囲は 0 からストリームの最大数から 1 を引いた値までです。
pStreamDataIDirect3DVertexBuffer9*in指定したデータ ストリームにバインドする頂点バッファーを表す IDirect3DVertexBuffer9 インターフェイスへのポインターです。
OffsetInBytesDWORDinストリームの先頭から頂点データの先頭までのオフセット (バイト単位) です。デバイスがストリーム オフセットをサポートしているかどうかを確認するには、D3DDEVCAPS2D3DDEVCAPS2_STREAMOFFSET 定数を参照してください。
StrideDWORDinコンポーネントのストライド (バイト単位) です。「解説」を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

FVF 頂点シェーダーを使用する場合、頂点ストリームのストライドは FVF から算出される頂点サイズと一致していなければなりません。宣言 (declaration) を使用する場合、ストライドは宣言から算出されるストリーム サイズ以上である必要があります。

SetStreamSource を呼び出す際、通常はストライドが頂点サイズと等しいことが要求されます。ただし、同一または類似のジオメトリのインスタンスを複数描画したい場合 (インスタンシングによる描画を行う場合など) があります。この場合は、ストライドに 0 を指定して、頂点バッファーのオフセットを進めないようランタイムに指示します (すなわち、すべてのインスタンスで同じ頂点データを使用します)。インスタンシングの詳細については、Efficiently Drawing Multiple Instances of Geometry (Direct3D 9) を参照してください。

vtbl 101 HRESULT GetStreamSource(DWORD StreamNumber, IDirect3DVertexBuffer9** ppStreamData, DWORD* pOffsetInBytes, DWORD* pStride)

IDirect3DDevice9::GetStreamSource メソッド (d3d9.h) は、指定したデータ ストリームにバインドされている頂点バッファーを取得します。

StreamNumberDWORDinデータ ストリームを指定します。範囲は 0 からストリームの最大数から 1 を引いた値までです。
ppStreamDataIDirect3DVertexBuffer9**out指定したデータ ストリームにバインドされ、返される頂点バッファーを表す IDirect3DVertexBuffer9 インターフェイスへのポインターのアドレスです。
pOffsetInBytesDWORD*inoutストリームの先頭から頂点データの先頭までのオフセットを格納するポインターです。オフセットはバイト単位です。「解説」を参照してください。
pStrideDWORD*inout返されるコンポーネントのストライド (バイト単位) へのポインターです。「解説」を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

ストリームとは、コンポーネント データの均一な配列として定義されます。各コンポーネントは、位置、法線、色などの単一の実体を表す 1 つ以上の要素で構成されます。

FVF 頂点シェーダーを使用する場合、頂点ストリームのストライドは FVF から算出される頂点サイズと一致していなければなりません。宣言 (declaration) を使用する場合、ストライドは宣言から算出されるストリーム サイズ以上である必要があります。

このメソッドを呼び出すと、IDirect3DVertexBuffer9 インターフェイスの内部参照カウントが増加します。この IDirect3DVertexBuffer9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 102 HRESULT SetStreamSourceFreq(DWORD StreamNumber, DWORD Setting)

IDirect3DDevice9::SetStreamSourceFreq メソッド (d3d9helper.h) は、ストリーム ソースの周波数分周値を設定します。

StreamNumberDWORDinストリーム ソース番号です。
SettingDWORDinインスタンシングの分周設定を示すDWORD。INDEXEDDATA等を含む。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

d3d9types.h には、SetStreamSourceFreq で使用するために設計された 2 つの定数、D3DSTREAMSOURCE_INDEXEDDATAD3DSTREAMSOURCE_INSTANCEDATA が定義されています。これらの定数の使用方法については、Efficiently Drawing Multiple Instances of Geometry (Direct3D 9) を参照してください。

vtbl 103 HRESULT GetStreamSourceFreq(DWORD StreamNumber, DWORD* pSetting)

IDirect3DDevice9::GetStreamSourceFreq メソッド (d3d9.h) は、ストリーム ソースの周波数分周値を取得します。

StreamNumberDWORDin

ストリーム ソース番号です。

- Divider

型: [out] UINT*

周波数分周値を返します。

pSettingDWORD*inout現在の分周設定値を受け取るDWORDポインタ。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

頂点シェーダーは、頂点あたり複数回呼び出せるようになりました。Drawing Non-Indexed Geometry を参照してください。

vtbl 104 HRESULT SetIndices(IDirect3DIndexBuffer9* pIndexData)

IDirect3DDevice9::SetIndices メソッド (d3d9.h) は、インデックス データを設定します。

pIndexDataIDirect3DIndexBuffer9*in設定するインデックス データを表す IDirect3DIndexBuffer9 インターフェイスへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

解説(Remarks)

アプリケーションがこのインターフェイスへの参照を保持しなくなると、インターフェイスは自動的に解放されます。

IDirect3DDevice9::SetIndices メソッドは、現在のインデックス配列をインデックス バッファーに設定します。この単一のインデックス セットが、すべてのストリームのインデックス参照に使用されます。

vtbl 105 HRESULT GetIndices(IDirect3DIndexBuffer9** ppIndexData)

IDirect3DDevice9::GetIndices メソッド (d3d9.h) は、インデックス データを取得します。

ppIndexDataIDirect3DIndexBuffer9**out返されるインデックス データを表す IDirect3DIndexBuffer9 インターフェイスへのポインターのアドレスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドを呼び出すと、IDirect3DIndexBuffer9 インターフェイスの内部参照カウントが増加します。この IDirect3DIndexBuffer9 インターフェイスの使用を終えた際に IUnknown::Release を呼び出さないと、メモリ リークが発生します。

vtbl 106 HRESULT CreatePixelShader(DWORD* pFunction, IDirect3DPixelShader9** ppShader)

IDirect3DDevice9::CreatePixelShader メソッド (d3d9.h) は、ピクセル シェーダーを作成します。

pFunctionDWORD*inブレンド操作を指定する、ピクセル シェーダー関数のトークン配列へのポインターです。この値を NULL にすることはできません。
ppShaderIDirect3DPixelShader9**out返されるピクセル シェーダー インターフェイスへのポインターです。IDirect3DPixelShader9 を参照してください。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、 E_OUTOFMEMORY

vtbl 107 HRESULT SetPixelShader(IDirect3DPixelShader9* pShader)

IDirect3DDevice9::SetPixelShader メソッド (d3d9.h) は、事前に作成されたピクセル シェーダーを現在のピクセル シェーダーとして設定します。

pShaderIDirect3DPixelShader9*inピクセル シェーダー インターフェイスです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

vtbl 108 HRESULT GetPixelShader(IDirect3DPixelShader9** ppShader)

IDirect3DDevice9::GetPixelShader メソッド (d3d9.h) は、現在設定されているピクセル シェーダーを取得します。

ppShaderIDirect3DPixelShader9**outピクセル シェーダー インターフェイスへのポインターです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は D3DERR_INVALIDCALL になります。

解説(Remarks)

このメソッドは、D3DCREATE_PUREDEVICE を指定して作成されたデバイスでは動作しません。

vtbl 109 HRESULT SetPixelShaderConstantF(DWORD StartRegister, FLOAT* pConstantData, DWORD Vector4fCount)

IDirect3DDevice9::SetPixelShaderConstantF メソッド (d3d9helper.h) は、浮動小数点のシェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataFLOAT*in定数の配列へのポインターです。
Vector4fCountDWORDin定数の配列に含まれる 4 要素 float ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 110 HRESULT GetPixelShaderConstantF(DWORD StartRegister, FLOAT* pConstantData, DWORD Vector4fCount)

IDirect3DDevice9::GetPixelShaderConstantF メソッド (d3d9.h) は、浮動小数点のシェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataFLOAT*inout定数の配列へのポインターです。
Vector4fCountDWORDin定数の配列に含まれる 4 要素 float ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 111 HRESULT SetPixelShaderConstantI(DWORD StartRegister, INT* pConstantData, DWORD Vector4iCount)

IDirect3DDevice9::SetPixelShaderConstantI メソッド (d3d9helper.h) は、整数のシェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataINT*in定数の配列へのポインターです。
Vector4iCountDWORDin定数の配列に含まれる 4 要素整数ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 112 HRESULT GetPixelShaderConstantI(DWORD StartRegister, INT* pConstantData, DWORD Vector4iCount)

IDirect3DDevice9::GetPixelShaderConstantI メソッド (d3d9.h) は、整数のシェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataINT*inout定数の配列へのポインターです。
Vector4iCountDWORDin定数の配列に含まれる 4 要素整数ベクトルの数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 113 HRESULT SetPixelShaderConstantB(DWORD StartRegister, BOOL* pConstantData, DWORD BoolCount)

IDirect3DDevice9::SetPixelShaderConstantB メソッド (d3d9.h) は、ブール値のシェーダー定数を設定します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataBOOL*in定数の配列へのポインターです。
BoolCountDWORDin定数の配列に含まれるブール値の数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 114 HRESULT GetPixelShaderConstantB(DWORD StartRegister, BOOL* pConstantData, DWORD BoolCount)

IDirect3DDevice9::GetPixelShaderConstantB メソッド (d3d9.h) は、ブール値のシェーダー定数を取得します。

StartRegisterDWORDin最初の定数値を格納するレジスタ番号です。
pConstantDataBOOL*inout定数の配列へのポインターです。
BoolCountDWORDin定数の配列に含まれるブール値の数です。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 115 HRESULT DrawRectPatch(DWORD Handle, FLOAT* pNumSegs, D3DRECTPATCH_INFO* pRectPatchInfo)

IDirect3DDevice9::DrawRectPatch メソッド (d3d9.h) は、現在設定されているストリームを使用して矩形パッチを描画します。

HandleDWORDin描画する矩形パッチのハンドルです。
pNumSegsFLOAT*inテセレーション時に矩形パッチの各辺をいくつのセグメントに分割するかを示す、4 つの浮動小数点値の配列へのポインターです。D3DRECTPATCH_INFO を参照してください。
pRectPatchInfoD3DRECTPATCH_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 にすることは不正です。

vtbl 116 HRESULT DrawTriPatch(DWORD Handle, FLOAT* pNumSegs, D3DTRIPATCH_INFO* pTriPatchInfo)

IDirect3DDevice9::DrawTriPatch メソッド (d3d9.h) は、現在設定されているストリームを使用して三角形パッチを描画します。

HandleDWORDin描画する三角形パッチのハンドルです。
pNumSegsFLOAT*inテセレーション時に三角形パッチの各辺をいくつのセグメントに分割するかを示す、3 つの浮動小数点値の配列へのポインターです。D3DTRIPATCH_INFO を参照してください。
pTriPatchInfoD3DTRIPATCH_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 にすることは不正です。

vtbl 117 HRESULT DeletePatch(DWORD Handle)

IDirect3DDevice9::DeletePatch メソッド (d3d9.h) は、キャッシュされた高次パッチを解放します。

HandleDWORDin削除するキャッシュ済み高次パッチのハンドルです。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。メソッドが失敗した場合、戻り値は次のようになります: D3DERR_INVALIDCALL。

vtbl 118 HRESULT CreateQuery(D3DQUERYTYPE Type, IDirect3DQuery9** ppQuery)

IDirect3DDevice9::CreateQuery メソッド (d3d9.h) は、ステータス クエリを作成します。

TypeD3DQUERYTYPEinクエリの種類を識別します。詳細については、D3DQUERYTYPE を参照してください。
ppQueryIDirect3DQuery9**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 の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 指定が可能。