IDXGISurface1::GetDC
GDI を使用して DXGI サーフェスにレンダリングできるようにするデバイス コンテキスト (DC) を返します。
HRESULT
GetDC(
BOOL Discard,
HDC *phdc
);
パラメータ
- Discard
true の場合、アプリケーションは GDI によるレンダリングを保持しません。false の場合は、デバイス コンテキストに対する前回のレンダリングがすべて保持されます。デバイス コンテキストを読み取るだけで、サーフェスに対するレンダリングは実行しない場合に、このフラグは最適です。 - phdc
GDI レンダリングの現在のデバイス コンテキストを表す HDC ハンドルへのポインターです。
戻り値
正常に実行された場合は S_OK を返し、失敗した場合はエラー コードを返します。
解説
GetDC メソッドを使用してデバイス コンテキストを取得すると、GDI を使用して DXGI サーフェスにレンダリングできます。GetDC メソッドは、GDI レンダリングで使用するサーフェスを用意し、DXGI テクノロジーと GDI テクノロジーどうしの相互動作を可能にします。
このメソッドを使用するときは、次の点に注意してください。
- サーフェスの作成では、サーフェスの D3D10_RESOURCE_MISC_GDI_COMPATIBLE フラグまたはスワップ チェーンの DXGI_SWAP_CHAIN_FLAG_GDI_COMPATIBLE フラグを使用します。これらのフラグを使用しないと、このメソッドは失敗します。
- 新しい Direct3D コマンドを発行する場合は、まずデバイスを解放し、IDXGISurface1::ReleaseDC メソッドを呼び出す必要があります。
- このメソッドで作成した未処理のデバイス コンテキストが存在していると、このメソッドは失敗します。
- サーフェスまたはスワップ チェーンのフォーマットは、DXGI_FORMAT_B8G8R8A8_UNORM_SRGB または DXGI_FORMAT_B8G8R8A8_UNORM であることが必要です。
- GetDC では、Direct3D パイプラインの出力結合でのレンダリング ターゲットがサーフェスにバインドされていません。GDI レンダリング後、Direct3D レンダリングの前にデバイスに対して OMSetRenderTargets を呼び出す必要があります。
- バッファーのサイズを変更する前に、未処理となっているすべてのデバイス コンテキストを解放する必要があります。
スワップ チェーンから IDXGISurface1 を取得することで、スワップ チェーンのインデックス 0 でバック バッファーに対して GetDC を呼び出すこともできます。次のコードは、このプロセスを示しています。
IDXGISwapChain* g_pSwapChain = NULL; IDXGISurface1* g_pSurface1 = NULL; ... //Setup the device and and swapchain g_pSwapChain->GetBuffer(0, __uuidof(IDXGISurface1), (void**) &g_pSurface1); g_pSurface1->GetDC( FALSE, &g_hDC ); ... //Draw on the DC using GDI ... //When finish drawing relase the DC g_pSurface1->ReleaseDC( NULL );
要件
ヘッダー: DXGI.h 宣言
ライブラリ: DXGI.lib 内容