IDirect3DDevice9::StretchRect メソッド (d3d9helper.h)
コピー元の四角形の内容をコピー先の四角形にコピーします。 コピー元の四角形は、コピーによって拡大およびフィルター処理できます。 この関数は、ビデオ ストリームの縦横比を変更するためによく使用されます。
構文
HRESULT StretchRect(
[in] IDirect3DSurface9 *pSourceSurface,
[in] const RECT *pSourceRect,
[in] IDirect3DSurface9 *pDestSurface,
[in] const RECT *pDestRect,
[in] D3DTEXTUREFILTERTYPE Filter
);
パラメーター
[in] pSourceSurface
種類: IDirect3DSurface9*
ソース サーフェスへのポインター。 「IDirect3DSurface9」を参照してください。
[in] pSourceRect
型: const RECT*
ソース四角形へのポインター。 このパラメーターに NULL を 指定すると、ソース サーフェス全体が使用されます。
[in] pDestSurface
種類: IDirect3DSurface9*
宛先サーフェスへのポインター。 「IDirect3DSurface9」を参照してください。
[in] pDestRect
型: const RECT*
移動先の四角形へのポインター。 このパラメーターに NULL を 指定すると、変換先サーフェス全体が使用されます。
[in] Filter
フィルターの種類。 許容値は、D3DTEXF_NONE、D3DTEXF_POINT、またはD3DTEXF_LINEARです。 詳細については、「 D3DTEXTUREFILTERTYPE」を参照してください。
戻り値
型: HRESULT
メソッドが成功した場合、戻り値は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 を使用して、あるレンダーターゲットから別のレンダーターゲットにコピーできます。 ソースレンダーターゲットがマルチサンプリングの場合、ソースレンダーターゲットがダウンサンプリングされます。 たとえば、次の場合があります。
- マルチサンプリングレンダーターゲットを作成します。
- マルチサンプリングされていない同じサイズの 2 つ目のレンダーターゲットを作成します。
- コピー (StretchRect を使用してマルチサンプル レンダーターゲットを 2 番目のレンダーターゲットにコピーします。
ドライバー サポート
StretchRect で有効なサーフェスの組み合わせには、多くの制限があります。 ドライバーが Direct3D 9 ドライバーか古いドライバーか、操作によってストレッチ/縮小が発生するかどうかが要因に含まれます。 ドライバーが Direct3D 9 ドライバーであるかどうかをアプリケーションで認識することは想定されていないため、ランタイムは Direct3D 9 レベルドライバー以降の新しいキャップ ( D3DDEVCAPS2 を参照) D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES自動的に設定します。
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 | いいえ | はい | はい | いいえ | |
画面外のプレーン | いいえ | はい | はい | いいえ |
要件
対象プラットフォーム | Windows |
ヘッダー | d3d9helper.h (D3D9.h を含む) |
Library | D3D9.lib |