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

型: D3DTEXTUREFILTERTYPE

フィルターの種類。 許容値は、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 を使用してマルチサンプル レンダーターゲットをダウンサンプリングする

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

  • マルチサンプリングレンダーターゲットを作成します。
  • マルチサンプリングされていない同じサイズの 2 つ目のレンダーターゲットを作成します。
  • コピー (StretchRect を使用してマルチサンプル レンダーターゲットを 2 番目のレンダーターゲットにコピーします。
StretchRect を使用してマルチサンプル レンダーターゲットをダウンサンプリングすることに関係する追加のサーフェスを使用すると、パフォーマンスが低下することに注意してください。

ドライバー サポート

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

関連項目

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene