Método ID2D1RenderTarget::EndDraw (d2d1.h)

Finaliza las operaciones de dibujo en el destino de representación e indica el estado de error actual y las etiquetas asociadas.

Sintaxis

HRESULT EndDraw(
  [out, optional] D2D1_TAG *tag1,
  [out, optional] D2D1_TAG *tag2
);

Parámetros

[out, optional] tag1

Tipo: D2D1_TAG*

Cuando este método devuelve , contiene la etiqueta para las operaciones de dibujo que provocaron errores o 0 si no había errores. Este parámetro se pasa sin inicializar.

[out, optional] tag2

Tipo: D2D1_TAG*

Cuando este método devuelve , contiene la etiqueta para las operaciones de dibujo que provocaron errores o 0 si no había errores. Este parámetro se pasa sin inicializar.

Valor devuelto

Tipo: HRESULT

Si el método se realiza correctamente, devuelve S_OK. De lo contrario, devuelve un código de error HRESULT y establece tag1 y tag2 en las etiquetas que estaban activas cuando se produjo el error.

Comentarios

Las operaciones de dibujo solo se pueden emitir entre una llamada BeginDraw y EndDraw .

BeginDraw y EndDraw se usan para indicar que el sistema Direct2D usa un destino de representación. Las diferentes implementaciones de ID2D1RenderTarget pueden comportarse de forma diferente cuando se llama a BeginDraw . Un ID2D1BitmapRenderTarget puede bloquearse entre las llamadas a BeginDraw EndDraw/, es posible que se adquiera un destino de representación de superficie DXGI en BeginDraw y se libere en EndDraw, mientras que un ID2D1HwndRenderTarget puede comenzar a procesar por lotes en BeginDraw y puede presentarse enEndDraw, por ejemplo.

Se debe llamar al método BeginDraw antes de llamar a las operaciones de representación, aunque las operaciones de configuración de estado y recuperación de estado se pueden realizar incluso fuera de BeginDraw EndDraw/.

Después de llamar a BeginDraw , un destino de representación normalmente creará un lote de comandos de representación, pero aplazará el procesamiento de estos comandos hasta que un búfer interno esté lleno, se llame al método Flush o hasta que se llame a EndDraw . El método EndDraw hace que se completen las operaciones de dibujo por lotes y, a continuación, devuelve un VALOR HRESULT que indica el éxito de las operaciones y, opcionalmente, el estado de etiqueta del destino de representación en el momento en que se produjo el error. El método EndDraw siempre se realiza correctamente: no se debe llamar dos veces incluso si un EndDraw anterior produjo un error HRESULT.

Si se llama a EndDraw sin una llamada coincidente a BeginDraw, devuelve un error que indica que se debe llamar a BeginDraw antes de EndDraw.

La llamada a BeginDraw dos veces en un destino de representación coloca el destino en un estado de error donde no se dibuja nada más y devuelve una HRESULT y información de error adecuada cuando se llama a EndDraw .

Ejemplos

En el ejemplo siguiente se usa un ID2D1HwndRenderTarget para dibujar texto en una ventana.

//  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;
}

Requisitos

Requisito Value
Cliente mínimo compatible Windows 7, Windows Vista con SP2 y Platform Update para Windows Vista [aplicaciones de escritorio | Aplicaciones para UWP]
Servidor mínimo compatible Windows Server 2008 R2, Windows Server 2008 con SP2 y Actualización de plataforma para Windows Server 2008 [aplicaciones de escritorio | Aplicaciones para UWP]
Plataforma de destino Windows
Encabezado d2d1.h
Library D2d1.lib
Archivo DLL D2d1.dll

Consulte también

ID2D1RenderTarget