ID2D1RenderTarget::EndDraw メソッド (d2d1.h)

レンダー ターゲットに対する描画操作を終了し、現在のエラー状態と関連するタグを示します。

構文

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

パラメーター

[out, optional] tag1

種類: D2D1_TAG*

このメソッドが戻るとき、 には、エラーの原因となった描画操作のタグ、またはエラーが発生しなかった場合は 0 が含まれます。 このパラメーターは初期化せずに渡されます。

[out, optional] tag2

種類: D2D1_TAG*

このメソッドが戻るとき、 には、エラーの原因となった描画操作のタグ、またはエラーが発生しなかった場合は 0 が含まれます。 このパラメーターは初期化せずに渡されます。

戻り値

種類: HRESULT

メソッドが成功すると、 S_OKが返されます。 それ以外の場合は、 HRESULT エラー コードを返し、エラーが発生したときにアクティブだったタグに tag1tag2 を設定します。

注釈

描画操作は、 BeginDraw 呼び出しと EndDraw 呼び出しの間でのみ発行できます。

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

BeginDraw メソッドは、レンダリング操作を呼び出す前に呼び出す必要がありますが、状態設定および状態取得操作は BeginDraw/EndDraw の外部でも実行できます。

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

BeginDraw の呼び出しが一致せずに EndDraw が呼び出された場合は、EndDraw の前に BeginDraw を呼び出す必要があることを示すエラーが返されます。

レンダー ターゲットで BeginDraw を 2 回呼び出すと、ターゲットは何も描画されないエラー状態になり、EndDraw が呼び出されたときに適切な HRESULT とエラー情報が返されます。

次の例では、 ID2D1HwndRenderTarget を 使用してウィンドウにテキストを描画します。

//  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 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows Server 2008 R2、Windows Server 2008 SP2 および Windows Server 2008 用プラットフォーム更新プログラム [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー d2d1.h
Library D2d1.lib
[DLL] D2d1.dll

こちらもご覧ください

ID2D1RenderTarget