ID2D1RenderTarget::EndDraw 方法 (d2d1.h)
结束对呈现目标的绘图操作,并指示当前错误状态和相关标记。
语法
HRESULT EndDraw(
[out, optional] D2D1_TAG *tag1,
[out, optional] D2D1_TAG *tag2
);
参数
[out, optional] tag1
类型: D2D1_TAG*
此方法返回时,包含导致错误的绘图操作的 标记;如果没有错误,则包含 0。 此参数未经初始化即被传递。
[out, optional] tag2
类型: D2D1_TAG*
此方法返回时,包含导致错误的绘图操作的 标记;如果没有错误,则包含 0。 此参数未经初始化即被传递。
返回值
类型: HRESULT
如果该方法成功,则返回 S_OK。 否则,它将返回 HRESULT 错误代码,并将 tag1 和 tag2 设置为发生错误时处于活动状态的标记。
注解
只能在 BeginDraw 和 EndDraw 调用之间发出绘图操作。
BeginDraw 和 EndDraw 用于指示 Direct2D 系统正在使用呈现器目标。 调用 BeginDraw 时,ID2D1RenderTarget 的不同实现的行为可能会有所不同。 ID2D1BitmapRenderTarget 可能在 BeginDraw EndDraw/ 调用之间锁定,DXGI 图面呈现目标可能在 BeginDraw 上获取并在 EndDraw 上释放,而 ID2D1HwndRenderTarget 可能在 BeginDraw 开始批处理,并可能显示在 EndDraw 上。
必须先调用 BeginDraw 方法,然后才能调用呈现操作,但即使在 BeginDraw/EndDraw 之外也可以执行状态设置和状态检索操作。
调用 BeginDraw 后,呈现器目标通常会生成一批呈现命令,但会延迟这些命令的处理,直到内部缓冲区已满、调用 Flush 方法或调用 EndDraw 为止。 EndDraw 方法会导致完成任何批处理的绘图操作,然后返回一个 HRESULT,指示操作成功,并选择性地指示错误发生时呈现目标的标记状态。 EndDraw 方法始终成功:即使以前的 EndDraw 导致 HRESULT 失败,也不应调用它两次。
如果在调用 EndDraw 时没有匹配对 BeginDraw 的调用,它将返回一个错误,指示必须在 EndDraw 之前调用 BeginDraw。
在呈现器目标上调用 BeginDraw 两次会将目标置于错误状态,其中不会进一步绘制任何内容,并在调用 EndDraw 时返回相应的 HRESULT 和错误信息。
示例
以下示例使用 ID2D1HwndRenderTarget 将文本绘制到窗口。
// Called whenever the application needs to display the client
// window. This method writes "Hello, World"
//
// Note that this function will automatically discard device-specific
// resources if the Direct3D device disappears during function
// invocation, and will recreate the resources the next time it's
// invoked.
//
HRESULT DemoApp::OnRender()
{
HRESULT hr;
hr = CreateDeviceResources();
if (SUCCEEDED(hr))
{
static const WCHAR sc_helloWorld[] = L"Hello, World!";
// Retrieve the size of the render target.
D2D1_SIZE_F renderTargetSize = m_pRenderTarget->GetSize();
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
m_pRenderTarget->DrawText(
sc_helloWorld,
ARRAYSIZE(sc_helloWorld) - 1,
m_pTextFormat,
D2D1::RectF(0, 0, renderTargetSize.width, renderTargetSize.height),
m_pBlackBrush
);
hr = m_pRenderTarget->EndDraw();
if (hr == D2DERR_RECREATE_TARGET)
{
hr = S_OK;
DiscardDeviceResources();
}
}
return hr;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7、带 SP2 的 Windows Vista 和适用于 Windows Vista 的平台更新 [桌面应用 |UWP 应用] |
最低受支持的服务器 | Windows Server 2008 R2、Windows Server 2008 SP2 和适用于 Windows Server 2008 的平台更新 [桌面应用 |UWP 应用] |
目标平台 | Windows |
标头 | d2d1.h |
Library | D2d1.lib |
DLL | D2d1.dll |