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 エラー コードを返し、エラーが発生したときにアクティブだったタグに tag1 と tag2 を設定します。
注釈
描画操作は、 BeginDraw 呼び出しと EndDraw 呼び出しの間でのみ発行できます。
BeginDraw と EndDraw は、Direct2D システムでレンダー ターゲットが使用されていることを示すために使用されます。 BeginDraw が呼び出されると、ID2D1RenderTarget の実装の動作が異なる場合があります。 ID2D1BitmapRenderTarget は BeginDraw/EndDraw 呼び出しの間でロックされ、DXGI サーフェス レンダー ターゲットは BeginDraw で取得され、EndDraw でリリースされる場合があります。一方、ID2D1HwndRenderTarget はBeginDraw でバッチ処理を開始し、たとえば EndDraw に存在する場合があります。
BeginDraw メソッドは、レンダリング操作を呼び出す前に呼び出す必要がありますが、状態設定および状態取得操作は BeginDraw/EndDraw の外部でも実行できます。
BeginDraw が呼び出されると、レンダー ターゲットは通常、レンダリング コマンドのバッチを構築しますが、内部バッファーがいっぱいになるか、Flush メソッドが呼び出されるか、EndDraw が呼び出されるまで、これらのコマンドの処理を延期します。 EndDraw メソッドを使用すると、バッチ描画操作が完了し、操作の成功を示す HRESULT が返され、必要に応じて、エラーが発生した時点でのレンダー ターゲットのタグ状態が返されます。 EndDraw メソッドは常に成功します。以前の EndDraw で HRESULT が失敗した場合でも、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 |