Compartilhar via


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

Encerra as operações de desenho no destino de renderização e indica o estado de erro atual e as marcas associadas.

Sintaxe

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

Parâmetros

[out, optional] tag1

Tipo: D2D1_TAG*

Quando esse método retorna, contém a marca para operações de desenho que causaram erros ou 0 se não houver erros. Este parâmetro é passado não inicializado.

[out, optional] tag2

Tipo: D2D1_TAG*

Quando esse método retorna, contém a marca para operações de desenho que causaram erros ou 0 se não houver erros. Este parâmetro é passado não inicializado.

Retornar valor

Tipo: HRESULT

Se o método for bem-sucedido, ele retornará S_OK. Caso contrário, ele retorna um código de erro HRESULT e define tag1 e tag2 para as marcas que estavam ativas quando o erro ocorreu.

Comentários

As operações de desenho só podem ser emitidas entre uma chamada BeginDraw e EndDraw .

BeginDraw e EndDraw são usados para indicar que um destino de renderização está em uso pelo sistema Direct2D. Diferentes implementações de ID2D1RenderTarget podem se comportar de forma diferente quando BeginDraw é chamado. Um ID2D1BitmapRenderTarget pode ser bloqueado entre chamadas BeginDraw/EndDraw , um destino de renderização de superfície DXGI pode ser adquirido no BeginDraw e lançado no EndDraw, enquanto um ID2D1HwndRenderTarget pode começar a ser colocado em lote em BeginDraw e pode estar presente no EndDraw, por exemplo.

O método BeginDraw deve ser chamado antes que as operações de renderização possam ser chamadas, embora as operações de configuração de estado e recuperação de estado possam ser executadas mesmo fora do BeginDraw/EndDraw.

Depois que BeginDraw for chamado, um destino de renderização normalmente criará um lote de comandos de renderização, mas adiará o processamento desses comandos até que um buffer interno esteja cheio, o método Flush seja chamado ou até que EndDraw seja chamado. O método EndDraw faz com que todas as operações de desenho em lote sejam concluídas e retorna um HRESULT indicando o sucesso das operações e, opcionalmente, o estado da marca do destino de renderização no momento em que o erro ocorreu. O método EndDraw sempre é bem-sucedido: ele não deve ser chamado duas vezes, mesmo se um EndDraw anterior resultou em um HRESULT com falha.

Se EndDraw for chamado sem uma chamada correspondente para BeginDraw, ele retornará um erro indicando que BeginDraw deve ser chamado antes de EndDraw.

Chamar BeginDraw duas vezes em um destino de renderização coloca o destino em um estado de erro em que nada mais é desenhado e retorna um HRESULT apropriado e informações de erro quando EndDraw é chamado.

Exemplos

O exemplo a seguir usa um ID2D1HwndRenderTarget para desenhar texto em uma janela.

//  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 Valor
Cliente mínimo com suporte Windows 7, Windows Vista com SP2 e Atualização de Plataforma para Windows Vista [aplicativos da área de trabalho | Aplicativos UWP]
Servidor mínimo com suporte Windows Server 2008 R2, Windows Server 2008 com SP2 e Atualização de Plataforma para Windows Server 2008 [aplicativos da área de trabalho | Aplicativos UWP]
Plataforma de Destino Windows
Cabeçalho d2d1.h
Biblioteca D2d1.lib
DLL D2d1.dll

Confira também

ID2D1RenderTarget