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 (请参阅 D3DDEVCAPS2) 的 Direct3D 9 驱动程序。
- 源和目标图面必须是普通深度模具表面, (不是纹理,) (请参阅 IDirect3DDevice9::CreateDepthStencilSurface) 。
- 两个表面都不能丢弃。
- 必须 (复制整个图面,即:不允许) 子矩形副本。
- 不支持格式转换、拉伸和收缩。
- StretchRect 不能在 BeginScene/EndScene 对内部调用。
可以使用 StretchRect 从一个呈现目标复制到另一个呈现目标。 如果源呈现目标为多重采样,则会导致对源 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 |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |