DXGI_SWAP_CHAIN_DESC1
構造体サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。
フィールド
| フィールド | 型 | サイズ | x64 | x86 | 説明 |
|---|---|---|---|---|---|
| Width | DWORD | 4 | +0 | +0 | 解像度の幅を表す値です。スワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForHwnd メソッドを呼び出すときに幅を 0 として指定すると、ランタイムは出力ウィンドウから幅を取得し、その幅の値をスワップチェーンの記述に割り当てます。その後、IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた幅の値を取得できます。IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出すときは、幅を 0 として指定することはできません。 |
| Height | DWORD | 4 | +4 | +4 | 解像度の高さを表す値です。スワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForHwnd メソッドを呼び出すときに高さを 0 として指定すると、ランタイムは出力ウィンドウから高さを取得し、その高さの値をスワップチェーンの記述に割り当てます。その後、IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた高さの値を取得できます。IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出すときは、高さを 0 として指定することはできません。 |
| Format | DXGI_FORMAT | 4 | +8 | +8 | 表示フォーマットを表す DXGI_FORMAT 構造体です。 |
| Stereo | BOOL | 4 | +12 | +12 | 全画面表示モードまたはスワップチェーンのバックバッファーがステレオかどうかを指定します。ステレオの場合は TRUE、それ以外の場合は FALSE です。ステレオを指定する場合は、フリップモデルのスワップチェーン (つまり、SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値が設定されたスワップチェーン) も指定しなければなりません。 |
| SampleDesc | DXGI_SAMPLE_DESC | 8 | +16 | +16 | マルチサンプリングのパラメーターを表す DXGI_SAMPLE_DESC 構造体です。このメンバーは、ビットブロック転送 (bitblt) モデルのスワップチェーンでのみ有効です。 |
| BufferUsage | DXGI_USAGE | 4 | +24 | +24 | バックバッファーのサーフェス使用法と CPU アクセスのオプションを表す DXGI_USAGE 型の値です。バックバッファーは、シェーダーの入力またはレンダーターゲットの出力に使用できます。 |
| BufferCount | DWORD | 4 | +28 | +28 | スワップチェーン内のバッファーの数を表す値です。全画面のスワップチェーンを作成する場合、通常はこの値にフロントバッファーを含めます。 |
| Scaling | DXGI_SCALING | 4 | +32 | +32 | バックバッファーのサイズがターゲット出力と等しくない場合のサイズ変更の動作を示す DXGI_SCALING 型の値です。 |
| SwapEffect | DXGI_SWAP_EFFECT | 4 | +36 | +36 | スワップチェーンが使用するプレゼンテーションモデルと、サーフェスを提示した後のプレゼンテーションバッファーの内容を扱うオプションを表す DXGI_SWAP_EFFECT 型の値です。IDXGIFactory2::CreateSwapChainForComposition メソッドは フリップ プレゼンテーション モデル のみをサポートするため、このメソッドを呼び出すときは DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値を指定しなければなりません。 |
| AlphaMode | DXGI_ALPHA_MODE | 4 | +40 | +40 | スワップチェーンのバックバッファーの透過動作を示す DXGI_ALPHA_MODE 型の値です。 |
| Flags | DWORD | 4 | +44 | +44 | ビット単位のOR演算で組み合わせた DXGI_SWAP_CHAIN_FLAG 型の値の組み合わせです。結果として得られる値は、スワップチェーンの動作に関するオプションを指定します。 |
公式ドキュメント
スワップチェーンについて説明します。
解説(Remarks)
この構造体は、CreateSwapChainForHwnd、CreateSwapChainForCoreWindow、CreateSwapChainForComposition、CreateSwapChainForCompositionSurfaceHandle、および GetDesc1 の各メソッドで使用されます。
フリップモデルのスワップチェーン (つまり、SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_DISCARD または DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値が設定されたスワップチェーン) の場合、Format メンバーには DXGI_FORMAT_R16G16B16A16_FLOAT、DXGI_FORMAT_B8G8R8A8_UNORM、DXGI_FORMAT_R8G8B8A8_UNORM、または DXGI_FORMAT_R10G10B10A10_UNORM を設定しなければなりません。また、マルチサンプルアンチエイリアシング (MSAA) はサポートされないため、SampleDesc メンバーが指定する DXGI_SAMPLE_DESC 構造体の Count メンバーには 1 を、DXGI_SAMPLE_DESC の Quality メンバーには 0 を設定しなければなりません。さらに、BufferCount メンバーには 2 から 16 までの値を設定しなければなりません。フリップモデルのスワップチェーンの詳細については、DXGI Flip Model を参照してください。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)
各言語での定義
#include <windows.h>
// DXGI_SAMPLE_DESC (x64 8 / x86 8 バイト)
typedef struct DXGI_SAMPLE_DESC {
DWORD Count;
DWORD Quality;
} DXGI_SAMPLE_DESC;
// DXGI_SWAP_CHAIN_DESC1 (x64 48 / x86 48 バイト)
typedef struct DXGI_SWAP_CHAIN_DESC1 {
DWORD Width;
DWORD Height;
DXGI_FORMAT Format;
BOOL Stereo;
DXGI_SAMPLE_DESC SampleDesc;
DXGI_USAGE BufferUsage;
DWORD BufferCount;
DXGI_SCALING Scaling;
DXGI_SWAP_EFFECT SwapEffect;
DXGI_ALPHA_MODE AlphaMode;
DWORD Flags;
} DXGI_SWAP_CHAIN_DESC1;using System;
using System.Runtime.InteropServices;
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DXGI_SAMPLE_DESC
{
public uint Count;
public uint Quality;
}
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct DXGI_SWAP_CHAIN_DESC1
{
public uint Width;
public uint Height;
public int Format;
[MarshalAs(UnmanagedType.Bool)] public bool Stereo;
public DXGI_SAMPLE_DESC SampleDesc;
public uint BufferUsage;
public uint BufferCount;
public int Scaling;
public int SwapEffect;
public int AlphaMode;
public uint Flags;
}Imports System.Runtime.InteropServices
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DXGI_SAMPLE_DESC
Public Count As UInteger
Public Quality As UInteger
End Structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Unicode)>
Public Structure DXGI_SWAP_CHAIN_DESC1
Public Width As UInteger
Public Height As UInteger
Public Format As Integer
<MarshalAs(UnmanagedType.Bool)> Public Stereo As Boolean
Public SampleDesc As DXGI_SAMPLE_DESC
Public BufferUsage As UInteger
Public BufferCount As UInteger
Public Scaling As Integer
Public SwapEffect As Integer
Public AlphaMode As Integer
Public Flags As UInteger
End Structureimport ctypes
from ctypes import wintypes
class DXGI_SAMPLE_DESC(ctypes.Structure):
_fields_ = [
("Count", wintypes.DWORD),
("Quality", wintypes.DWORD),
]
class DXGI_SWAP_CHAIN_DESC1(ctypes.Structure):
_fields_ = [
("Width", wintypes.DWORD),
("Height", wintypes.DWORD),
("Format", ctypes.c_int),
("Stereo", wintypes.BOOL),
("SampleDesc", DXGI_SAMPLE_DESC),
("BufferUsage", wintypes.DWORD),
("BufferCount", wintypes.DWORD),
("Scaling", ctypes.c_int),
("SwapEffect", ctypes.c_int),
("AlphaMode", ctypes.c_int),
("Flags", wintypes.DWORD),
]#[repr(C)]
pub struct DXGI_SAMPLE_DESC {
pub Count: u32,
pub Quality: u32,
}
#[repr(C)]
pub struct DXGI_SWAP_CHAIN_DESC1 {
pub Width: u32,
pub Height: u32,
pub Format: i32,
pub Stereo: i32,
pub SampleDesc: DXGI_SAMPLE_DESC,
pub BufferUsage: u32,
pub BufferCount: u32,
pub Scaling: i32,
pub SwapEffect: i32,
pub AlphaMode: i32,
pub Flags: u32,
}import "golang.org/x/sys/windows"
type DXGI_SAMPLE_DESC struct {
Count uint32
Quality uint32
}
type DXGI_SWAP_CHAIN_DESC1 struct {
Width uint32
Height uint32
Format int32
Stereo int32
SampleDesc DXGI_SAMPLE_DESC
BufferUsage uint32
BufferCount uint32
Scaling int32
SwapEffect int32
AlphaMode int32
Flags uint32
}type
DXGI_SAMPLE_DESC = record
Count: DWORD;
Quality: DWORD;
end;
DXGI_SWAP_CHAIN_DESC1 = record
Width: DWORD;
Height: DWORD;
Format: Integer;
Stereo: BOOL;
SampleDesc: DXGI_SAMPLE_DESC;
BufferUsage: DWORD;
BufferCount: DWORD;
Scaling: Integer;
SwapEffect: Integer;
AlphaMode: Integer;
Flags: DWORD;
end;const DXGI_SAMPLE_DESC = extern struct {
Count: u32,
Quality: u32,
};
const DXGI_SWAP_CHAIN_DESC1 = extern struct {
Width: u32,
Height: u32,
Format: i32,
Stereo: i32,
SampleDesc: DXGI_SAMPLE_DESC,
BufferUsage: u32,
BufferCount: u32,
Scaling: i32,
SwapEffect: i32,
AlphaMode: i32,
Flags: u32,
};type
DXGI_SAMPLE_DESC {.bycopy.} = object
Count: uint32
Quality: uint32
DXGI_SWAP_CHAIN_DESC1 {.bycopy.} = object
Width: uint32
Height: uint32
Format: int32
Stereo: int32
SampleDesc: DXGI_SAMPLE_DESC
BufferUsage: uint32
BufferCount: uint32
Scaling: int32
SwapEffect: int32
AlphaMode: int32
Flags: uint32struct DXGI_SAMPLE_DESC
{
uint Count;
uint Quality;
}
struct DXGI_SWAP_CHAIN_DESC1
{
uint Width;
uint Height;
int Format;
int Stereo;
DXGI_SAMPLE_DESC SampleDesc;
uint BufferUsage;
uint BufferCount;
int Scaling;
int SwapEffect;
int AlphaMode;
uint Flags;
}HSP用 定義
HSP3.7/3.8 は構造体機能が無いため4byte整数配列(dim)+peek/poke で操作(32/64bitでサイズ・位置が異なる場合はタブで分割)。IronHSP は NSTRUCT(#defstruct/stdim/->)で32/64bit共通。
; HSP3.7/3.8 は構造体機能が無いため、4byte整数の配列変数で操作します。(x64 レイアウト)
; DXGI_SWAP_CHAIN_DESC1 サイズ: 48 バイト(x64)
dim st, 12 ; 4byte整数×12(構造体サイズ 48 / 4 切り上げ)
; Width : DWORD (+0, 4byte) st.0 = 値 / 値 = st.0 (lpoke/lpeek も可)
; Height : DWORD (+4, 4byte) st.1 = 値 / 値 = st.1 (lpoke/lpeek も可)
; Format : DXGI_FORMAT (+8, 4byte) st.2 = 値 / 値 = st.2 (lpoke/lpeek も可)
; Stereo : BOOL (+12, 4byte) st.3 = 値 / 値 = st.3 (lpoke/lpeek も可)
; SampleDesc : DXGI_SAMPLE_DESC (+16, 8byte) varptr(st)+16 を基点に操作(8byte:入れ子/配列)
; BufferUsage : DXGI_USAGE (+24, 4byte) st.6 = 値 / 値 = st.6 (lpoke/lpeek も可)
; BufferCount : DWORD (+28, 4byte) st.7 = 値 / 値 = st.7 (lpoke/lpeek も可)
; Scaling : DXGI_SCALING (+32, 4byte) st.8 = 値 / 値 = st.8 (lpoke/lpeek も可)
; SwapEffect : DXGI_SWAP_EFFECT (+36, 4byte) st.9 = 値 / 値 = st.9 (lpoke/lpeek も可)
; AlphaMode : DXGI_ALPHA_MODE (+40, 4byte) st.10 = 値 / 値 = st.10 (lpoke/lpeek も可)
; Flags : DWORD (+44, 4byte) st.11 = 値 / 値 = st.11 (lpoke/lpeek も可)
; ※4byte境界の整数は添字 st.N(N=オフセット/4)で読み書き可。それ以外は peek/poke 系を使用。; IronHSP は NSTRUCT(構造体)をサポート。32bit/64bit どちらでも同じコードで動作します。
; ※GUID・入れ子構造体はデフォルト型でないため、依存する #defstruct を先に定義(下記に同梱)。
#defstruct global DXGI_SAMPLE_DESC
#field int Count
#field int Quality
#endstruct
#defstruct global DXGI_SWAP_CHAIN_DESC1
#field int Width
#field int Height
#field int Format
#field bool Stereo
#field DXGI_SAMPLE_DESC SampleDesc
#field int BufferUsage
#field int BufferCount
#field int Scaling
#field int SwapEffect
#field int AlphaMode
#field int Flags
#endstruct
stdim st, DXGI_SWAP_CHAIN_DESC1 ; NSTRUCT 変数を確保
st->Width = 100
mes "Width=" + st->Width