DXGI_SCALING
列挙型メンバー 3
| 名前 | 10進 | 16進 | 説明 |
|---|---|---|---|
| DXGI_SCALING_STRETCH | 0 | 0x0 | バックバッファーの内容をプレゼンテーション ターゲットのサイズに合わせて拡大縮小するよう DXGI に指示します。これは IDXGIFactory::CreateSwapChain メソッドを呼び出したときの DXGI の暗黙的な動作です。 |
| DXGI_SCALING_NONE | 1 | 0x1 | プレゼンテーション ターゲットのサイズがバックバッファーのサイズと等しくない場合に、バックバッファーの内容を拡大縮小せずに表示するよう DXGI に指示します。バックバッファーとプレゼンテーション ターゲットの上端が揃えられます。ターゲット出力ウィンドウの HWND ハンドルに WS_EX_LAYOUTRTL スタイルが関連付けられている場合は、バックバッファーとプレゼンテーション ターゲットの右端が揃えられます。それ以外の場合は左端が揃えられます。バックバッファーの外側にあるターゲット領域はすべて、ウィンドウの背景色で塗りつぶされます。 この値は、スワップ チェーンのバックバッファーの外側にあるターゲット領域がすべて、IDXGISwapChain1::SetBackgroundColor の呼び出しで指定した背景色で塗りつぶされることを指定します。 |
| DXGI_SCALING_ASPECT_RATIO_STRETCH | 2 | 0x2 | バックバッファーのアスペクト比を維持しながら、バックバッファーの内容をプレゼンテーション ターゲットのサイズに合わせて拡大縮小するよう DXGI に指示します。拡大縮小されたバックバッファーがプレゼンテーション領域を埋めない場合は、中央に配置され、周囲は黒い枠になります。 この定数は Windows Phone 8 および Windows 10 でサポートされます。 なお、従来の Win32 ウィンドウのスワップ チェーンでは、これは DXGI_SCALING_STRETCH と同じ動作になります。 |
公式ドキュメント
バックバッファーのサイズがターゲット出力のサイズと一致しない場合のサイズ変更動作を識別します。
解説(Remarks)
DXGI_SCALING_NONE 値は、DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL または DXGI_SWAP_EFFECT_FLIP_DISCARD 値を指定して作成したフリップ プレゼンテーション モデルのスワップ チェーンでのみサポートされます。これらの値は、IDXGIFactory2::CreateSwapChainForHwnd、IDXGIFactory2::CreateSwapChainForCoreWindow、または IDXGIFactory2::CreateSwapChainForComposition の呼び出しで渡します。
DXGI_SCALING_ASPECT_RATIO_STRETCH は水平方向のフィルを優先して使用し、それ以外の場合は垂直方向のフィルを使用します。ロジックは次のとおりです。
float aspectRatio = backBufferWidth / float(backBufferHeight);
// Horizontal fill
float scaledWidth = outputWidth;
float scaledHeight = outputWidth / aspectRatio;
if (scaledHeight >= outputHeight)
{
// Do vertical fill
scaledWidth = outputHeight * aspectRatio;
scaledHeight = outputHeight;
}
float offsetX = (outputWidth - scaledWidth) * 0.5f;
float offsetY = (outputHeight - scaledHeight) * 0.5f;
rect.left = static_cast<LONG>(offsetX);
rect.top = static_cast<LONG>(offsetY);
rect.right = static_cast<LONG>(offsetX + scaledWidth);
rect.bottom = static_cast<LONG>(offsetY + scaledHeight);
rect.left = std::max<LONG>(0, rect.left);
rect.top = std::max<LONG>(0, rect.top);
rect.right = std::min<LONG>(static_cast<LONG>(outputWidth), rect.right);
rect.bottom = std::min<LONG>(static_cast<LONG>(outputHeight), rect.bottom);
outputWidth と outputHeight は、プレゼンテーション ターゲットのサイズをピクセル単位で表した値である点に注意してください。CoreWindow の場合は、ウィンドウの DPI プロパティを使用して logicalWidth と logicalHeight の値を DIPS からピクセルへ変換する必要があります。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
列挙メンバーの定義。HSP タブは #define global(値は16進)。
typedef enum DXGI_SCALING : int {
DXGI_SCALING_STRETCH = 0,
DXGI_SCALING_NONE = 1,
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2
} DXGI_SCALING;public enum DXGI_SCALING : int
{
DXGI_SCALING_STRETCH = 0,
DXGI_SCALING_NONE = 1,
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
}Public Enum DXGI_SCALING As Integer
DXGI_SCALING_STRETCH = 0
DXGI_SCALING_NONE = 1
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2
End Enumimport enum
class DXGI_SCALING(enum.IntEnum):
DXGI_SCALING_STRETCH = 0
DXGI_SCALING_NONE = 1
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2// DXGI_SCALING
pub const DXGI_SCALING_STRETCH: i32 = 0;
pub const DXGI_SCALING_NONE: i32 = 1;
pub const DXGI_SCALING_ASPECT_RATIO_STRETCH: i32 = 2;// DXGI_SCALING
const (
DXGI_SCALING_STRETCH int32 = 0
DXGI_SCALING_NONE int32 = 1
DXGI_SCALING_ASPECT_RATIO_STRETCH int32 = 2
)const
DXGI_SCALING_STRETCH = 0;
DXGI_SCALING_NONE = 1;
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2;// DXGI_SCALING
pub const DXGI_SCALING_STRETCH: i32 = 0;
pub const DXGI_SCALING_NONE: i32 = 1;
pub const DXGI_SCALING_ASPECT_RATIO_STRETCH: i32 = 2;const
DXGI_SCALING_STRETCH* = 0
DXGI_SCALING_NONE* = 1
DXGI_SCALING_ASPECT_RATIO_STRETCH* = 2enum DXGI_SCALING : int {
DXGI_SCALING_STRETCH = 0,
DXGI_SCALING_NONE = 1,
DXGI_SCALING_ASPECT_RATIO_STRETCH = 2,
}#define global DXGI_SCALING_STRETCH 0x0
#define global DXGI_SCALING_NONE 0x1
#define global DXGI_SCALING_ASPECT_RATIO_STRETCH 0x2