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

DXGI_SWAP_CHAIN_DESC1

構造体
サイズx64: 48 バイト / x86: 48 バイト

サイズ=各フィールドのバイト数(x64/x86 で異なる場合は x64/x86 と併記)。x64/x86 列=フィールドのバイトオフセット(HSPで dupptr / lpoke / wpoke 等に使用)。

フィールド

フィールドサイズx64x86説明
WidthDWORD4+0+0解像度の幅を表す値です。スワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForHwnd メソッドを呼び出すときに幅を 0 として指定すると、ランタイムは出力ウィンドウから幅を取得し、その幅の値をスワップチェーンの記述に割り当てます。その後、IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた幅の値を取得できます。IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出すときは、幅を 0 として指定することはできません。
HeightDWORD4+4+4解像度の高さを表す値です。スワップチェーンを作成するために IDXGIFactory2::CreateSwapChainForHwnd メソッドを呼び出すときに高さを 0 として指定すると、ランタイムは出力ウィンドウから高さを取得し、その高さの値をスワップチェーンの記述に割り当てます。その後、IDXGISwapChain1::GetDesc1 メソッドを呼び出して、割り当てられた高さの値を取得できます。IDXGIFactory2::CreateSwapChainForComposition メソッドを呼び出すときは、高さを 0 として指定することはできません。
FormatDXGI_FORMAT4+8+8表示フォーマットを表す DXGI_FORMAT 構造体です。
StereoBOOL4+12+12全画面表示モードまたはスワップチェーンのバックバッファーがステレオかどうかを指定します。ステレオの場合は TRUE、それ以外の場合は FALSE です。ステレオを指定する場合は、フリップモデルのスワップチェーン (つまり、SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値が設定されたスワップチェーン) も指定しなければなりません。
SampleDescDXGI_SAMPLE_DESC8+16+16マルチサンプリングのパラメーターを表す DXGI_SAMPLE_DESC 構造体です。このメンバーは、ビットブロック転送 (bitblt) モデルのスワップチェーンでのみ有効です。
BufferUsageDXGI_USAGE4+24+24バックバッファーのサーフェス使用法と CPU アクセスのオプションを表す DXGI_USAGE 型の値です。バックバッファーは、シェーダーの入力またはレンダーターゲットの出力に使用できます。
BufferCountDWORD4+28+28スワップチェーン内のバッファーの数を表す値です。全画面のスワップチェーンを作成する場合、通常はこの値にフロントバッファーを含めます。
ScalingDXGI_SCALING4+32+32バックバッファーのサイズがターゲット出力と等しくない場合のサイズ変更の動作を示す DXGI_SCALING 型の値です。
SwapEffectDXGI_SWAP_EFFECT4+36+36スワップチェーンが使用するプレゼンテーションモデルと、サーフェスを提示した後のプレゼンテーションバッファーの内容を扱うオプションを表す DXGI_SWAP_EFFECT 型の値です。IDXGIFactory2::CreateSwapChainForComposition メソッドは フリップ プレゼンテーション モデル のみをサポートするため、このメソッドを呼び出すときは DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値を指定しなければなりません。
AlphaModeDXGI_ALPHA_MODE4+40+40スワップチェーンのバックバッファーの透過動作を示す DXGI_ALPHA_MODE 型の値です。
FlagsDWORD4+44+44ビット単位のOR演算で組み合わせた DXGI_SWAP_CHAIN_FLAG 型の値の組み合わせです。結果として得られる値は、スワップチェーンの動作に関するオプションを指定します。

公式ドキュメント

スワップチェーンについて説明します。

解説(Remarks)

この構造体は、CreateSwapChainForHwndCreateSwapChainForCoreWindowCreateSwapChainForCompositionCreateSwapChainForCompositionSurfaceHandle、および GetDesc1 の各メソッドで使用されます。

メモ DXGI_SWAP_CHAIN_DESC1DXGI_SWAP_CHAIN_DESC にキャストすること、およびその逆を行うことはできません。アプリケーションは、新しいバージョンのスワップチェーン記述構造体を取得するために、IDXGISwapChain1::GetDesc1 メソッドを明示的に使用しなければなりません。
全画面モードでは専用のフロントバッファーが存在します。ウィンドウモードでは、デスクトップがフロントバッファーになります。

フリップモデルのスワップチェーン (つまり、SwapEffect メンバーに DXGI_SWAP_EFFECT_FLIP_DISCARD または DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL の値が設定されたスワップチェーン) の場合、Format メンバーには DXGI_FORMAT_R16G16B16A16_FLOATDXGI_FORMAT_B8G8R8A8_UNORMDXGI_FORMAT_R8G8B8A8_UNORM、または DXGI_FORMAT_R10G10B10A10_UNORM を設定しなければなりません。また、マルチサンプルアンチエイリアシング (MSAA) はサポートされないため、SampleDesc メンバーが指定する DXGI_SAMPLE_DESC 構造体の Count メンバーには 1 を、DXGI_SAMPLE_DESCQuality メンバーには 0 を設定しなければなりません。さらに、BufferCount メンバーには 2 から 16 までの値を設定しなければなりません。フリップモデルのスワップチェーンの詳細については、DXGI Flip Model を参照してください。

出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
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 Structure
import 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: uint32
struct 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