ID2D1RenderTarget::EndDraw メソッド

レンダー ターゲットでの描画操作を終了し、現在のエラー状態と関連付けられたタグを示します。

構文

virtual HRESULT EndDraw(
  [out, optional]  D2D1_TAG *tag1 = NULL,
  [out, optional]  D2D1_TAG *tag2 = NULL
) = 0;

パラメーター

  • tag1 [out, optional]
    D2D1_TAG このメソッドが返されるときに、エラーの原因となった描画操作のタグが格納されます。エラーが発生しなかった場合は 0 が格納されます。このパラメーターは初期化されずに渡されます。
  • tag2 [out, optional]
    D2D1_TAG このメソッドが返されるときに、エラーの原因となった描画操作のタグが格納されます。エラーが発生しなかった場合は 0 が格納されます。このパラメーターは初期化されずに渡されます。

戻り値

HRESULT

メソッドが成功した場合は、S_OK が返されます。それ以外の場合は、HRESULT エラー コードが返され、tag1 および tag2 がエラー発生時にアクティブだったタグに設定されます。

解説

描画操作を発行できるのは、BeginDraw を呼び出してから EndDraw を呼び出すまでの間のみです。

BeginDraw と EndDraw は、レンダー ターゲットが Direct2D システムで使用中であることを示すために使用されます。BeginDraw が呼び出されるときの動作は、ID2D1RenderTarget の実装によって異なる場合があります。たとえば、ID2D1BitmapRenderTargetBeginDraw 呼び出しと EndDraw 呼び出しの間でロックされることがあります。DXGI サーフェイス レンダー ターゲットは BeginDraw で取得され、EndDraw で開放されるのに対して、ID2D1HwndRenderTargetBeginDraw でバッチ処理を開始し、EndDraw 上に存在する場合があります。

BeginDraw メソッドを呼び出さないと、レンダリング操作を呼び出すことはできません。ただし、状態設定操作と状態取得操作は、BeginDrawEndDraw の範囲外でも実行できます。

BeginDraw が呼び出された後、通常、レンダー ターゲットはレンダリング コマンドのバッチを作成しますが、これらのコマンドの処理は、内部バッファーがいっぱいになるか、Flush メソッドが呼び出されるか、または EndDraw が呼び出されるまで延期されます。EndDraw メソッドにより、バッチ処理された描画操作が完了したら、操作が正常に完了したことを示す HRESULT、および必要に応じてエラーが発生した時点のレンダー ターゲットのタグ状態が返されます。EndDraw メソッドは常に成功します。前の EndDraw が失敗の HRESULT になった場合でも、2 回呼び出さないでください。

対応する BeginDraw の呼び出しを指定せずに EndDraw を呼び出すと、EndDraw の前に BeginDraw を呼び出す必要があることを示すエラーが返されます。レンダー ターゲットで BeginDraw を 2 回呼び出すと、ターゲットがエラー状態になり、その以上何も描画されなくなります。さらに、EndDraw が呼び出されたときに、該当する HRESULT とエラー情報が返されます。

次の例では、ID2D1HwndRenderTarget を使用してウィンドウにテキストを描画します。完全な例については、「"Hello, World" サンプル」を参照してください。

  //  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 SP2 および Windows Vista 用のプラットフォーム更新プログラム

サーバーの最小要件

Windows Server 2008 R2, Windows Server 2008 SP2 および Windows Server 2008 用のプラットフォーム更新プログラム

ヘッダー

D2d1.h

ライブラリ

D2d1.lib

DLL

D2d1.dll

参照

ID2D1RenderTarget