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 を使用して Multisample Rendertarget をダウンサンプリングする場合に発生する追加のサーフェスを使用すると、パフォーマンスへの影響が発生します。

ドライバーのサポート

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 宣言

ライブラリ: D3D9.lib 内容

関連項目

IDirect3DDevice9::BeginScene, IDirect3DDevice9::EndScene