Condividi tramite


Metodo ID2D1RenderTarget::EndDraw (d2d1.h)

Termina le operazioni di disegno sulla destinazione di rendering e indica lo stato di errore corrente e i tag associati.

Sintassi

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

Parametri

[out, optional] tag1

Tipo: D2D1_TAG*

Quando questo metodo restituisce, contiene il tag per le operazioni di disegno che hanno causato errori o 0 se non sono presenti errori. Questo parametro viene passato non inizializzato.

[out, optional] tag2

Tipo: D2D1_TAG*

Quando questo metodo restituisce, contiene il tag per le operazioni di disegno che hanno causato errori o 0 se non sono presenti errori. Questo parametro viene passato non inizializzato.

Valore restituito

Tipo: HRESULT

Se il metodo ha esito positivo, restituisce S_OK. In caso contrario, restituisce un codice di errore HRESULT e imposta tag1 e tag2 sui tag attivi quando si è verificato l'errore.

Commenti

Le operazioni di disegno possono essere rilasciate solo tra una chiamata BeginDraw e EndDraw .

BeginDraw e EndDraw vengono usati per indicare che una destinazione di rendering è in uso dal sistema Direct2D. Le diverse implementazioni di ID2D1RenderTarget potrebbero comportarsi in modo diverso quando BeginDraw viene chiamato. Un ID2D1BitmapRenderTarget può essere bloccato tra/ le chiamate BeginDrawEndDraw, una destinazione di rendering della superficie DXGI potrebbe essere acquisita in BeginDraw e rilasciata in EndDraw, mentre un ID2D1HwndRenderTarget può iniziare a eseguire il batch in BeginDraw e può essere presente in EndDraw, ad esempio.

Il metodo BeginDraw deve essere chiamato prima che sia possibile chiamare le operazioni di rendering, anche se è possibile eseguire operazioni di recupero dello stato e di recupero dello stato anche all'esterno di BeginDraw EndDraw/.

Dopo aver chiamato BeginDraw , una destinazione di rendering genererà un batch di comandi di rendering, ma rinvia l'elaborazione di questi comandi fino a quando un buffer interno non è completo, il metodo Flush viene chiamato o fino a quando EndDraw viene chiamato. Il metodo EndDraw causa il completamento di tutte le operazioni di disegno in batch e quindi restituisce un HRESULT che indica l'esito positivo delle operazioni e, facoltativamente, lo stato tag della destinazione di rendering al momento dell'errore. Il metodo EndDraw ha sempre esito positivo: non deve essere chiamato due volte anche se un endDraw precedente ha generato un errore HRESULT.

Se EndDraw viene chiamato senza una chiamata corrispondente a BeginDraw, restituisce un errore che indica che BeginDraw deve essere chiamato prima di EndDraw.

La chiamata a BeginDraw due volte in una destinazione di rendering inserisce la destinazione in uno stato di errore in cui non viene disegnato altro e restituisce informazioni di errore e HRESULT appropriate quando viene chiamato EndDraw .

Esempio

Nell'esempio seguente viene usato un ID2D1HwndRenderTarget per disegnare testo in una finestra.

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

Requisiti

Requisito Valore
Client minimo supportato Windows 7, Windows Vista con SP2 e Aggiornamento della piattaforma per Windows Vista [app desktop | App UWP]
Server minimo supportato Windows Server 2008 R2, Windows Server 2008 con SP2 e Platform Update per Windows Server 2008 [app desktop | App UWP]
Piattaforma di destinazione Windows
Intestazione d2d1.h
Libreria D2d1.lib
DLL D2d1.dll

Vedi anche

ID2D1RenderTarget