Поделиться через


Метод 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. Различные реализации 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

См. также раздел

ID2D1RenderTarget