IDXGISwapChainMedia
COM公式ドキュメント
このスワップチェーンインターフェイスにより、デスクトップメディアアプリケーションは特定のリフレッシュレートへのシームレスな変更を要求できます。
解説(Remarks)
カスタムフレームレートへのシームレスな変更は、内蔵パネルでのみ実行できます。カスタムフレームレートを外部ディスプレイに適用することはできません。DXGI 出力アダプターが外部ディスプレイに接続されている場合、CheckPresentDurationSupport は上限と下限として (0, 0) を返し、デバイスがシームレスなリフレッシュレート変更をサポートしていないことを示します。
カスタムリフレッシュレートは、動的なフレームレートを持つビデオを表示する際に使用できます。ただし、リフレッシュレートの変更はユーザーに気づかれないように保つ必要があります。リフレッシュレートの遷移を気づかれないように保つためのベストプラクティスは、アプリがそのレートで少なくとも 5 秒間表示(プレゼント)できると判断した場合にのみカスタムフレームレートを設定することです。
メソッド 3
vtbl = vtable インデックス(0始まり)。HSP等からCOMメソッドをインデックス指定で呼ぶ際に使用します。0〜2 は IUnknown。
カスタムリフレッシュレートが現在システムによって承認されているかどうかを示す DXGI_FRAME_STATISTICS_MEDIA 構造体をシステムに問い合わせます。
| pStats | DXGI_FRAME_STATISTICS_MEDIA* | out | システムが現在カスタムリフレッシュレートの要求を承認しているかどうかを示す DXGI_FRAME_STATISTICS_MEDIA 構造体です。 |
戻り値
このメソッドは、成功した場合は S_OK を返し、失敗した場合は DXGI エラーコードを返します。
カスタムの表示(プレゼント)継続時間(カスタムリフレッシュレート)を要求します。
| Duration | DWORD | in | カスタムの表示(プレゼント)継続時間で、100 ナノ秒単位で指定します。 |
戻り値
このメソッドは、成功した場合は S_OK を返し、失敗した場合は DXGI エラーコードを返します。
カスタムリフレッシュレートに対応する、サポートされているフレーム表示(プレゼント)継続時間をグラフィックスドライバーに問い合わせます。
| DesiredPresentDuration | DWORD | in | 確認するフレーム継続時間を示します。この値は、目的のリフレッシュレートでの 1 フレームの継続時間であり、100 ナノ秒単位で指定します。たとえば、60 Hz のリフレッシュレートのサポートを確認するには、このフィールドに 167777 を設定します。 |
| pClosestSmallerPresentDuration | DWORD* | out | 要求された値より小さい、サポートされている最も近いフレーム表示(プレゼント)継続時間が設定される変数です。デバイスがそれより小さい継続時間をサポートしていない場合はゼロが設定されます。 |
| pClosestLargerPresentDuration | DWORD* | out | 要求された値より大きい、サポートされている最も近いフレーム表示(プレゼント)継続時間が設定される変数です。デバイスがそれより大きい継続時間をサポートしていない場合はゼロが設定されます。 |
戻り値
このメソッドは、成功した場合は S_OK を返し、失敗した場合は DXGI エラーコードを返します。
解説(Remarks)
DXGI 出力アダプターがカスタムリフレッシュレートをサポートしていない場合(たとえば外部ディスプレイ)、ディスプレイドライバーは上限と下限を (0, 0) に設定します。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
HSP用 COM定義
#usecom / #comfunc によるHSPのCOM呼び出し定義。数字は vtbl インデックス(0始まり)。クラスIDが無い場合 #usecom の末尾は "{}"、ある場合は "{CLSID}"。
#define global IID_IDXGISwapChainMedia "{DD95B90B-F05F-4F6A-BD65-25BFB264BD84}" #usecom global IDXGISwapChainMedia IID_IDXGISwapChainMedia "{}" #comfunc global IDXGISwapChainMedia_GetFrameStatisticsMedia 3 var #comfunc global IDXGISwapChainMedia_SetPresentDuration 4 int #comfunc global IDXGISwapChainMedia_CheckPresentDurationSupport 5 int,var,var ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数は var(変数直渡し)。varptr 方式にも切替可。#define global IID_IDXGISwapChainMedia "{DD95B90B-F05F-4F6A-BD65-25BFB264BD84}" #usecom global IDXGISwapChainMedia IID_IDXGISwapChainMedia "{}" #comfunc global IDXGISwapChainMedia_GetFrameStatisticsMedia 3 sptr #comfunc global IDXGISwapChainMedia_SetPresentDuration 4 int #comfunc global IDXGISwapChainMedia_CheckPresentDurationSupport 5 int,sptr,sptr ; ※数字は vtbl インデックス(0始まり)。0/1/2 は IUnknown(QueryInterface/AddRef/Release)。 ; ※このインターフェースは直接 CoCreateInstance するクラスIDが無いため "{}"(他メソッド/アクティベーションで取得)。 ; ※出力/バッファ引数はポインタ方式(token=sptr / 呼び出しは varptr(変数))。