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
筛选器类型。 允许的值为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 从一个呈现目标复制到另一个呈现目标。 如果源 rendertarget 为多重采样,则会导致对源 rendertarget 进行向下采样。 例如,可以:
- 创建多重采样呈现目标。
- 创建第二个大小相同(不是多重采样)的呈现目标。
- 使用 StretchRect 将多重采样 rendertarget (复制到第二个 rendertarget。
驱动程序支持
对于哪些图面组合对 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 |