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

IDXGIOutput

COM
IIDae02eedb-c735-4690-8d52-5a8dc20213aa継承元IDXGIObject自前メソッド開始 vtbl7

公式ドキュメント

IDXGIOutput インターフェイスは、アダプターの出力(モニターなど)を表します。

解説(Remarks)

利用可能な出力を確認するには、IDXGIAdapter::EnumOutputs を使用します。スワップチェーンが更新する特定の出力を確認するには、IDXGISwapChain::GetContainingOutput を使用します。

メソッド 12

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

vtbl 7 HRESULT GetDesc(DXGI_OUTPUT_DESC* pDesc)

出力の記述を取得します。

pDescDXGI_OUTPUT_DESC*out出力記述へのポインター(DXGI_OUTPUT_DESC を参照)。

戻り値

Type: HRESULT

成功または失敗を示すコードを返します。成功した場合は S_OKpDescNULL として渡された場合は DXGI_ERROR_INVALID_CALL を返します。

解説(Remarks)

高 DPI デスクトップでは、アプリが高 DPI 対応としてマークされていない限り、GetDesc は視覚化された画面サイズを返します。DPI 対応の Win32 アプリの作成方法については、高 DPI を参照してください。

vtbl 8 HRESULT GetDisplayModeList(DXGI_FORMAT EnumFormat, DXGI_ENUM_MODES Flags, DWORD* pNumModes, DXGI_MODE_DESC* pDesc)

要求されたフォーマットおよびその他の入力オプションに一致するディスプレイモードを取得します。(IDXGIOutput.GetDisplayModeList)

EnumFormatDXGI_FORMATinカラーフォーマット(DXGI_FORMAT を参照)。
FlagsDXGI_ENUM_MODESin含めるモードのオプション(DXGI_ENUM_MODES を参照)。スケーリングを必要とするディスプレイモードを列挙するには、DXGI_ENUM_MODES_SCALING を指定する必要があります。スケーリングを必要とせず、ディスプレイ出力に直接対応する中央揃えのモードは、既定で列挙されます。
pNumModesDWORD*inoutpDescNULL に設定すると、pNumModes はフォーマットとオプションに一致するディスプレイモードの数を返します。それ以外の場合、pNumModespDesc に返されたディスプレイモードの数を返します。
pDescDXGI_MODE_DESC*outoptionalディスプレイモードのリストへのポインター(DXGI_MODE_DESC を参照)。ディスプレイモードの数を取得するには NULL に設定します。

戻り値

Type: HRESULT

以下の DXGI_ERROR のいずれかを返します。まれではありますが、このメソッドの呼び出し直後に利用可能なディスプレイモードが変化することがあり、その場合(すべてのディスプレイモードを格納する十分な領域がない場合)は DXGI_ERROR_MORE_DATA が返されます。GetDisplayModeList がリモートデスクトップサービスセッション(旧称ターミナルサービスセッション)から呼び出された場合は、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE が返されます。

解説(Remarks)

一般に、ウィンドウモードから全画面モードに切り替える際、スワップチェーンはスワップチェーンの解像度、色深度、リフレッシュレートを満たす(またはそれを上回る)ディスプレイモードを自動的に選択します。ディスプレイモードをより細かく制御するには、この API を使用して、モニターの機能に対して検証されたディスプレイモードのセット、または(デスクトップ設定がモニターに対して検証されない場合は)デスクトップに一致するすべてのモードをポーリングします。

示されているとおり、この API は 2 回呼び出すように設計されています。1 回目は利用可能なモードの数を取得するため、2 回目はモードの記述を返すためです。


UINT num = 0;
DXGI_FORMAT format = DXGI_FORMAT_R32G32B32A32_FLOAT;
UINT flags         = DXGI_ENUM_MODES_INTERLACED;

pOutput->GetDisplayModeList( format, flags, &num, 0);

...

DXGI_MODE_DESC * pDescs = new DXGI_MODE_DESC[num];
pOutput->GetDisplayModeList( format, flags, &num, pDescs);
      
vtbl 9 HRESULT FindClosestMatchingMode(DXGI_MODE_DESC* pModeToMatch, DXGI_MODE_DESC* pClosestMatch, IUnknown* pConcernedDevice)

要求されたディスプレイモードに最も近いディスプレイモードを検索します。(IDXGIOutput.FindClosestMatchingMode)

pModeToMatchDXGI_MODE_DESC*in希望するディスプレイモード(DXGI_MODE_DESC を参照)。DXGI_MODE_DESC のメンバーは未指定にすることができ、その場合そのメンバーに対する優先指定がないことを示します。Width または Height の値が 0 の場合は、その値が未指定であることを示します。Width または Height のいずれかが 0 の場合は、両方とも 0 でなければなりません。RefreshRate の分子と分母が 0 の場合は、未指定であることを示します。DXGI_MODE_DESC のその他のメンバーには、そのメンバーが未指定であることを示す列挙値があります。pConcernedDeviceNULL の場合、FormatDXGI_FORMAT_UNKNOWN にすることはできません。
pClosestMatchDXGI_MODE_DESC*outpModeToMatch に最も近いモード。
pConcernedDeviceIUnknown*inoptional

Direct3D デバイスインターフェイスへのポインター。このパラメーターが NULL の場合、フォーマットが pModeToMatch のフォーマットに一致するモードのみが返されます。それ以外の場合は、デバイスがスキャンアウトをサポートするフォーマットのみが返されます。各機能レベルでデバイスがスキャンアウトをサポートするフォーマットについては、以下を参照してください。

戻り値

Type: HRESULT

以下の DXGI_ERROR のいずれかを返します。

解説(Remarks)

FindClosestMatchingModeIDXGIOutput1::FindClosestMatchingMode1 と同様に動作しますが、FindClosestMatchingMode はモノラルのディスプレイモードのみを考慮する点が異なります。IDXGIOutput1::FindClosestMatchingMode1 は、pModeToMatch が指す DXGI_MODE_DESC1 構造体の Stereo メンバーを設定した場合はステレオモードのみを考慮し、Stereo が設定されていない場合はモノラルモードのみを考慮します。

IDXGIOutput1::FindClosestMatchingMode1 は、ステレオモードのみ、またはモノラルモードのみで構成される、一致したディスプレイモードのセットを返します。 FindClosestMatchingMode は、入力モードをモノラルとして指定したかのように動作します。

vtbl 10 HRESULT WaitForVBlank()

次の垂直帰線(垂直ブランク)が発生するまでスレッドを停止します。

戻り値

Type: HRESULT

以下の DXGI_ERROR のいずれかを返します。

解説(Remarks)

垂直帰線は、次のフレームの描画を開始するためにラスターが右下隅から左上隅に移動するときに発生します。

vtbl 11 HRESULT TakeOwnership(IUnknown* pDevice, BOOL Exclusive)

出力の所有権を取得します。

pDeviceIUnknown*inデバイス(ID3D10Device など)の IUnknown インターフェイスへのポインター。
ExclusiveBOOLin他のスレッドまたはアプリケーションがデバイスの所有権を取得できるようにするには TRUE に設定し、それ以外の場合は FALSE に設定します。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

出力の使用を終えたら、IDXGIOutput::ReleaseOwnership を呼び出します。

TakeOwnership は、結果が予測できないため、アプリケーションから直接呼び出すべきではありません。これは全画面遷移の際に DXGI スワップチェーンオブジェクトによって暗黙的に呼び出されるものであり、スワップチェーンのメソッドの代替として使用すべきではありません。

Windows ストアアプリに関する注意

Windows ストアアプリが TakeOwnership を使用すると、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE で失敗します。
vtbl 12 void ReleaseOwnership()

出力の所有権を解放します。

解説(Remarks)

スワップチェーンを使用していない場合は、IDXGIOutput::TakeOwnership を呼び出して出力へのアクセスを取得し、使用を終えたら IDXGIOutput::ReleaseOwnership を呼び出して解放します。スワップチェーンを使用するアプリケーションは、通常これらのメソッドのいずれも呼び出しません。

vtbl 13 HRESULT GetGammaControlCapabilities(DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps)

ガンマコントロール機能の記述を取得します。

pGammaCapsDXGI_GAMMA_CONTROL_CAPABILITIES*outガンマコントロール機能の記述へのポインター(DXGI_GAMMA_CONTROL_CAPABILITIES を参照)。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

Note このメソッドの呼び出しは、全画面モードの間のみサポートされます。

ガンマ補正の使用方法については、ガンマ補正の使用 を参照してください。

vtbl 14 HRESULT SetGammaControl(DXGI_GAMMA_CONTROL* pArray)

ガンマコントロールを設定します。

pArrayDXGI_GAMMA_CONTROL*in設定するガンマカーブを記述する DXGI_GAMMA_CONTROL 構造体へのポインター。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

Note このメソッドの呼び出しは、全画面モードの間のみサポートされます。

ガンマ補正の使用方法については、ガンマ補正の使用 を参照してください。

vtbl 15 HRESULT GetGammaControl(DXGI_GAMMA_CONTROL* pArray)

ガンマコントロールの設定を取得します。

pArrayDXGI_GAMMA_CONTROL*outガンマコントロール設定の配列(DXGI_GAMMA_CONTROL を参照)。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

Note このメソッドの呼び出しは、全画面モードの間のみサポートされます。

ガンマ補正の使用方法については、ガンマ補正の使用 を参照してください。

vtbl 16 HRESULT SetDisplaySurface(IDXGISurface* pScanoutSurface)

ディスプレイモードを変更します。

pScanoutSurfaceIDXGISurface*in画像を画面にレンダリングするために使用するサーフェス(IDXGISurface を参照)へのポインター。このサーフェスはバックバッファー(DXGI_USAGE_BACKBUFFER)として作成されている必要があります。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

IDXGIOutput::SetDisplaySurface は、結果が予測できないため、アプリケーションから直接呼び出すべきではありません。これは全画面遷移の際に DXGI スワップチェーンオブジェクトによって暗黙的に呼び出されるものであり、スワップチェーンのメソッドの代替として使用すべきではありません。

このメソッドは、IDXGIOutput::TakeOwnership の呼び出しと IDXGIOutput::ReleaseOwnership の呼び出しの間でのみ呼び出す必要があります。

Windows ストアアプリに関する注意

Windows ストアアプリが SetDisplaySurface を使用すると、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE で失敗します。
vtbl 17 HRESULT GetDisplaySurfaceData(IDXGISurface* pDestination)

現在のディスプレイサーフェスのコピーを取得します。

pDestinationIDXGISurface*inコピー先のサーフェス(IDXGISurface を参照)へのポインター。

戻り値

Type: HRESULT

DXGI_ERROR の値のいずれかを返します。

解説(Remarks)

IDXGIOutput::GetDisplaySurfaceData は、出力が全画面モードのときにのみ呼び出すことができます。メソッドが成功すると、DXGI はコピー先のサーフェスを埋めます。

コピー先のサーフェス用の領域を割り当てる際は、IDXGIOutput::GetDesc を使用して出力のサイズ(幅と高さ)を判断します。これはターゲットモニターの回転に関係なく当てはまります。グラフィックスコンポーネント(Direct3D 10 など)によって作成されるコピー先のサーフェスは、CPU 書き込み権限(D3D10_CPU_ACCESS_WRITE を参照)付きで作成する必要があります。その他のサーフェスは、CPU 読み書き権限(D3D10_CPU_ACCESS_READ_WRITE を参照)付きで作成する必要があります。このメソッドは、コピー先のサーフェスに合わせてサーフェスデータを変更します(拡大、縮小、フォーマット変換、回転)。拡大と縮小はポイントサンプリングで実行されます。

vtbl 18 HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats)

最近レンダリングされたフレームに関する統計情報を取得します。

pStatsDXGI_FRAME_STATISTICS*outフレーム統計情報(DXGI_FRAME_STATISTICS を参照)へのポインター。

戻り値

Type: HRESULT

この関数が成功した場合は S_OK を返します。それ以外の場合は DXGI_ERROR_INVALID_CALL を返すことがあります。

解説(Remarks)

この API は IDXGISwapChain::GetFrameStatistics に似ています。

Note このメソッドの呼び出しは、全画面モードの間のみサポートされます。
出典・ライセンス: 上記「公式ドキュメント」の内容は 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_IDXGIOutput "{AE02EEDB-C735-4690-8D52-5A8DC20213AA}"
#usecom global IDXGIOutput IID_IDXGIOutput "{}"
#comfunc global IDXGIOutput_GetDesc                      7 var
#comfunc global IDXGIOutput_GetDisplayModeList           8 int,int,var,var
#comfunc global IDXGIOutput_FindClosestMatchingMode      9 var,var,sptr
#comfunc global IDXGIOutput_WaitForVBlank                10
#comfunc global IDXGIOutput_TakeOwnership                11 sptr,int
#comfunc global IDXGIOutput_ReleaseOwnership             12
#comfunc global IDXGIOutput_GetGammaControlCapabilities  13 var
#comfunc global IDXGIOutput_SetGammaControl              14 var
#comfunc global IDXGIOutput_GetGammaControl              15 var
#comfunc global IDXGIOutput_SetDisplaySurface            16 sptr
#comfunc global IDXGIOutput_GetDisplaySurfaceData        17 sptr
#comfunc global IDXGIOutput_GetFrameStatistics           18 var
; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。
; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。
; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。
; ※ハンドル/void*等の不透明ポインタは IronHSP では intptr 指定が可能。