Partager via


ID2D1RenderTarget ::EndDraw, méthode (d2d1.h)

Termine les opérations de dessin sur la cible de rendu et indique l’état d’erreur actuel et les balises associées.

Syntaxe

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

Paramètres

[out, optional] tag1

Type : D2D1_TAG*

Lorsque cette méthode est retournée, contient la balise pour les opérations de dessin qui ont provoqué des erreurs ou 0 s’il n’y a pas eu d’erreurs. Ce paramètre est passé sans être initialisé.

[out, optional] tag2

Type : D2D1_TAG*

Lorsque cette méthode est retournée, contient la balise pour les opérations de dessin qui ont provoqué des erreurs ou 0 s’il n’y a pas eu d’erreurs. Ce paramètre est passé sans être initialisé.

Valeur retournée

Type : HRESULT

Si la méthode réussit, elle retourne S_OK. Sinon, il retourne un code d’erreur HRESULT et définit tag1 et tag2 sur les balises qui étaient actives lorsque l’erreur s’est produite.

Remarques

Les opérations de dessin ne peuvent être émises qu’entre un appel BeginDraw et EndDraw .

BeginDraw et EndDraw sont utilisés pour indiquer qu’une cible de rendu est en cours d’utilisation par le système Direct2D. Différentes implémentations d’ID2D1RenderTarget peuvent se comporter différemment lorsque BeginDraw est appelé. Un ID2D1BitmapRenderTarget peut être verrouillé entre les appels BeginDraw/EndDraw , une cible de rendu de surface DXGI peut être acquise sur BeginDraw et publiée sur EndDraw, tandis qu’un ID2D1HwndRenderTarget peut commencer le traitement par lot sur BeginDraw et peut être présent sur EndDraw, par exemple.

La méthode BeginDraw doit être appelée avant que les opérations de rendu puissent être appelées, bien que les opérations de définition d’état et de récupération d’état puissent être effectuées même en dehors de BeginDraw/EndDraw.

Une fois BeginDraw appelé, une cible de rendu génère normalement un lot de commandes de rendu, mais diffère le traitement de ces commandes jusqu’à ce qu’une mémoire tampon interne soit saturée, que la méthode Flush soit appelée ou que EndDraw soit appelé. La méthode EndDraw entraîne la fin de toutes les opérations de dessin par lot, puis retourne un HRESULT indiquant la réussite des opérations et, éventuellement, l’état de balise de la cible de rendu au moment où l’erreur s’est produite. La méthode EndDraw réussit toujours : elle ne doit pas être appelée deux fois, même si un endDraw précédent a entraîné un échec de HRESULT.

Si EndDraw est appelé sans appel correspondant à BeginDraw, il retourne une erreur indiquant que BeginDraw doit être appelé avant EndDraw.

L’appel de BeginDraw deux fois sur une cible de rendu place la cible dans un état d’erreur où rien de plus n’est dessiné et retourne un HRESULT et des informations d’erreur appropriés lorsque EndDraw est appelé.

Exemples

L’exemple suivant utilise un ID2D1HwndRenderTarget pour dessiner du texte dans une fenêtre.

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

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7, Windows Vista avec SP2 et Mise à jour de plateforme pour Windows Vista [applications de bureau | Applications UWP]
Serveur minimal pris en charge Windows Server 2008 R2, Windows Server 2008 avec SP2 et Platform Update pour Windows Server 2008 [applications de bureau | Applications UWP]
Plateforme cible Windows
En-tête d2d1.h
Bibliothèque D2d1.lib
DLL D2d1.dll

Voir aussi

ID2D1RenderTarget