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 デバイスの現在の協調レベルの状態を報告します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK であり、デバイスが動作可能で呼び出し元のアプリケーションが処理を継続できることを示します。 メソッドが失敗した場合、戻り値は次のいずれかになります: D3DERR_DEVICELOST、D3DERR_DEVICENOTRESET、D3DERR_DRIVERINTERNALERROR。

解説(Remarks)

デバイスがロストしており、現時点では復元できない場合、IDirect3DDevice9::TestCooperativeLevel は戻り値 D3DERR_DEVICELOST を返します。たとえば、フルスクリーンのデバイスがフォーカスを失った場合がこれに該当します。アプリケーションがデバイスのロストを検出した場合は、処理を一時停止し、戻り値 D3DERR_DEVICENOTRESET が返されるまで IDirect3DDevice9::TestCooperativeLevel を定期的に呼び出してください。その後、IDirect3DDevice9::Reset を呼び出してデバイスのリセットを試み、成功した場合は必要なリソースを復元して通常の動作を再開できます。なお、デバイスが「ロスト」または「未リセット」のいずれかの状態にある場合、IDirect3DDevice9::Present は D3DERR_DEVICELOST を返します。

IDirect3DDevice9::TestCooperativeLevel の呼び出しは、リセット対象のデバイスを作成したスレッドとは異なるスレッドから行われた場合に失敗します。

vtbl 4 DWORD GetAvailableTextureMem()

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

戻り値

型: UINT

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

解説(Remarks)

返される値は最も近い MB 単位に丸められます。これは、アライメントやリソースごとの消費量に影響するその他の要因により、ビデオメモリの推定値が決して正確にはならないという事実を反映するためです。アプリケーションはこの値を使用して、ミップマップを何レベル分まで割り当てるかといった大規模なリソースの判断のためにメモリの空き状況を大まかに見積もることはできますが、別のリソースを割り当てるだけのメモリが残っているかといった小規模な判断にこの値を使用することはできません。

vtbl 5 HRESULT EvictManagedResources()

IDirect3DDevice9::EvictManagedResources メソッド (d3d9.h) は、Direct3D が管理するリソースとドライバーが管理するリソースの両方を含む、すべてのマネージドリソースを破棄します。

戻り値

型: 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) は、レンダリングデバイスの機能を取得します。

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 つのデバイスがサポートできるフルスクリーンのスワップチェーンは 1 つだけです。

IDirect3D9::CreateDevice、IDirect3DDevice9::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 を返すことで示されます) でない限り、「ロスト」状態 (IDirect3DDevice9::TestCooperativeLevel の呼び出しが D3DERR_DEVICELOST を返すことで示されます) になります。ロストデバイスの文脈における IDirect3DDevice9::Reset の使用については、IDirect3DDevice9::TestCooperativeLevel および ロストデバイス (Direct3D 9) を参照してください。

IDirect3DDevice9::Reset を呼び出すと、すべてのテクスチャーメモリサーフェスが失われ、マネージドテクスチャーがビデオメモリからフラッシュされ、すべての状態情報が失われます。デバイスに対して IDirect3DDevice9::Reset メソッドを呼び出す前に、アプリケーションはそのデバイスに関連付けられた明示的なレンダーターゲット、深度ステンシルサーフェス、追加のスワップチェーン、ステートブロック、および D3DPOOL_DEFAULT のリソースをすべて解放しておく必要があります。

スワップチェーンにはフルスクリーンとウィンドウの 2 種類があります。新しいスワップチェーンがフルスクリーンの場合、アダプターは新しいサイズに一致するディスプレイモードに設定されます。

Direct3D 9 のアプリケーションでは、この呼び出しの最中に (たとえばこの呼び出しから戻る前に) メッセージが送信されることがあります。アプリケーションは、このときに Direct3D を呼び出さないように注意する必要があります。さらに、IDirect3DDevice9::Reset が失敗した場合に呼び出せる有効なメソッドは、IDirect3DDevice9::Reset、IDirect3DDevice9::TestCooperativeLevel、および各種の Release メンバー関数だけです。それ以外のメソッドを呼び出すと例外が発生する可能性があります。

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

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

IDirect3D9::CreateDevice、IDirect3DDevice9::Reset、IDirect3DDevice9::CreateAdditionalSwapChain を呼び出す際、ウィンドウモードのバックバッファーフォーマットには D3DFMT_UNKNOWN を指定できます。つまり、ウィンドウモードで IDirect3D9::CreateDevice を呼び出す前に、アプリケーションが現在のデスクトップのフォーマットを問い合わせる必要はありません。フルスクリーンモードの場合は、バックバッファーのフォーマットを指定する必要があります。BackBufferCount を 0 に設定する (BackBufferCount = 0) と、バックバッファーは 1 つになります。

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

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

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_PARAMETERS の hDeviceWindow メンバーを使用します。
pDirtyRegionRGNDATA*inスワップチェーンが D3DSWAPEFFECT_COPY で作成されていない限り、この値は NULL でなければなりません。スワップチェーンの詳細については、サーフェスのフリッピング (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 はフルスクリーンモードのアプリケーションでのみガンマランプを設定します。ガンマ補正の詳細については、ガンマ (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 が 1×1 ピクセルまでのすべてのサブレベルを生成します。 生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。
UsageDWORDinUsage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、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ボリュームテクスチャーの最上位レベルの幅 (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
HeightDWORDinボリュームテクスチャーの最上位レベルの高さ (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
DepthDWORDinボリュームテクスチャーの最上位レベルの深度 (ピクセル単位)。D3DCAPS9 の D3DPTEXTURECAPS_VOLUMEMAP_POW2 メンバーが設定されている場合、この値は 2 のべき乗でなければなりません。以降のレベルのピクセルサイズは、(各次元ごとに独立して) 前のレベルのピクセルサイズの半分を切り捨てた値になります。各次元は 1 ピクセルで下限が制限されます。つまり、2 で割った結果が 0 (ゼロ) になる場合は 1 が使用されます。ドライバーがサポートする最大サイズ (幅、高さ、深度) は、D3DCAPS9 の MaxVolumeExtent で確認できます。
LevelsDWORDinテクスチャーのレベル数。0 を指定すると、ミップマップ対応のボリュームテクスチャーをサポートするハードウェアに対して、Direct3D が 1x1 ピクセルまでのすべてのサブレベルを生成します。生成されたレベル数を確認するには IDirect3DBaseTexture9::GetLevelCount を呼び出してください。
UsageDWORDinUsage には 0 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、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 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、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 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateVertexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。詳細については「解説」を参照してください。
FVFDWORDinD3DFVF の組み合わせで、このバッファー内の頂点の頂点フォーマットを記述する用途指定子です。このパラメーターに有効な 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 頂点バッファー (Direct3D 9) を参照してください。

非 FVF バッファーは、マルチパスレンダリングや 1 パスでのマルチテクスチャーレンダリングにおいて、データをインターリーブするために使用できます。この場合、1 つのバッファーにジオメトリデータを格納し、他のバッファーにレンダリング対象の各テクスチャーのテクスチャー座標を格納します。レンダリング時には、ジオメトリデータを含むバッファーが、テクスチャー座標を含む各バッファーとインターリーブされます。代わりに FVF バッファーを使用すると、各バッファーにテクスチャーごとのテクスチャー座標データに加えて同一のジオメトリデータを格納する必要が生じます。その結果、採用する方式に応じて速度またはメモリのいずれかで不利になります。テクスチャー座標の詳細については、テクスチャー座標 (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 を指定でき、その場合は用途の指定がないことを示します。用途を指定する場合は、1 つ以上の D3DUSAGE 定数の組み合わせを使用します。CreateIndexBuffer の usage パラメーターは IDirect3D9::CreateDevice の動作フラグと整合させることが推奨されます。詳細については「解説」を参照してください。
FormatD3DFORMATin

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

項目 説明
D3DFMT_INDEX16 各インデックスは 16 ビットです。
D3DFMT_INDEX32 各インデックスは 32 ビットです。
PoolD3DPOOLinリソースを配置する有効なメモリクラスを表す D3DPOOL 列挙型のメンバー。
ppIndexBufferIDirect3DIndexBuffer9**out作成されたインデックスバッファーリソースを表す IDirect3DIndexBuffer9 インターフェースへのポインターのアドレス。
pSharedHandleHANDLE*inoutこのパラメーターは、Windows Vista 向けの Direct3D 9 ではリソースの共有に使用できます。リソースを共有しない場合は NULL を設定します。Windows Vista より前のオペレーティングシステム向けの Direct3D 9 では、このパラメーターは使用されません。NULL を設定してください。

戻り値

型: HRESULT

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

解説(Remarks)

インデックスバッファーは、インデックスを保持するために使用されるメモリリソースであり、サーフェスと頂点バッファーの両方に似ています。インデックスバッファーを使用すると、Direct3D は不要なデータコピーを回避し、想定される用途に最適なメモリ種別にバッファーを配置できます。

インデックスバッファーを使用するには、インデックスバッファーを作成してロックし、インデックスを書き込んでロックを解除し、IDirect3DDevice9::SetIndices に渡したうえで、頂点と頂点シェーダーを設定し、レンダリングのために IDirect3DDevice9::DrawIndexedPrimitive を呼び出します。

D3DCAPS9 構造体の MaxVertexIndex メンバーは、レンダリングに使用できるインデックスバッファーの種類を示します。

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_UPDATE や D3DLOCK_READONLY を指定せずに LockRect または IDirect3DVolumeTexture9::LockBox を呼び出したときに自動的に記録されます。また、IDirect3DDevice9::UpdateSurface のコピー先サーフェスもダーティとしてマークされます。

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


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

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


1x1

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


2x1, 1x1

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


4x2, 2x1, 1x1

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

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

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

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 に変換されたフロントバッファーの内容が格納されます。

アンチエイリアス処理されたスクリーンショットを取得できるのは、このメソッドだけです。

この関数は設計上きわめて低速であり、パフォーマンスが重要な処理経路では使用しないでください。

詳細については、ロストデバイスと取得データを参照してください。

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_NONE、D3DTEXF_POINT、D3DTEXF_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_X1R5G5B5、D3DFMT_A1R5G5B5、D3DFMT_R5G6B5、D3DFMT_X8R8G8B8、D3DFMT_A8R8G8B8、D3DFMT_YUY2、D3DFMT_G8R8_G8B8、D3DFMT_UYVY、D3DFMT_R8G8_B8G8、D3DFMT_R16F、D3DFMT_G16R16F、D3DFMT_A16B16G16R16F、D3DFMT_R32F、D3DFMT_G32R32F、D3DFMT_A32B32G32R32F のみです。

DirectX 7 または DirectX 8.x のドライバーを使用する場合、サポートされる YUV フォーマットは D3DFMT_UYVY と D3DFMT_YUY2 のみです。

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 メンバーに格納されています。複数レンダーターゲット (Direct3D 9) を参照してください。

新しいレンダーターゲットを設定すると、ビューポート (ビューポートとクリッピング (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 メンバーに格納されています。複数レンダーターゲット (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::BeginScene/IDirect3DDevice9::EndScene の対の内部で呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、 先に IDirect3DDevice9::EndScene を呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。

解説(Remarks)

アプリケーションは、レンダリングを行う前に IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了して 再度 IDirect3DDevice9::BeginScene を呼び出す前に IDirect3DDevice9::EndScene を呼び出す必要があります。

IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったことになり、 IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の IDirect3DDevice9::BeginScene が失敗していた場合、 IDirect3DDevice9::EndScene の呼び出しは失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。

表示 (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の連続する呼び出しの間には、 IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が 1 つあるべきです。IDirect3DDevice9::BeginScene は レンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のレンダリングをすべてランタイムへ送信した後に 1 回呼び出してください。表示の呼び出しの間に入れ子でない IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対が複数あっても 問題はありませんが、対が 2 つ以上あるとパフォーマンスが低下する可能性があります。 CPU とグラフィックスアクセラレーターの並列性を最大化するには、 表示の呼び出しよりできるだけ早い段階で IDirect3DDevice9::EndScene を呼び出すのが有利です。

vtbl 42 HRESULT EndScene()

IDirect3DDevice9::EndScene メソッド (d3d9.h) は、IDirect3DDevice9::BeginScene の呼び出しによって開始されたシーンを終了します。

戻り値

型: HRESULT

メソッドが成功した場合、戻り値は D3D_OK です。IDirect3DDevice9::BeginScene を IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対の内部で呼び出した場合、このメソッドは D3DERR_INVALIDCALL で失敗します。これは、先に IDirect3DDevice9::EndScene を呼び出さずに IDirect3DDevice9::BeginScene を 2 回呼び出した場合にのみ発生します。

解説(Remarks)

このメソッドが成功した時点で、シーンはドライバーによるレンダリングのためにキューに登録されています。これは同期的なメソッドではないため、このメソッドから戻った時点でシーンのレンダリングが完了していることは保証されません。

アプリケーションは、レンダリングを行う前に IDirect3DDevice9::BeginScene を呼び出し、レンダリングが完了して再度 IDirect3DDevice9::BeginScene を呼び出す前に IDirect3DDevice9::EndScene を呼び出す必要があります。

IDirect3DDevice9::BeginScene が失敗した場合、デバイスはシーンを開始できなかったことになり、IDirect3DDevice9::EndScene を呼び出す必要はありません。実際、直前の

IDirect3DDevice9::BeginScene が失敗していた場合、IDirect3DDevice9::EndScene の呼び出しは失敗します。これは、複数のスワップチェーンを作成するあらゆるアプリケーションに当てはまります。

表示 (IDirect3DDevice9::Present または IDirect3DSwapChain9::Present) の連続する呼び出しの間には、IDirect3DDevice9::BeginScene/IDirect3DDevice9::EndScene の対は多くとも 1 つであるべきです。IDirect3DDevice9::BeginScene はレンダリングを行う前に 1 回呼び出し、IDirect3DDevice9::EndScene は 1 フレーム分のレンダリングをすべてランタイムへ送信した後に 1 回呼び出してください。CPU とグラフィックスアクセラレーターの並列性を最大化するには、表示の呼び出しよりできるだけ早い段階で IDirect3DDevice9::EndScene を呼び出すのが有利です。

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) は、変換に関連するデバイス状態を 1 つ設定します。

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 は、画面の一部に描画するために使用できます。ビューポートの設定を有効にするため、ジオメトリを描画する前に必ず呼び出してください。

1 つのシーン内に複数のビューを描画するには、ビューごとに 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 に指定した値によって異なります。たとえば State が D3DRS_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::ProcessVertices、IDirect3DDevice9::DrawPrimitive、その他の描画関数による処理中) にクリッピングが有効な場合、Direct3D はすべての頂点についてクリップコードを計算します。クリップコードは D3DCS_* ビットの組み合わせです。頂点が特定のクリッピング平面の外側にある場合、クリップコードの対応するビットが設定されます。Direct3D は、ClipUnion メンバーと ClipIntersection メンバーを持つ D3DCLIPSTATUS9 を使用してクリップステータスを保持します。ClipUnion はすべての頂点クリップコードのビットごとの「OR」、ClipIntersection はすべての頂点クリップコードのビットごとの「AND」です。初期値は ClipUnion が 0、ClipIntersection が 0xFFFFFFFF です。D3DRS_CLIPPING が FALSE に設定されている場合、ClipUnion と ClipIntersection は 0 に設定されます。Direct3D は描画呼び出しの際にクリップステータスを更新します。特定のオブジェクトについてクリップステータスを計算するには、ClipUnion と ClipIntersection を初期値に設定してから描画を続けてください。

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

vtbl 63 HRESULT GetClipStatus(D3DCLIPSTATUS9* pClipStatus)

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

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

戻り値

型: HRESULT

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

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

解説(Remarks)

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

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

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

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 は使用できません。プール種別が D3DPOOL_SYSTEMMEM のテクスチャーについても、DevCaps に D3DDEVCAPS_TEXTURESYSTEMMEMORY が設定されていない限り 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サンプラーステージのインデックス。サンプラーステージの詳細については、vs_3_0 のサンプリングステージレジスター (DirectX HLSL) を参照してください。
TypeD3DSAMPLERSTATETYPEinこのパラメーターには、D3DSAMPLERSTATETYPE 列挙型の任意のメンバーを指定できます。
ValueDWORDin設定する状態値。この値の意味は Type パラメーターによって決まります。

戻り値

型: HRESULT

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

vtbl 70 HRESULT ValidateDevice(DWORD* pNumPasses)

IDirect3DDevice9::ValidateDevice メソッド (d3d9.h) は、現在のテクスチャーブレンディング処理と引数を 1 パスでレンダリングできるかどうかをデバイスについて報告します。

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_TFACTOR と D3DTA_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 に設定されている場合、デバッグランタイムは警告メッセージを出力します。

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

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)

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

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 における矩形の使用方法の詳細については、矩形 (Direct3D 9) を参照してください。

vtbl 76 HRESULT GetScissorRect(RECT* pRect)

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

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

戻り値

型: HRESULT

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

解説(Remarks)

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

DirectX における矩形の使用方法の詳細については、矩形 (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頂点バッファーの先頭から最初の頂点までのオフセット。シナリオ 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各頂点のデータのバイト数。この値を 0 にすることはできません。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を想定しています。このメソッドがサポートする頂点ストリームは 1 つだけです。この呼び出しの効果は、指定された頂点データのポインターとストライドを頂点ストリーム 0 として使用することです。現在の頂点シェーダーの宣言がストリーム 0 以外の頂点ストリームを参照していることは無効です。

IDirect3DDevice9::DrawPrimitiveUP の呼び出し後は、IDirect3DDevice9::GetStreamSource が参照するストリーム 0 の設定は NULL に設定されます。

IDirect3DDevice9::DrawPrimitiveUP に渡した頂点データは、呼び出し後まで保持しておく必要はありません。Direct3D は呼び出しから戻る前にそのデータへのアクセスを完了します。

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

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各頂点のデータのバイト数。この値を 0 にすることはできません。

戻り値

型: HRESULT

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

解説(Remarks)

このメソッドは、頂点データを頂点バッファーに格納できないアプリケーションでの使用を想定しています。このメソッドがサポートする頂点ストリームは 1 つだけで、ストリーム 0 として宣言されている必要があります。

IDirect3DDevice9::DrawIndexedPrimitiveUP の呼び出し後は、IDirect3DDevice9::GetStreamSource が参照するストリーム 0 の設定は NULL に設定されます。また、IDirect3DDevice9::SetIndices のインデックスバッファー設定も NULL に設定されます。

IDirect3DDevice9::DrawIndexedPrimitiveUP に渡した頂点データは、呼び出し後まで保持しておく必要はありません。Direct3D は呼び出しから戻る前にそのデータへのアクセスを完了します。

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

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 の各バージョン間で頂点宣言をどのように対応付けるかの詳細な説明については、頂点宣言 (Direct3D 9) のページを参照してください。

vtbl 87 HRESULT SetVertexDeclaration(IDirect3DVertexDeclaration9* pDecl)

IDirect3DDevice9::SetVertexDeclaration メソッド (d3d9helper.h) は、頂点宣言 (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 サンプルを参照してください。
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ストリームの先頭から頂点データの先頭までのオフセット (バイト単位)。デバイスがストリームオフセットをサポートしているかどうかを確認するには、D3DDEVCAPS2 の D3DDEVCAPS2_STREAMOFFSET 定数を参照してください。
StrideDWORDinコンポーネントのストライド (バイト単位)。「解説」を参照してください。

戻り値

型: HRESULT

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

解説(Remarks)

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

SetStreamSource を呼び出す際、通常はストライドが頂点サイズと等しいことが求められます。ただし、同一または類似のジオメトリの複数インスタンスを描画したい場合 (インスタンシングを使用して描画する場合など) もあります。そのような場合は、ストライドに 0 を指定して、頂点バッファーのオフセットを進めないようランタイムに指示します (つまり、すべてのインスタンスで同じ頂点データを使用します)。インスタンシングの詳細については、ジオメトリの複数インスタンスの効率的な描画 (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 から算出される頂点サイズと一致していなければなりません。宣言を使用する場合、ストライドは宣言から算出されるストリームサイズ以上である必要があります。

このメソッドを呼び出すと、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_INDEXEDDATA と D3DSTREAMSOURCE_INSTANCEDATA が定義されています。これらの定数の使用方法については、ジオメトリの複数インスタンスの効率的な描画 (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)

頂点シェーダーは、1 頂点につき複数回呼び出せるようになりました。非インデックスジオメトリの描画を参照してください。

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 指定が可能。