ID2D1RenderTarget::BeginDraw 方法 (d2d1.h)
启动对此呈现目标的绘图。
语法
void BeginDraw();
返回值
无
备注
绘图操作只能在 BeginDraw 和 EndDraw 调用之间发出。
BeginDraw 和 EndDraw 用于指示 Direct2D 系统正在使用呈现器目标。 调用 BeginDraw 时,ID2D1RenderTarget 的不同实现的行为可能会有所不同。 ID2D1BitmapRenderTarget 可能在 BeginDraw/调用之间锁定,DXGI 表面呈现目标可能在 BeginDraw 上获取并在 EndDraw 上发布,而 ID2D1HwndRenderTarget 可能会在 BeginDraw 开始批处理,并可能显示在 EndDraw 上,例如。
必须先调用 BeginDraw 方法,然后才能调用呈现操作,但状态设置和状态检索操作甚至可以在 BeginDraw/EndDraw 外部执行。
调用 BeginDraw 后,呈现器目标通常会生成一批呈现命令,但会延迟这些命令的处理,直到内部缓冲区已满、 调用 Flush 方法或调用 EndDraw 为止。 EndDraw 方法会导致完成任何批处理的绘图操作,然后返回一个 HRESULT,指示操作成功,以及(可选)错误发生时呈现目标的标记状态。 EndDraw 方法始终成功:即使以前的 EndDraw 导致 HRESULT 失败,也不应调用它两次。
如果在未匹配调用 BeginDraw 的情况下调用 EndDraw,它将返回一个错误,指示必须在 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 |