IDirect3DDevice9::StretchRect
コピー元の矩形のコンテンツをコピー先のコンテンツにコピーします。コピーにより、コピー元の矩形を拡大およびフィルタリングできます。この関数は、多くの場合、ビデオ ストリームのアスペクト比を変更するために使用されます。
HRESULT
StretchRect(
IDirect3DSurface9 * pSourceSurface,
CONST RECT * pSourceRect,
IDirect3DSurface9 * pDestSurface,
CONST RECT * pDestRect,
D3DTEXTUREFILTERTYPE Filter
);
パラメータ
- pSourceSurface
ソース サーフェスへのポインターです。「IDirect3DSurface9」を参照してください。 - pSourceRect
ソースの矩形へのポインターです。このパラメーターに NULL を指定すると、ソース サーフェス全体が使用されます。 - pDestSurface
デスティネーション サーフェスへのポインターです。「IDirect3DSurface9」を参照してください。 - pDestRect
デスティネーション矩形へのポインターです。このパラメーターに NULL を指定すると、デスティネーション サーフェス全体が使用されます。 - Filter
フィルター タイプです。使用できる値は、D3DTEXF_NONE、D3DTEXF_POINT、または D3DTEXF_LINEAR です。詳細については、「D3DTEXTUREFILTERTYPE」を参照してください。
戻り値
メソッドが成功した場合は、D3D_OK を返します。失敗した場合、次のいずれかを返します。D3DERR_INVALIDCALL
解説
StretchRect の制限
- ドライバーのサポートはさまざまです。どのドライバーがどのソース フォーマットおよびデスティネーション フォーマットをサポートするかについては、下記のドライバー サポートのセクションを参照してください。
- ソース サーフェスとデスティネーション サーフェスは、既定のメモリー プールで作成する必要があります。
- フィルタリングが指定されている場合、適切なフィルター キャップを設定する必要があります (「D3DCAPS9」の「StretchRectFilterCaps」を参照してください)。
- 同じサーフェス上のソース矩形とデスティネーション矩形間では、伸縮はサポートされません。
- デスティネーション サーフェスがオフスクリーン プレーン サーフェスであり、ソース サーフェスがそうではない場合、伸縮はサポートされません。
- ソース矩形とデスティネーション矩形間でいずれかのサーフェスが圧縮フォーマットである場合、伸縮することはできません (「圧縮テクスチャーの使用 (Direct3D 9)」を参照してください)。
- 伸縮では、YUV から高精度 RGBA へのカラー空間変換のみがサポートされます。カラー変換のサポートはソフトウェア エミュレーションでサポートされていないため、IDirect3D9::CheckDeviceFormatConversion を使用してカラー変換のサポートについてハードウェアをテストします。
- ソースまたはデスティネーション サーフェスがテクスチャー サーフェス (またはキューブ テクスチャー サーフェス) である場合、D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES をサポートする Direct3D 9 ドライバーを使用する必要があります (「D3DDEVCAPS2」を参照してください)。
深度サーフェスおよびステンシル サーフェスの追加の制限
- ソースおよびデスティネーション サーフェスは、テクスチャーではなくプレーン深度ステンシル サーフェスである必要があります (「IDirect3DDevice9::CreateDepthStencilSurface」を参照してください)。
- いずれのサーフェスも破棄できません。
- サーフェス全体をコピーする必要があります (つまり、サブ矩形をコピーすることはできません)。
- フォーマット変換、拡張、縮小はサポートされません。
- BeginScene/EndScene ペアの内部で StretchRect を呼び出すことはできません。
StretchRect の使用による Multisample Rendertarget のダウンサンプリング
StretchRect を使用してある矩形から別の矩形にコピーできます。ソース レンダー ターゲットがマルチサンプリングされている場合、これによりソース レンダリングがダウンサンプリングされます。たとえば、次の操作を行うことができます。
- マルチサンプリングされたレンダー ターゲットを作成する。
- 同じサイズの、マルチサンプリングされた第 2 のレンダー ターゲットを作成する。
- コピーする (StretchRect を使用して、マルチサンプリング レンダー ターゲットを第 2 のレンダー ターゲットにコピーします)。
ドライバーのサポート
StretchRect で有効なサーフェスの組み合わせについては、多くの制限があります。これらの要因には、ドライバーが Direct3D 9 ドライバーであるか古いドライバーであるかどうかや、操作で伸縮が行われるかどうかなどがあります。アプリケーションはドライバーが Direct3D 9 ドライバーであるかどうかを認識しないため、ランタイムは Direct3D 9 レベル以上のドライバーに対して新しいキャップ D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES キャップ (「D3DDEVCAPS2」を参照) を自動的に設定します。
DirectX 8 ドライバー (伸縮なし) | |||||
---|---|---|---|---|---|
Dest フォーマット | |||||
テクスチャー | RT テクスチャー | RT | オフスクリーン プレーン | ||
Src フォーマット | テクスチャー | 不可 | 不可 | 不可 | 不可 |
RT テクスチャー | 不可 | 可 | 可 | 不可 | |
RT | 不可 | 可 | 可 | 不可 | |
オフスクリーン プレーン | 可 | 可 | 可 | 可 |
DirectX 8 ドライバー (伸縮あり) | |||||
---|---|---|---|---|---|
Dest フォーマット | |||||
テクスチャー | RT テクスチャー | RT | オフスクリーン プレーン | ||
Src フォーマット | テクスチャー | 不可 | 不可 | 不可 | 不可 |
RT テクスチャー | 不可 | 不可 | 不可 | 不可 | |
RT | 不可 | 可 | 可 | 不可 | |
オフスクリーン プレーン | 不可 | 可 | 可 | 不可 |
Direct3D 9 ドライバー (伸縮なし) | |||||
---|---|---|---|---|---|
Dest フォーマット | |||||
テクスチャー | RT テクスチャー | RT | オフスクリーン プレーン | ||
Src フォーマット | テクスチャー | 不可 | 可 | 可 | 不可 |
RT テクスチャー | 不可 | 可 | 可 | 不可 | |
RT | 不可 | 可 | 可 | 不可 | |
オフスクリーン プレーン | 不可 | 可 | 可 | 可 |
Direct3D 9 ドライバー (伸縮あり) | |||||
---|---|---|---|---|---|
Dest フォーマット | |||||
テクスチャー | RT テクスチャー | RT | オフスクリーン プレーン | ||
Src フォーマット | テクスチャー | 不可 | 可 | 可 | 不可 |
RT テクスチャー | 不可 | 可 | 可 | 不可 | |
RT | 不可 | 可 | 可 | 不可 | |
オフスクリーン プレーン | 不可 | 可 | 可 | 不可 |
要件
ヘッダー: D3D9.h 宣言