Win32 API 日本語リファレンス
ホームGraphics.Dxgi › IDXGISurface1

IDXGISurface1

COM
IID4ae63092-6327-4c1b-80ae-bfe12ea32b86継承元IDXGISurface自前メソッド開始 vtbl11

公式ドキュメント

IDXGISurface1 インターフェースは、Windows Graphics Device Interface (GDI) を使用して Microsoft DirectX Graphics Infrastructure (DXGI) サーフェスへ描画するためのサポートを追加することで、IDXGISurface を拡張します。

解説(Remarks)

このインターフェースは、Windows Vista および Windows Server 2008 に搭載された DXGI 1.0 ではサポートされません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) (KB 971644) と Windows Server 2008 (KB 971512) 向けの更新プログラムとして利用できます。

イメージデータオブジェクトはメモリ上の 2D 領域であり、一般にサーフェスと呼ばれます。出力(アウトプット)からサーフェスを取得するには、IDXGIOutput::GetDisplaySurfaceData を呼び出します。次に、IDXGIOutput::GetDisplaySurfaceData が返す IDXGISurface オブジェクトに対して QueryInterface を呼び出し、IDXGISurface1 インターフェースを取得します。

IDXGISurface をサポートするオブジェクトはすべて IDXGISurface1 もサポートします。

ランタイムは、サーフェスを表す Direct3D リソースオブジェクトを作成する際に、IDXGISurface1 インターフェースを自動的に作成します。たとえば、2D テクスチャを作成するために ID3D11Device::CreateTexture2D または ID3D10Device::CreateTexture2D を呼び出すと、ランタイムは IDXGISurface1 インターフェースを作成します。2D テクスチャサーフェスを表す IDXGISurface1 インターフェースを取得するには、ID3D11Texture2D::QueryInterface または ID3D10Texture2D::QueryInterface を呼び出します。この呼び出しでは、IDXGISurface1 の識別子を渡す必要があります。2D テクスチャが単一の MIP マップレベルのみを持ち、テクスチャの配列で構成されていない場合、QueryInterface は成功し、IDXGISurface1 インターフェースポインターへのポインターを返します。それ以外の場合、QueryInterface は失敗し、IDXGISurface1 へのポインターを返しません。

メソッド 2

vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。

vtbl 11 HRESULT GetDC(BOOL Discard, HDC* phdc)

Windows Graphics Device Interface (GDI) を使用して Microsoft DirectX Graphics Infrastructure (DXGI) サーフェスへ描画できるデバイスコンテキスト (DC) を返します。

DiscardBOOLinGDI DC 内で Direct3D のコンテンツを保持するかどうかを指定するブール値です。TRUE はランタイムに対して GDI DC 内で Direct3D のコンテンツを保持しないよう指示します。つまり、ランタイムは Direct3D のコンテンツを破棄します。FALSE は Direct3D のコンテンツが GDI DC 内で利用可能であることを保証します。
phdcHDC*outGDI 描画のための現在のデバイスコンテキストを表す HDC ハンドルへのポインターです。

戻り値

型: HRESULT

成功した場合は S_OK を返します。それ以外の場合はエラーコードを返します。

解説(Remarks)

このメソッドは、Windows Vista および Windows Server 2008 に搭載された DXGI 1.0 ではサポートされません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) (KB 971644) と Windows Server 2008 (KB 971512) 向けの更新プログラムとして利用できます。

GetDC メソッドで DC を取得した後は、GDI を使用して DXGI サーフェスへ描画できます。GetDC メソッドはサーフェスを GDI 描画用に準備し、DXGI と GDI の各技術間の相互運用を可能にします。

このメソッドを使用する際は、次の点に注意してください。

スワップチェーンから IDXGISurface1 を取得することで、スワップチェーンのインデックス 0 にあるバックバッファーに対して GetDC を呼び出すこともできます。次のコードはその手順を示しています。

IDXGISwapChain* g_pSwapChain = NULL;
IDXGISurface1* g_pSurface1 = NULL;
...
//デバイスとスワップチェーンをセットアップする
g_pSwapChain->GetBuffer(0, __uuidof(IDXGISurface1), (void**) &g_pSurface1);
g_pSurface1->GetDC( FALSE, &g_hDC );
...      
//GDI を使用して DC に描画する
...
//描画が終わったら DC を解放する
g_pSurface1->ReleaseDC( NULL );
      
vtbl 12 HRESULT ReleaseDC(RECT* pDirtyRect)

現在のサーフェスに関連付けられた GDI デバイスコンテキスト (DC) を解放し、Direct3D を使用して描画できるようにします。

pDirtyRectRECT*inoptional

サーフェスのダーティ領域を示す RECT 構造体へのポインターです。ダーティ領域とは、GDI 描画に使用し、保持しておきたいサーフェスの部分を指します。この領域は、特定のシナリオにおいてグラフィックスサブシステムへのパフォーマンスヒントとして使用されます。このパラメーターを、描画を指定した矩形領域に制限する目的で使用しないでください。NULL を渡した場合、ReleaseDC はサーフェス全体をダーティとみなします。それ以外の場合、ReleaseDC は RECT で指定された領域を、GDI 描画によって操作された領域を示すパフォーマンスヒントとして使用します。

コンテンツを一切変更していない場合は、空の RECT 構造体(位置も面積も持たない矩形)へのポインターを渡すことができます。

戻り値

型: HRESULT

このメソッドが成功した場合は S_OK を返します。それ以外の場合は HRESULT エラーコードを返します。

解説(Remarks)

このメソッドは、Windows Vista および Windows Server 2008 に搭載された DXGI 1.0 ではサポートされません。DXGI 1.1 のサポートが必要であり、これは Windows 7、Windows Server 2008 R2、および Windows Vista with Service Pack 2 (SP2) (KB 971644) と Windows Server 2008 (KB 971512) 向けの更新プログラムとして利用できます。

ReleaseDC メソッドを使用して DC を解放し、アプリケーションがこのサーフェスへのすべての GDI 描画を完了したことを示します。追加の描画を行うために Direct3D を使用する前に、ReleaseDC メソッドを呼び出す必要があります。

バッファーをリサイズする前に、すべての未解放の DC を解放する必要があります。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

HSP用 COM定義

#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"

出力引数:
#define global IID_IDXGISurface1 "{4AE63092-6327-4C1B-80AE-BFE12EA32B86}"
#usecom global IDXGISurface1 IID_IDXGISurface1 "{}"
#comfunc global IDXGISurface1_GetDC      11 int,sptr
#comfunc global IDXGISurface1_ReleaseDC  12 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。