IDirect3DSwapChain9::P resent 方法 (d3d9helper.h)
在交换链拥有的后台缓冲区序列中显示下一个缓冲区的内容。
语法
HRESULT Present(
[in] const RECT *pSourceRect,
[in] const RECT *pDestRect,
[in] HWND hDestWindowOverride,
[in] const RGNDATA *pDirtyRegion,
[in] DWORD dwFlags
);
参数
[in] pSourceRect
类型: const RECT*
指向源矩形的指针 (请参阅 RECT) 。 使用 NULL 呈现整个图面。 除非使用 D3DSWAPEFFECT_COPY 创建交换链,否则此值必须为 NULL 。 如果矩形超出源图面,则会将矩形剪裁到源图面。
[in] pDestRect
类型: const RECT*
指向客户端坐标中目标矩形的指针 (请参阅 RECT) 。 除非使用 D3DSWAPEFFECT_COPY 创建交换链,否则此值必须为 NULL 。 使用 NULL 填充整个工作区。 如果矩形超出目标工作区,则会将矩形剪裁到目标工作区。
[in] hDestWindowOverride
类型: HWND
目标窗口,其工作区作为此演示文稿的目标。 如果此值为 NULL,运行时将使用 D3DPRESENT_PARAMETERS 的 hDeviceWindow 成员进行演示。
[in] pDirtyRegion
类型: const RGNDATA*
除非使用 D3DSWAPEFFECT_COPY 创建交换链,否则此值必须为 NULL。 请参阅 翻转 Surface (Direct3D 9) 。
如果此值为非 NULL,则包含的区域用后台缓冲区坐标表示。 区域中的矩形是需要更新的最小像素集。 在优化演示文稿时,此方法通过仅复制区域中的像素或一些适当扩展的矩形集来考虑这些矩形。 这只是对优化的帮助,应用程序不应完全依赖于要复制的区域。 实现可以选择复制整个源矩形。
[in] dwFlags
类型: DWORD
允许应用程序请求在驱动程序报告无法安排演示时立即返回方法。 有效值为 0,或者 D3DPRESENT_DONOTWAIT 或 D3DPRESENT_LINEAR_CONTENT的任意组合。
- 如果 dwFlags = 0,则此方法的行为与 Direct3D 9 之前的行为相同。 演示将旋转到硬件可用,而不会返回错误。
- 如果 dwFlags = D3DPRESENT_DONOTWAIT,并且硬件正忙于处理或等待垂直同步间隔,则 该方法将返回D3DERR_WASSTILLDRAWING。
- 如果 dwFlags = D3DPRESENT_LINEAR_CONTENT,则会对窗口交换链执行从线性空间到 sRGB 的伽玛校正。 仅当驱动程序公开 D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION ( 看到 Gamma (Direct3D 9) ) 时, 此标志才会生效。 如果 backbuffer 格式为 16 位浮点,则应用程序应指定此标志,以便将窗口模式存在的与全屏伽玛行为相匹配。
返回值
类型: HRESULT
如果方法成功,则返回值D3D_OK。 如果方法失败,则返回值可以是以下值之一:D3DERR_DEVICELOST、D3DERR_DRIVERINTERNALERROR、D3DERR_INVALIDCALL、D3DERR_OUTOFVIDEOMEMORY、E_OUTOFMEMORY。
注解
Present 方法是 Present 的快捷方式。 Present 已更新为采用一个标志,允许应用程序请求在驱动程序报告无法安排演示文稿时立即返回方法。
如有必要,将应用拉伸操作,将源矩形内的像素传输到目标窗口工作区中的目标矩形。
如果在 BeginScene 和 EndScene 对之间调用,则 present 将失败,除非呈现目标不是当前呈现目标 (例如从创建附加交换链) 获取的后台缓冲区。 这是 Direct3D 9 的新行为。
要求
要求 | 值 |
---|---|
目标平台 | Windows |
标头 | d3d9helper.h (包括 D3D9.h) |
Library | D3D9.lib |