Метод ID2D1RenderTarget::BeginDraw (d2d1.h)
Инициирует рисование для этого целевого объекта отрисовки.
Синтаксис
void BeginDraw();
Возвращаемое значение
None
Remarks
Операции рисования могут выполняться только между вызовами BeginDraw и EndDraw .
BeginDraw и EndDraw используются для указания того, что целевой объект отрисовки используется системой Direct2D. Различные реализации ID2D1RenderTarget могут вести себя по-разному при вызове BeginDraw . Id2D1BitmapRenderTarget может быть заблокирован между вызовами BeginDraw/EndDraw, целевой объект отображения поверхности DXGI может быть получен в BeginDraw и выпущен в EndDraw, в то время как ID2D1HwndRenderTarget может начать пакетную обработку в BeginDraw и может присутствовать, например, в EndDraw.
Перед вызовом операций отрисовки необходимо вызвать метод BeginDraw, хотя операции настройки состояния и извлечения состояния можно выполнять даже за пределами BeginDraw/EndDraw.
После вызова BeginDraw целевой объект отрисовки обычно создает пакет команд отрисовки, но откладывает обработку этих команд до заполнения внутреннего буфера, вызова метода Flush или до вызова EndDraw . Метод EndDraw приводит к завершению всех пакетных операций рисования, а затем возвращает HRESULT, указывающее на успешное выполнение операций и, при необходимости, состояние тега целевого объекта отрисовки на момент возникновения ошибки. Метод EndDraw всегда выполняется успешно: его не следует вызывать дважды, даже если предыдущий метод EndDraw привел к сбою HRESULT.
Если метод EndDraw вызывается без соответствующего вызова BeginDraw, он возвращает ошибку, указывающую на то, что BeginDraw необходимо вызвать перед EndDraw.
Вызов BeginDraw дважды для целевого объекта отрисовки переводит целевой объект в состояние ошибки, при котором больше ничего не рисуется, и возвращает соответствующие сведения об ошибке и HRESULT при вызове EndDraw .
Примеры
В следующем примере используется 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, Windows Vista с пакетом обновления 2 (SP2) и обновлением платформы для Windows Vista [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2008 R2, Windows Server 2008 с пакетом обновления 2 (SP2) и Обновление платформы для Windows Server 2008 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | d2d1.h |
Библиотека | D2d1.lib |
DLL | D2d1.dll |