IDirect3DDevice9::StretchRect 方法 (d3d9.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) 。
  • 这两个图面都不可丢弃。
  • 必须复制整个图面 (即:不允许) 子矩形副本。
  • 不支持格式转换、拉伸和收缩。
  • 不能在 BeginScene/EndScene 对内部调用 StretchRect。
使用 StretchRect 对多重采样呈现目标进行向下采样

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

  • 创建多重采样呈现目标。
  • 创建第二个大小相同(不是多重采样)的呈现目标。
  • 使用 StretchRect 将多重采样 rendertarget (复制到第二个 rendertarget。
请注意,使用 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
标头 d3d9.h (包括 D3D9.h)
Library D3D9.lib

请参阅

IDirect3DDevice9

IDirect3DDevice9::BeginScene

IDirect3DDevice9::EndScene