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 (请参阅 D3DDEVCAPS2) 的 Direct3D 9 驱动程序。
深度和模具表面的其他限制
  • 源和目标图面必须是普通深度模具表面, (不是纹理,) (请参阅 IDirect3DDevice9::CreateDepthStencilSurface) 。
  • 两个表面都不能丢弃。
  • 必须 (复制整个图面,即:不允许) 子矩形副本。
  • 不支持格式转换、拉伸和收缩。
  • StretchRect 不能在 BeginScene/EndScene 对内部调用。
使用 StretchRect 向下采样多重采样 Rendertartarget

可以使用 StretchRect 从一个呈现目标复制到另一个呈现目标。 如果源呈现目标为多重采样,则会导致对源 rendertarget 进行下采样。 例如,你可以:

  • 创建多采样呈现目标。
  • 创建第二个大小相同的呈现目标,该呈现目标不是多重采样的。
  • 使用 StretchRect 将多重采样呈现目标复制到第二个呈现目标 (。
请注意,使用 StretchRect 减少多重采样呈现目标时涉及的额外图面将导致性能下降。

驱动程序支持

对于哪些表面组合对 StretchRect 有效,存在许多限制。 因素包括驱动程序是 Direct3D 9 驱动程序还是旧驱动程序,以及操作是否会导致拉伸/收缩。 由于应用程序不会识别驱动程序是否为 Direct3D 9 驱动程序,因此运行时将自动设置新的上限,D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES上限 (请参阅 Direct3D 9 级驱动程序及更高版本的 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
屏幕外纯

要求

   
目标平台 Windows
标头 d3d9helper.h (包括 D3D9.h)
Library D3D9.lib

另请参阅

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene