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 が格納されます。このパラメーターは初期化されずに渡されます。
戻り値
メソッドが成功した場合は、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 を使用してウィンドウにテキストを描画します。完全な例については、「"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 |