ID2D1DCRenderTarget インターフェイス
GDI デバイス コンテキストに対して描画コマンドを発行します。
実装するタイミング
カスタム実装はサポートされません。
メンバー
ID2D1DCRenderTarget インターフェイス の継承元は次のとおりです: ID2D1RenderTarget. ID2D1DCRenderTarget は次のメンバーも定義します:
- メソッド
メソッド
ID2D1DCRenderTarget インターフェイス は次の項目を定義します: メソッド.
メソッド | 説明 |
---|---|
BindDC | 描画コマンドの発行先であるデバイス コンテキストにレンダー ターゲットをバインドします。 |
解説
ID2D1DCRenderTarget オブジェクトの作成
ID2D1DCRenderTarget を作成するには、ID2D1Factory::CreateDCRenderTarget メソッドを使用します。
DC レンダー ターゲットを使用してレンダリングする前に、その BindDC メソッドを使用して GDI DC と関連付ける必要があります。これは、異なる DC を使用するたびに、または描画する領域のサイズが変更されるたびに実行します。
DC レンダー ターゲットで GDI を使用できるようにするには、そのピクセル形式を DXGI_FORMAT_B8G8R8A8_UNORM、そのアルファ モードを D2D1_ALPHA_MODE_PREMULTIPLIED または D2D1_ALPHA_MODE_IGNORE に設定します。
アプリケーションでは、一度レンダー ターゲットを作成したら、アプリケーションが有効な間またはレンダー ターゲットの EndDraw メソッドから D2DERR_RECREATE_TARGET エラーが返されるまでは、そのターゲットを保持する必要があります。このエラーが発生すると、レンダー ターゲット (およびレンダー ターゲットによって作成されたすべてのリソース) を作成し直す必要があります。
ID2D1DCRenderTargets、GDI 変換、および Windows の右から左に記述される言語のビルド
ID2D1DCRenderTarget を使用すると、Direct2D コンテンツが内部ビットマップにレンダリングされた後、GDI を使用してそのビットマップが DC にレンダリングされます。
GDI は、GDI 変換 (SetWorldTransform メソッドを使用) または他の効果を、レンダー ターゲットで使用される同じ DC に適用できます。その場合、GDI は Direct2D によって生成されたビットマップを変換します。GDI 変換を使用して Direct2D コンテンツを変換すると、出力の表示品質が低下する可能性があります。これは、アンチエイリアシングとサブピクセル配置が既に計算されたビットマップを変換することになるためです。
たとえば、レンダー ターゲットを使用して、アンチエイリアシングされたジオメトリとテキストを含むシーンを描画するとします。GDI 変換を使用してスケール変換を DC に適用し、10 倍の大きさになるようにシーンを拡大すると、ピクセル化が行われ、端がぎざぎざになります (ただし、Direct2D を使用して同様の変換を適用した場合、シーンの表示品質は低下しません)。
場合によっては、Direct2D コンテンツの品質が低下する可能性のある追加処理が GDI で行われていることが明確でないこともあります。たとえば、Windows の右から左 (RTL) のビルドでは、ID2D1DCRenderTarget によってレンダリングされたコンテンツは、GDI がその宛先にコピーするときに水平方向に反転される可能性があります。コンテンツが実際に反転されるかどうかは、DC の現在の設定によって異なります。
レンダリングされるコンテンツの種類によって、反転を回避することもできます。Direct2D コンテンツに ClearType テキストが含まれている場合、この反転によりテキストの品質が低下します。
RTL レンダリングの動作を制御するには、SetLayout GDI 関数を使用します。ミラーリングを回避するには、次の例に示すように、SetLayout GDI 関数を呼び出し、2 番目のパラメーターの唯一の値として LAYOUT_BITMAPORIENTATIONPRESERVED を指定します (LAYOUT_RTL と組み合わせて使用しないでください)。
SetLayout(m_hwnd, LAYOUT_BITMAPORIENTATIONPRESERVED);
例
次のコードでは、DC レンダー ターゲットを作成します。
// Create a DC render target.
D2D1_RENDER_TARGET_PROPERTIES props = D2D1::RenderTargetProperties(
D2D1_RENDER_TARGET_TYPE_DEFAULT,
D2D1::PixelFormat(
DXGI_FORMAT_B8G8R8A8_UNORM,
D2D1_ALPHA_MODE_IGNORE),
0,
0,
D2D1_RENDER_TARGET_USAGE_NONE,
D2D1_FEATURE_LEVEL_DEFAULT
);
hr = m_pD2DFactory->CreateDCRenderTarget(&props, &m_pDCRT);
上記のコードでは、m_pD2DFactory は ID2D1Factory へのポインター、m_pDCRT は ID2D1DCRenderTarget へのポインターです。
次のコード例では、DC を ID2D1DCRenderTarget にバインドします。
HRESULT DemoApp::OnRender(const PAINTSTRUCT &ps)
{
// Get the dimensions of the client drawing area.
GetClientRect(m_hwnd, &rc);
// Bind the DC to the DC render target.
hr = m_pDCRT->BindDC(ps.hdc, &rc);
完全なコードについては、「Direct2D GDI 相互運用機能のサンプル」を参照してください。Direct2D で GDI を使用する方法の詳細については、「Direct2D と GDI の相互運用性の概要」を参照してください。
要件
クライアントの最小要件 |
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 |