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

D3D11CreateDeviceAndSwapChain

関数
Direct3D11デバイスとコンテキストおよびスワップチェーンを同時に作成する。
DLLd3d11.dll呼出規約winapi

シグネチャ

// d3d11.dll
#include <windows.h>

HRESULT D3D11CreateDeviceAndSwapChain(
    IDXGIAdapter* pAdapter,   // optional
    D3D_DRIVER_TYPE DriverType,
    HMODULE Software,
    D3D11_CREATE_DEVICE_FLAG Flags,
    const D3D_FEATURE_LEVEL* pFeatureLevels,   // optional
    DWORD FeatureLevels,
    DWORD SDKVersion,
    const DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,   // optional
    IDXGISwapChain** ppSwapChain,   // optional
    ID3D11Device** ppDevice,   // optional
    D3D_FEATURE_LEVEL* pFeatureLevel,   // optional
    ID3D11DeviceContext** ppImmediateContext   // optional
);

パラメーター

名前型方向説明
pAdapterIDXGIAdapter*inoptional

デバイスの作成時に使用するビデオアダプターへのポインター。既定のアダプター (IDXGIFactory1::EnumAdapters によって最初に列挙されるアダプター) を使用するには NULL を渡します。

メモ 1 つのアプリケーション内で DXGI 1.0 (IDXGIFactory) と DXGI 1.1 (IDXGIFactory1) を混在させて使用しないでください。アプリケーションでは IDXGIFactory または IDXGIFactory1 のどちらか一方を使用し、両方を使用しないでください。
DriverTypeD3D_DRIVER_TYPEin作成するドライバーの種類を表す D3D_DRIVER_TYPE。
SoftwareHMODULEinソフトウェアラスタライザーを実装する DLL のハンドル。DriverType が D3D_DRIVER_TYPE_SOFTWARE の場合、Software を NULL にすることはできません。ハンドルは LoadLibrary、LoadLibraryEx、または GetModuleHandle を呼び出して取得します。この値は、D3D_DRIVER_TYPE が D3D_DRIVER_TYPE_SOFTWARE の場合は NULL 以外である必要があり、それ以外の場合は NULL にします。
FlagsD3D11_CREATE_DEVICE_FLAGin有効にするランタイムレイヤー (D3D11_CREATE_DEVICE_FLAG を参照)。値はビット単位の OR で組み合わせることができます。
pFeatureLevelsD3D_FEATURE_LEVEL*inoptional

作成を試みる機能レベルの順序を決定する D3D_FEATURE_LEVEL の配列へのポインター。pFeatureLevels に NULL を設定した場合、この関数は次の機能レベルの配列を使用します。


{
    D3D_FEATURE_LEVEL_11_0,
    D3D_FEATURE_LEVEL_10_1,
    D3D_FEATURE_LEVEL_10_0,
    D3D_FEATURE_LEVEL_9_3,
    D3D_FEATURE_LEVEL_9_2,
    D3D_FEATURE_LEVEL_9_1,
};
          
メモ コンピューターに Direct3D 11.1 ランタイムが存在し、pFeatureLevels に NULL を設定した場合、この関数は D3D_FEATURE_LEVEL_11_1 デバイスを作成しません。D3D_FEATURE_LEVEL_11_1 デバイスを作成するには、D3D_FEATURE_LEVEL_11_1 を含む D3D_FEATURE_LEVEL 配列を明示的に指定する必要があります。Direct3D 11.1 ランタイムがインストールされていないコンピューターで D3D_FEATURE_LEVEL_11_1 を含む D3D_FEATURE_LEVEL 配列を指定した場合、この関数は直ちに E_INVALIDARG で失敗します。
FeatureLevelsDWORDinpFeatureLevels の要素数。
SDKVersionDWORDinSDK のバージョン。D3D11_SDK_VERSION を使用します。
pSwapChainDescDXGI_SWAP_CHAIN_DESC*inoptionalスワップチェーンの初期化パラメーターを格納するスワップチェーンの記述 (DXGI_SWAP_CHAIN_DESC を参照) へのポインター。
ppSwapChainIDXGISwapChain**outoptionalレンダリングに使用されるスワップチェーンを表す IDXGISwapChain オブジェクトへのポインターのアドレスを返します。
ppDeviceID3D11Device**outoptional作成されたデバイスを表す ID3D11Device オブジェクトへのポインターのアドレスを返します。このパラメーターが NULL の場合、ID3D11Device は返されません。
pFeatureLevelD3D_FEATURE_LEVEL*outoptionalデバイスがサポートする機能レベルの配列の最初の要素を表す D3D_FEATURE_LEVEL へのポインターを返します。どの機能レベルがサポートされているかを判断する必要がない場合は、入力として NULL を指定します。
ppImmediateContextID3D11DeviceContext**outoptionalデバイスコンテキストを表す ID3D11DeviceContext オブジェクトへのポインターのアドレスを返します。このパラメーターが NULL の場合、ID3D11DeviceContext は返されません。

戻り値の型: HRESULT

公式ドキュメント

ディスプレイアダプターを表すデバイスと、レンダリングに使用するスワップチェーンを作成します。

戻り値

種類: HRESULT

このメソッドは、Direct3D 11 の戻り値コードのいずれかを返すことがあります。

セッション 0 のプロセスでこのメソッドを呼び出した場合は、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE が返されます。

pAdapter パラメーターに NULL 以外の値を設定し、DriverType パラメーターに D3D_DRIVER_TYPE_HARDWARE 値を設定した場合、このメソッドは E_INVALIDARG を返します。

Flags に D3D11_CREATE_DEVICE_DEBUG を指定し、コンピューターにインストールされているデバッグレイヤーのバージョンが正しくない場合、このメソッドは DXGI_ERROR_SDK_COMPONENT_MISSING を返します。正しいバージョンを入手するには、最新の Windows SDK をインストールしてください。

解説(Remarks)

メモ セッション 0 のプロセスでこのメソッドを呼び出した場合は、DXGI_ERROR_NOT_CURRENTLY_AVAILABLE が返されます。
このエントリポイントは Direct3D 11 ランタイムでサポートされます。Direct3D 11 ランタイムは Windows 7 および Windows Server 2008 R2 で利用でき、Windows Vista では更新プログラム (KB971644) として利用できます。

Direct3D 11.1 デバイス (ID3D11Device1) は、Windows 8、Windows Server 2012、および Windows 7 用のプラットフォーム更新プログラムがインストールされた Windows 7 と Windows Server 2008 R2 で利用できます。これを作成するには、まずこの関数で ID3D11Device を作成し、次に ID3D11Device オブジェクトに対して QueryInterface メソッドを呼び出して ID3D11Device1 インターフェイスを取得します。

Direct3D 11.2 デバイス (ID3D11Device2) は、Windows 8.1 および Windows Server 2012 R2 で利用できます。これを作成するには、まずこの関数で ID3D11Device を作成し、次に ID3D11Device オブジェクトに対して QueryInterface メソッドを呼び出して ID3D11Device2 インターフェイスを取得します。

また、入力パラメーターの依存関係の詳細については、D3D11CreateDevice の解説セクションを参照してください。スワップチェーンを作成せずにデバイスのみを作成するには、D3D11CreateDevice 関数を使用します。

pAdapter パラメーターに NULL 以外の値を設定する場合は、DriverType パラメーターにも D3D_DRIVER_TYPE_UNKNOWN 値を設定する必要があります。pAdapter パラメーターに NULL 以外の値を設定し、DriverType パラメーターに D3D_DRIVER_TYPE_HARDWARE 値を設定した場合、D3D11CreateDeviceAndSwapChain は E_INVALIDARG の HRESULT を返します。

関数シグネチャ PFN_D3D11_CREATE_DEVICE_AND_SWAP_CHAIN は typedef として提供されているため、静的リンクの代わりに動的リンクの手法 (GetProcAddress) を使用できます。

使用上の注意

メモ D3D11CreateDeviceAndSwapChain 関数は Windows ストアアプリには存在しません。代わりに、Windows ストアアプリでは D3D11CreateDevice 関数を使用し、続いて IDXGIFactory2::CreateSwapChainForCoreWindow メソッドを使用します。
メモ この関数は、最近追加されたスワップチェーン作成の機能に対応するようには更新されていません。最新のスワップチェーン作成方法については、IDXGIFactory2 のメソッド (CreateSwapChainForHwnd、CreateSwapChainForCoreWindow、CreateSwapChainForComposition など) を参照してください。
Windows Phone 8: この API はサポートされています。
出典・ライセンス: 上記「公式ドキュメント」の内容は Microsoft の Win32 API ドキュメント(MicrosoftDocs/sdk-api)を日本語に翻訳・改変したものです。© Microsoft Corporation. CC BY 4.0 で提供。
Microsoft 公式リファレンス: 英語 (en-us) · 日本語 (ja-jp) · 原文ソース (GitHub)

各言語での呼び出し定義

// d3d11.dll
#include <windows.h>

HRESULT D3D11CreateDeviceAndSwapChain(
    IDXGIAdapter* pAdapter,   // optional
    D3D_DRIVER_TYPE DriverType,
    HMODULE Software,
    D3D11_CREATE_DEVICE_FLAG Flags,
    const D3D_FEATURE_LEVEL* pFeatureLevels,   // optional
    DWORD FeatureLevels,
    DWORD SDKVersion,
    const DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,   // optional
    IDXGISwapChain** ppSwapChain,   // optional
    ID3D11Device** ppDevice,   // optional
    D3D_FEATURE_LEVEL* pFeatureLevel,   // optional
    ID3D11DeviceContext** ppImmediateContext   // optional
);
[DllImport("d3d11.dll", ExactSpelling = true)]
static extern int D3D11CreateDeviceAndSwapChain(
    IntPtr pAdapter,   // IDXGIAdapter* optional
    int DriverType,   // D3D_DRIVER_TYPE
    IntPtr Software,   // HMODULE
    uint Flags,   // D3D11_CREATE_DEVICE_FLAG
    IntPtr pFeatureLevels,   // D3D_FEATURE_LEVEL* optional
    uint FeatureLevels,   // DWORD
    uint SDKVersion,   // DWORD
    IntPtr pSwapChainDesc,   // DXGI_SWAP_CHAIN_DESC* optional
    IntPtr ppSwapChain,   // IDXGISwapChain** optional, out
    IntPtr ppDevice,   // ID3D11Device** optional, out
    IntPtr pFeatureLevel,   // D3D_FEATURE_LEVEL* optional, out
    IntPtr ppImmediateContext   // ID3D11DeviceContext** optional, out
);
<DllImport("d3d11.dll", ExactSpelling:=True)>
Public Shared Function D3D11CreateDeviceAndSwapChain(
    pAdapter As IntPtr,   ' IDXGIAdapter* optional
    DriverType As Integer,   ' D3D_DRIVER_TYPE
    Software As IntPtr,   ' HMODULE
    Flags As UInteger,   ' D3D11_CREATE_DEVICE_FLAG
    pFeatureLevels As IntPtr,   ' D3D_FEATURE_LEVEL* optional
    FeatureLevels As UInteger,   ' DWORD
    SDKVersion As UInteger,   ' DWORD
    pSwapChainDesc As IntPtr,   ' DXGI_SWAP_CHAIN_DESC* optional
    ppSwapChain As IntPtr,   ' IDXGISwapChain** optional, out
    ppDevice As IntPtr,   ' ID3D11Device** optional, out
    pFeatureLevel As IntPtr,   ' D3D_FEATURE_LEVEL* optional, out
    ppImmediateContext As IntPtr   ' ID3D11DeviceContext** optional, out
) As Integer
End Function
' pAdapter : IDXGIAdapter* optional
' DriverType : D3D_DRIVER_TYPE
' Software : HMODULE
' Flags : D3D11_CREATE_DEVICE_FLAG
' pFeatureLevels : D3D_FEATURE_LEVEL* optional
' FeatureLevels : DWORD
' SDKVersion : DWORD
' pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional
' ppSwapChain : IDXGISwapChain** optional, out
' ppDevice : ID3D11Device** optional, out
' pFeatureLevel : D3D_FEATURE_LEVEL* optional, out
' ppImmediateContext : ID3D11DeviceContext** optional, out
Declare PtrSafe Function D3D11CreateDeviceAndSwapChain Lib "d3d11" ( _
    ByVal pAdapter As LongPtr, _
    ByVal DriverType As Long, _
    ByVal Software As LongPtr, _
    ByVal Flags As Long, _
    ByVal pFeatureLevels As LongPtr, _
    ByVal FeatureLevels As Long, _
    ByVal SDKVersion As Long, _
    ByVal pSwapChainDesc As LongPtr, _
    ByVal ppSwapChain As LongPtr, _
    ByVal ppDevice As LongPtr, _
    ByVal pFeatureLevel As LongPtr, _
    ByVal ppImmediateContext As LongPtr) As Long
' VBA7前提(PtrSafe)。32bit Office では LongPtr→Long。Integer=16bit / Long=32bit / LongLong=64bit。
import ctypes
from ctypes import wintypes

D3D11CreateDeviceAndSwapChain = ctypes.windll.d3d11.D3D11CreateDeviceAndSwapChain
D3D11CreateDeviceAndSwapChain.restype = ctypes.c_int
D3D11CreateDeviceAndSwapChain.argtypes = [
    ctypes.c_void_p,  # pAdapter : IDXGIAdapter* optional
    ctypes.c_int,  # DriverType : D3D_DRIVER_TYPE
    wintypes.HANDLE,  # Software : HMODULE
    wintypes.DWORD,  # Flags : D3D11_CREATE_DEVICE_FLAG
    ctypes.c_void_p,  # pFeatureLevels : D3D_FEATURE_LEVEL* optional
    wintypes.DWORD,  # FeatureLevels : DWORD
    wintypes.DWORD,  # SDKVersion : DWORD
    ctypes.c_void_p,  # pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional
    ctypes.c_void_p,  # ppSwapChain : IDXGISwapChain** optional, out
    ctypes.c_void_p,  # ppDevice : ID3D11Device** optional, out
    ctypes.c_void_p,  # pFeatureLevel : D3D_FEATURE_LEVEL* optional, out
    ctypes.c_void_p,  # ppImmediateContext : ID3D11DeviceContext** optional, out
]
require 'fiddle'
require 'fiddle/import'

lib = Fiddle.dlopen('d3d11.dll')
D3D11CreateDeviceAndSwapChain = Fiddle::Function.new(
  lib['D3D11CreateDeviceAndSwapChain'],
  [
    Fiddle::TYPE_VOIDP,  # pAdapter : IDXGIAdapter* optional
    Fiddle::TYPE_INT,  # DriverType : D3D_DRIVER_TYPE
    Fiddle::TYPE_VOIDP,  # Software : HMODULE
    -Fiddle::TYPE_INT,  # Flags : D3D11_CREATE_DEVICE_FLAG
    Fiddle::TYPE_VOIDP,  # pFeatureLevels : D3D_FEATURE_LEVEL* optional
    -Fiddle::TYPE_INT,  # FeatureLevels : DWORD
    -Fiddle::TYPE_INT,  # SDKVersion : DWORD
    Fiddle::TYPE_VOIDP,  # pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional
    Fiddle::TYPE_VOIDP,  # ppSwapChain : IDXGISwapChain** optional, out
    Fiddle::TYPE_VOIDP,  # ppDevice : ID3D11Device** optional, out
    Fiddle::TYPE_VOIDP,  # pFeatureLevel : D3D_FEATURE_LEVEL* optional, out
    Fiddle::TYPE_VOIDP,  # ppImmediateContext : ID3D11DeviceContext** optional, out
  ],
  Fiddle::TYPE_INT)
#[link(name = "d3d11")]
extern "system" {
    fn D3D11CreateDeviceAndSwapChain(
        pAdapter: *mut core::ffi::c_void,  // IDXGIAdapter* optional
        DriverType: i32,  // D3D_DRIVER_TYPE
        Software: *mut core::ffi::c_void,  // HMODULE
        Flags: u32,  // D3D11_CREATE_DEVICE_FLAG
        pFeatureLevels: *const i32,  // D3D_FEATURE_LEVEL* optional
        FeatureLevels: u32,  // DWORD
        SDKVersion: u32,  // DWORD
        pSwapChainDesc: *const DXGI_SWAP_CHAIN_DESC,  // DXGI_SWAP_CHAIN_DESC* optional
        ppSwapChain: *mut *mut core::ffi::c_void,  // IDXGISwapChain** optional, out
        ppDevice: *mut *mut core::ffi::c_void,  // ID3D11Device** optional, out
        pFeatureLevel: *mut i32,  // D3D_FEATURE_LEVEL* optional, out
        ppImmediateContext: *mut *mut core::ffi::c_void  // ID3D11DeviceContext** optional, out
    ) -> i32;
}
// crates: windows-sys provides ready-made bindings for this API.
$sig = @"
[DllImport("d3d11.dll")]
public static extern int D3D11CreateDeviceAndSwapChain(IntPtr pAdapter, int DriverType, IntPtr Software, uint Flags, IntPtr pFeatureLevels, uint FeatureLevels, uint SDKVersion, IntPtr pSwapChainDesc, IntPtr ppSwapChain, IntPtr ppDevice, IntPtr pFeatureLevel, IntPtr ppImmediateContext);
"@
$api = Add-Type -MemberDefinition $sig -Name 'd3d11_D3D11CreateDeviceAndSwapChain' -Namespace Win32 -PassThru
# $api::D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
#uselib "d3d11.dll"
#func global D3D11CreateDeviceAndSwapChain "D3D11CreateDeviceAndSwapChain" sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr, sptr
; D3D11CreateDeviceAndSwapChain pAdapter, DriverType, Software, Flags, varptr(pFeatureLevels), FeatureLevels, SDKVersion, varptr(pSwapChainDesc), ppSwapChain, ppDevice, varptr(pFeatureLevel), ppImmediateContext   ; 戻り値は stat
; pAdapter : IDXGIAdapter* optional -> "sptr"
; DriverType : D3D_DRIVER_TYPE -> "sptr"
; Software : HMODULE -> "sptr"
; Flags : D3D11_CREATE_DEVICE_FLAG -> "sptr"
; pFeatureLevels : D3D_FEATURE_LEVEL* optional -> "sptr"
; FeatureLevels : DWORD -> "sptr"
; SDKVersion : DWORD -> "sptr"
; pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> "sptr"
; ppSwapChain : IDXGISwapChain** optional, out -> "sptr"
; ppDevice : ID3D11Device** optional, out -> "sptr"
; pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> "sptr"
; ppImmediateContext : ID3D11DeviceContext** optional, out -> "sptr"
; ※HSP3.7は #func のため戻り値はシステム変数 stat に格納されます。
出力引数:
#uselib "d3d11.dll"
#cfunc global D3D11CreateDeviceAndSwapChain "D3D11CreateDeviceAndSwapChain" sptr, int, sptr, int, var, int, int, var, sptr, sptr, var, sptr
; res = D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
; pAdapter : IDXGIAdapter* optional -> "sptr"
; DriverType : D3D_DRIVER_TYPE -> "int"
; Software : HMODULE -> "sptr"
; Flags : D3D11_CREATE_DEVICE_FLAG -> "int"
; pFeatureLevels : D3D_FEATURE_LEVEL* optional -> "var"
; FeatureLevels : DWORD -> "int"
; SDKVersion : DWORD -> "int"
; pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> "var"
; ppSwapChain : IDXGISwapChain** optional, out -> "sptr"
; ppDevice : ID3D11Device** optional, out -> "sptr"
; pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> "var"
; ppImmediateContext : ID3D11DeviceContext** optional, out -> "sptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
出力引数:
; HRESULT D3D11CreateDeviceAndSwapChain(IDXGIAdapter* pAdapter, D3D_DRIVER_TYPE DriverType, HMODULE Software, D3D11_CREATE_DEVICE_FLAG Flags, D3D_FEATURE_LEVEL* pFeatureLevels, DWORD FeatureLevels, DWORD SDKVersion, DXGI_SWAP_CHAIN_DESC* pSwapChainDesc, IDXGISwapChain** ppSwapChain, ID3D11Device** ppDevice, D3D_FEATURE_LEVEL* pFeatureLevel, ID3D11DeviceContext** ppImmediateContext)
#uselib "d3d11.dll"
#cfunc global D3D11CreateDeviceAndSwapChain "D3D11CreateDeviceAndSwapChain" intptr, int, intptr, int, var, int, int, var, intptr, intptr, var, intptr
; res = D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
; pAdapter : IDXGIAdapter* optional -> "intptr"
; DriverType : D3D_DRIVER_TYPE -> "int"
; Software : HMODULE -> "intptr"
; Flags : D3D11_CREATE_DEVICE_FLAG -> "int"
; pFeatureLevels : D3D_FEATURE_LEVEL* optional -> "var"
; FeatureLevels : DWORD -> "int"
; SDKVersion : DWORD -> "int"
; pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> "var"
; ppSwapChain : IDXGISwapChain** optional, out -> "intptr"
; ppDevice : ID3D11Device** optional, out -> "intptr"
; pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> "var"
; ppImmediateContext : ID3D11DeviceContext** optional, out -> "intptr"
; ※出力/バッファ引数は var 方式(変数を直接渡す)。varptr 方式にも切替可。
import (
	"golang.org/x/sys/windows"
	"unsafe"
)

var (
	d3d11 = windows.NewLazySystemDLL("d3d11.dll")
	procD3D11CreateDeviceAndSwapChain = d3d11.NewProc("D3D11CreateDeviceAndSwapChain")
)

// pAdapter (IDXGIAdapter* optional), DriverType (D3D_DRIVER_TYPE), Software (HMODULE), Flags (D3D11_CREATE_DEVICE_FLAG), pFeatureLevels (D3D_FEATURE_LEVEL* optional), FeatureLevels (DWORD), SDKVersion (DWORD), pSwapChainDesc (DXGI_SWAP_CHAIN_DESC* optional), ppSwapChain (IDXGISwapChain** optional, out), ppDevice (ID3D11Device** optional, out), pFeatureLevel (D3D_FEATURE_LEVEL* optional, out), ppImmediateContext (ID3D11DeviceContext** optional, out)
r1, _, err := procD3D11CreateDeviceAndSwapChain.Call(
	uintptr(pAdapter),
	uintptr(DriverType),
	uintptr(Software),
	uintptr(Flags),
	uintptr(pFeatureLevels),
	uintptr(FeatureLevels),
	uintptr(SDKVersion),
	uintptr(pSwapChainDesc),
	uintptr(ppSwapChain),
	uintptr(ppDevice),
	uintptr(pFeatureLevel),
	uintptr(ppImmediateContext),
)
_ = err  // syscall.Errno (valid when the call sets last-error)
_ = r1   // HRESULT
function D3D11CreateDeviceAndSwapChain(
  pAdapter: Pointer;   // IDXGIAdapter* optional
  DriverType: Integer;   // D3D_DRIVER_TYPE
  Software: THandle;   // HMODULE
  Flags: DWORD;   // D3D11_CREATE_DEVICE_FLAG
  pFeatureLevels: Pointer;   // D3D_FEATURE_LEVEL* optional
  FeatureLevels: DWORD;   // DWORD
  SDKVersion: DWORD;   // DWORD
  pSwapChainDesc: Pointer;   // DXGI_SWAP_CHAIN_DESC* optional
  ppSwapChain: Pointer;   // IDXGISwapChain** optional, out
  ppDevice: Pointer;   // ID3D11Device** optional, out
  pFeatureLevel: Pointer;   // D3D_FEATURE_LEVEL* optional, out
  ppImmediateContext: Pointer   // ID3D11DeviceContext** optional, out
): Integer; stdcall;
  external 'd3d11.dll' name 'D3D11CreateDeviceAndSwapChain';
result := DllCall("d3d11\D3D11CreateDeviceAndSwapChain"
    , "Ptr", pAdapter   ; IDXGIAdapter* optional
    , "Int", DriverType   ; D3D_DRIVER_TYPE
    , "Ptr", Software   ; HMODULE
    , "UInt", Flags   ; D3D11_CREATE_DEVICE_FLAG
    , "Ptr", pFeatureLevels   ; D3D_FEATURE_LEVEL* optional
    , "UInt", FeatureLevels   ; DWORD
    , "UInt", SDKVersion   ; DWORD
    , "Ptr", pSwapChainDesc   ; DXGI_SWAP_CHAIN_DESC* optional
    , "Ptr", ppSwapChain   ; IDXGISwapChain** optional, out
    , "Ptr", ppDevice   ; ID3D11Device** optional, out
    , "Ptr", pFeatureLevel   ; D3D_FEATURE_LEVEL* optional, out
    , "Ptr", ppImmediateContext   ; ID3D11DeviceContext** optional, out
    , "Int")   ; return: HRESULT
●D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext) = DLL("d3d11.dll", "int D3D11CreateDeviceAndSwapChain(void*, int, void*, dword, void*, dword, dword, void*, void*, void*, void*, void*)")
# 呼び出し: D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
# pAdapter : IDXGIAdapter* optional -> "void*"
# DriverType : D3D_DRIVER_TYPE -> "int"
# Software : HMODULE -> "void*"
# Flags : D3D11_CREATE_DEVICE_FLAG -> "dword"
# pFeatureLevels : D3D_FEATURE_LEVEL* optional -> "void*"
# FeatureLevels : DWORD -> "dword"
# SDKVersion : DWORD -> "dword"
# pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> "void*"
# ppSwapChain : IDXGISwapChain** optional, out -> "void*"
# ppDevice : ID3D11Device** optional, out -> "void*"
# pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> "void*"
# ppImmediateContext : ID3D11DeviceContext** optional, out -> "void*"
# なでしこ1は32bit・ANSI(Shift_JIS)。文字列=char*(ANSI)、ポインタ/ハンドル=void*(4byte)。
const std = @import("std");

extern "d3d11" fn D3D11CreateDeviceAndSwapChain(
    pAdapter: ?*anyopaque, // IDXGIAdapter* optional
    DriverType: i32, // D3D_DRIVER_TYPE
    Software: ?*anyopaque, // HMODULE
    Flags: u32, // D3D11_CREATE_DEVICE_FLAG
    pFeatureLevels: [*c]i32, // D3D_FEATURE_LEVEL* optional
    FeatureLevels: u32, // DWORD
    SDKVersion: u32, // DWORD
    pSwapChainDesc: [*c]DXGI_SWAP_CHAIN_DESC, // DXGI_SWAP_CHAIN_DESC* optional
    ppSwapChain: ?*anyopaque, // IDXGISwapChain** optional, out
    ppDevice: ?*anyopaque, // ID3D11Device** optional, out
    pFeatureLevel: [*c]i32, // D3D_FEATURE_LEVEL* optional, out
    ppImmediateContext: ?*anyopaque // ID3D11DeviceContext** optional, out
) callconv(std.os.windows.WINAPI) i32;
proc D3D11CreateDeviceAndSwapChain(
    pAdapter: pointer,  # IDXGIAdapter* optional
    DriverType: int32,  # D3D_DRIVER_TYPE
    Software: pointer,  # HMODULE
    Flags: uint32,  # D3D11_CREATE_DEVICE_FLAG
    pFeatureLevels: ptr int32,  # D3D_FEATURE_LEVEL* optional
    FeatureLevels: uint32,  # DWORD
    SDKVersion: uint32,  # DWORD
    pSwapChainDesc: ptr DXGI_SWAP_CHAIN_DESC,  # DXGI_SWAP_CHAIN_DESC* optional
    ppSwapChain: pointer,  # IDXGISwapChain** optional, out
    ppDevice: pointer,  # ID3D11Device** optional, out
    pFeatureLevel: ptr int32,  # D3D_FEATURE_LEVEL* optional, out
    ppImmediateContext: pointer  # ID3D11DeviceContext** optional, out
): int32 {.importc: "D3D11CreateDeviceAndSwapChain", stdcall, dynlib: "d3d11.dll".}
pragma(lib, "d3d11");
extern(Windows)
int D3D11CreateDeviceAndSwapChain(
    void* pAdapter,   // IDXGIAdapter* optional
    int DriverType,   // D3D_DRIVER_TYPE
    void* Software,   // HMODULE
    uint Flags,   // D3D11_CREATE_DEVICE_FLAG
    int* pFeatureLevels,   // D3D_FEATURE_LEVEL* optional
    uint FeatureLevels,   // DWORD
    uint SDKVersion,   // DWORD
    DXGI_SWAP_CHAIN_DESC* pSwapChainDesc,   // DXGI_SWAP_CHAIN_DESC* optional
    void* ppSwapChain,   // IDXGISwapChain** optional, out
    void* ppDevice,   // ID3D11Device** optional, out
    int* pFeatureLevel,   // D3D_FEATURE_LEVEL* optional, out
    void* ppImmediateContext   // ID3D11DeviceContext** optional, out
);
ccall((:D3D11CreateDeviceAndSwapChain, "d3d11.dll"), stdcall, Int32,
      (Ptr{Cvoid}, Int32, Ptr{Cvoid}, UInt32, Ptr{Int32}, UInt32, UInt32, Ptr{DXGI_SWAP_CHAIN_DESC}, Ptr{Cvoid}, Ptr{Cvoid}, Ptr{Int32}, Ptr{Cvoid}),
      pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
# pAdapter : IDXGIAdapter* optional -> Ptr{Cvoid}
# DriverType : D3D_DRIVER_TYPE -> Int32
# Software : HMODULE -> Ptr{Cvoid}
# Flags : D3D11_CREATE_DEVICE_FLAG -> UInt32
# pFeatureLevels : D3D_FEATURE_LEVEL* optional -> Ptr{Int32}
# FeatureLevels : DWORD -> UInt32
# SDKVersion : DWORD -> UInt32
# pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> Ptr{DXGI_SWAP_CHAIN_DESC}
# ppSwapChain : IDXGISwapChain** optional, out -> Ptr{Cvoid}
# ppDevice : ID3D11Device** optional, out -> Ptr{Cvoid}
# pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> Ptr{Int32}
# ppImmediateContext : ID3D11DeviceContext** optional, out -> Ptr{Cvoid}
# stdcall は 32bit のみ意味を持つ(x64 では無視)。
local ffi = require("ffi")
ffi.cdef[[
int32_t D3D11CreateDeviceAndSwapChain(
    void* pAdapter,
    int32_t DriverType,
    void* Software,
    uint32_t Flags,
    int32_t* pFeatureLevels,
    uint32_t FeatureLevels,
    uint32_t SDKVersion,
    void* pSwapChainDesc,
    void* ppSwapChain,
    void* ppDevice,
    int32_t* pFeatureLevel,
    void* ppImmediateContext);
]]
local d3d11 = ffi.load("d3d11")
-- d3d11.D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
-- pAdapter : IDXGIAdapter* optional
-- DriverType : D3D_DRIVER_TYPE
-- Software : HMODULE
-- Flags : D3D11_CREATE_DEVICE_FLAG
-- pFeatureLevels : D3D_FEATURE_LEVEL* optional
-- FeatureLevels : DWORD
-- SDKVersion : DWORD
-- pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional
-- ppSwapChain : IDXGISwapChain** optional, out
-- ppDevice : ID3D11Device** optional, out
-- pFeatureLevel : D3D_FEATURE_LEVEL* optional, out
-- ppImmediateContext : ID3D11DeviceContext** optional, out
-- 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
const koffi = require('koffi');
const lib = koffi.load('d3d11.dll');
const D3D11CreateDeviceAndSwapChain = lib.func('__stdcall', 'D3D11CreateDeviceAndSwapChain', 'int32_t', ['void *', 'int32_t', 'void *', 'uint32_t', 'int32_t *', 'uint32_t', 'uint32_t', 'void *', 'void *', 'void *', 'int32_t *', 'void *']);
// D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
// pAdapter : IDXGIAdapter* optional -> 'void *'
// DriverType : D3D_DRIVER_TYPE -> 'int32_t'
// Software : HMODULE -> 'void *'
// Flags : D3D11_CREATE_DEVICE_FLAG -> 'uint32_t'
// pFeatureLevels : D3D_FEATURE_LEVEL* optional -> 'int32_t *'
// FeatureLevels : DWORD -> 'uint32_t'
// SDKVersion : DWORD -> 'uint32_t'
// pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> 'void *'
// ppSwapChain : IDXGISwapChain** optional, out -> 'void *'
// ppDevice : ID3D11Device** optional, out -> 'void *'
// pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> 'int32_t *'
// ppImmediateContext : ID3D11DeviceContext** optional, out -> 'void *'
// 出力ポインタは koffi.out(...) で包む。構造体は koffi.struct で定義。
const lib = Deno.dlopen("d3d11.dll", {
  D3D11CreateDeviceAndSwapChain: { parameters: ["pointer", "i32", "pointer", "u32", "pointer", "u32", "u32", "pointer", "pointer", "pointer", "pointer", "pointer"], result: "i32" },
});
// lib.symbols.D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext)
// pAdapter : IDXGIAdapter* optional -> "pointer"
// DriverType : D3D_DRIVER_TYPE -> "i32"
// Software : HMODULE -> "pointer"
// Flags : D3D11_CREATE_DEVICE_FLAG -> "u32"
// pFeatureLevels : D3D_FEATURE_LEVEL* optional -> "pointer"
// FeatureLevels : DWORD -> "u32"
// SDKVersion : DWORD -> "u32"
// pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> "pointer"
// ppSwapChain : IDXGISwapChain** optional, out -> "pointer"
// ppDevice : ID3D11Device** optional, out -> "pointer"
// pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> "pointer"
// ppImmediateContext : ID3D11DeviceContext** optional, out -> "pointer"
// 文字列引数は "buffer"(NUL 終端のバイト列を Uint8Array で渡す)。
// 値渡し構造体は { struct: [ ...field types... ] } を使用。
<?php
$ffi = FFI::cdef(<<<C
int32_t D3D11CreateDeviceAndSwapChain(
    void* pAdapter,
    int32_t DriverType,
    void* Software,
    uint32_t Flags,
    int32_t* pFeatureLevels,
    uint32_t FeatureLevels,
    uint32_t SDKVersion,
    void* pSwapChainDesc,
    void* ppSwapChain,
    void* ppDevice,
    int32_t* pFeatureLevel,
    void* ppImmediateContext);
C, "d3d11.dll");
// $ffi->D3D11CreateDeviceAndSwapChain(pAdapter, DriverType, Software, Flags, pFeatureLevels, FeatureLevels, SDKVersion, pSwapChainDesc, ppSwapChain, ppDevice, pFeatureLevel, ppImmediateContext);
// pAdapter : IDXGIAdapter* optional
// DriverType : D3D_DRIVER_TYPE
// Software : HMODULE
// Flags : D3D11_CREATE_DEVICE_FLAG
// pFeatureLevels : D3D_FEATURE_LEVEL* optional
// FeatureLevels : DWORD
// SDKVersion : DWORD
// pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional
// ppSwapChain : IDXGISwapChain** optional, out
// ppDevice : ID3D11Device** optional, out
// pFeatureLevel : D3D_FEATURE_LEVEL* optional, out
// ppImmediateContext : ID3D11DeviceContext** optional, out
// 構造体/GUIDへのポインタは cdef が通るよう void* で表記(実型は各引数コメント参照)。値渡し構造体・enum は対応する typedef を cdef に追加すること。
// WINAPI(stdcall): x64 では呼出規約が統一されるため問題なし。x86 では __stdcall 対応のラッパが必要な場合あり。
import com.sun.jna.*;
import com.sun.jna.ptr.*;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;

public interface D3d11 extends StdCallLibrary {
    D3d11 INSTANCE = Native.load("d3d11", D3d11.class);
    int D3D11CreateDeviceAndSwapChain(
        Pointer pAdapter,   // IDXGIAdapter* optional
        int DriverType,   // D3D_DRIVER_TYPE
        Pointer Software,   // HMODULE
        int Flags,   // D3D11_CREATE_DEVICE_FLAG
        IntByReference pFeatureLevels,   // D3D_FEATURE_LEVEL* optional
        int FeatureLevels,   // DWORD
        int SDKVersion,   // DWORD
        Pointer pSwapChainDesc,   // DXGI_SWAP_CHAIN_DESC* optional
        Pointer ppSwapChain,   // IDXGISwapChain** optional, out
        Pointer ppDevice,   // ID3D11Device** optional, out
        IntByReference pFeatureLevel,   // D3D_FEATURE_LEVEL* optional, out
        Pointer ppImmediateContext   // ID3D11DeviceContext** optional, out
    );
}
@[Link("d3d11")]
lib Libd3d11
  fun D3D11CreateDeviceAndSwapChain = D3D11CreateDeviceAndSwapChain(
    pAdapter : Void*,   # IDXGIAdapter* optional
    DriverType : Int32,   # D3D_DRIVER_TYPE
    Software : Void*,   # HMODULE
    Flags : UInt32,   # D3D11_CREATE_DEVICE_FLAG
    pFeatureLevels : Int32*,   # D3D_FEATURE_LEVEL* optional
    FeatureLevels : UInt32,   # DWORD
    SDKVersion : UInt32,   # DWORD
    pSwapChainDesc : DXGI_SWAP_CHAIN_DESC*,   # DXGI_SWAP_CHAIN_DESC* optional
    ppSwapChain : Void*,   # IDXGISwapChain** optional, out
    ppDevice : Void*,   # ID3D11Device** optional, out
    pFeatureLevel : Int32*,   # D3D_FEATURE_LEVEL* optional, out
    ppImmediateContext : Void*   # ID3D11DeviceContext** optional, out
  ) : Int32
end
# 構造体/GUID/enum は lib 内に対応する型定義が必要。
# 呼出規約: x64 は規約統一のため OK。x86(32bit)は WINAPI=stdcall だが Crystal の fun に stdcall 付与構文がなく非対応。
import 'dart:ffi';
import 'package:ffi/ffi.dart';

typedef D3D11CreateDeviceAndSwapChainNative = Int32 Function(Pointer<Void>, Int32, Pointer<Void>, Uint32, Pointer<Int32>, Uint32, Uint32, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Int32>, Pointer<Void>);
typedef D3D11CreateDeviceAndSwapChainDart = int Function(Pointer<Void>, int, Pointer<Void>, int, Pointer<Int32>, int, int, Pointer<Void>, Pointer<Void>, Pointer<Void>, Pointer<Int32>, Pointer<Void>);
final D3D11CreateDeviceAndSwapChain = DynamicLibrary.open('d3d11.dll')
    .lookupFunction<D3D11CreateDeviceAndSwapChainNative, D3D11CreateDeviceAndSwapChainDart>('D3D11CreateDeviceAndSwapChain');
// pAdapter : IDXGIAdapter* optional -> Pointer<Void>
// DriverType : D3D_DRIVER_TYPE -> Int32
// Software : HMODULE -> Pointer<Void>
// Flags : D3D11_CREATE_DEVICE_FLAG -> Uint32
// pFeatureLevels : D3D_FEATURE_LEVEL* optional -> Pointer<Int32>
// FeatureLevels : DWORD -> Uint32
// SDKVersion : DWORD -> Uint32
// pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> Pointer<Void>
// ppSwapChain : IDXGISwapChain** optional, out -> Pointer<Void>
// ppDevice : ID3D11Device** optional, out -> Pointer<Void>
// pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> Pointer<Int32>
// ppImmediateContext : ID3D11DeviceContext** optional, out -> Pointer<Void>
// 文字列は package:ffi の "...".toNativeUtf16()/toNativeUtf8() で変換。
{$mode objfpc}{$H+}
function D3D11CreateDeviceAndSwapChain(
  pAdapter: Pointer;   // IDXGIAdapter* optional
  DriverType: Integer;   // D3D_DRIVER_TYPE
  Software: THandle;   // HMODULE
  Flags: DWORD;   // D3D11_CREATE_DEVICE_FLAG
  pFeatureLevels: Pointer;   // D3D_FEATURE_LEVEL* optional
  FeatureLevels: DWORD;   // DWORD
  SDKVersion: DWORD;   // DWORD
  pSwapChainDesc: Pointer;   // DXGI_SWAP_CHAIN_DESC* optional
  ppSwapChain: Pointer;   // IDXGISwapChain** optional, out
  ppDevice: Pointer;   // ID3D11Device** optional, out
  pFeatureLevel: Pointer;   // D3D_FEATURE_LEVEL* optional, out
  ppImmediateContext: Pointer   // ID3D11DeviceContext** optional, out
): Integer; stdcall;
  external 'd3d11.dll' name 'D3D11CreateDeviceAndSwapChain';
import Foreign
import Foreign.C.Types
import Foreign.C.String

foreign import stdcall safe "D3D11CreateDeviceAndSwapChain"
  c_D3D11CreateDeviceAndSwapChain :: Ptr () -> Int32 -> Ptr () -> Word32 -> Ptr Int32 -> Word32 -> Word32 -> Ptr () -> Ptr () -> Ptr () -> Ptr Int32 -> Ptr () -> IO Int32
-- pAdapter : IDXGIAdapter* optional -> Ptr ()
-- DriverType : D3D_DRIVER_TYPE -> Int32
-- Software : HMODULE -> Ptr ()
-- Flags : D3D11_CREATE_DEVICE_FLAG -> Word32
-- pFeatureLevels : D3D_FEATURE_LEVEL* optional -> Ptr Int32
-- FeatureLevels : DWORD -> Word32
-- SDKVersion : DWORD -> Word32
-- pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> Ptr ()
-- ppSwapChain : IDXGISwapChain** optional, out -> Ptr ()
-- ppDevice : ID3D11Device** optional, out -> Ptr ()
-- pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> Ptr Int32
-- ppImmediateContext : ID3D11DeviceContext** optional, out -> Ptr ()
-- 要 GHC(Windows)。stdcall は x64 では ccall として扱われる。ブロックする API は safe 呼び出し推奨。
open Ctypes
open Foreign

let d3d11createdeviceandswapchain =
  foreign "D3D11CreateDeviceAndSwapChain"
    ((ptr void) @-> int32_t @-> (ptr void) @-> uint32_t @-> (ptr int32_t) @-> uint32_t @-> uint32_t @-> (ptr void) @-> (ptr void) @-> (ptr void) @-> (ptr int32_t) @-> (ptr void) @-> returning int32_t)
(* pAdapter : IDXGIAdapter* optional -> (ptr void) *)
(* DriverType : D3D_DRIVER_TYPE -> int32_t *)
(* Software : HMODULE -> (ptr void) *)
(* Flags : D3D11_CREATE_DEVICE_FLAG -> uint32_t *)
(* pFeatureLevels : D3D_FEATURE_LEVEL* optional -> (ptr int32_t) *)
(* FeatureLevels : DWORD -> uint32_t *)
(* SDKVersion : DWORD -> uint32_t *)
(* pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> (ptr void) *)
(* ppSwapChain : IDXGISwapChain** optional, out -> (ptr void) *)
(* ppDevice : ID3D11Device** optional, out -> (ptr void) *)
(* pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> (ptr int32_t) *)
(* ppImmediateContext : ID3D11DeviceContext** optional, out -> (ptr void) *)
(* foreign は cdecl 前提。x64 Windows では WINAPI と一致。構造体は ctypes structure を定義のこと。 *)
(cffi:define-foreign-library d3d11 (t "d3d11.dll"))
(cffi:use-foreign-library d3d11)

(cffi:defcfun ("D3D11CreateDeviceAndSwapChain" d3-d11-create-device-and-swap-chain :convention :stdcall) :int32
  (p-adapter :pointer)   ; IDXGIAdapter* optional
  (driver-type :int32)   ; D3D_DRIVER_TYPE
  (software :pointer)   ; HMODULE
  (flags :uint32)   ; D3D11_CREATE_DEVICE_FLAG
  (p-feature-levels :pointer)   ; D3D_FEATURE_LEVEL* optional
  (feature-levels :uint32)   ; DWORD
  (sdkversion :uint32)   ; DWORD
  (p-swap-chain-desc :pointer)   ; DXGI_SWAP_CHAIN_DESC* optional
  (pp-swap-chain :pointer)   ; IDXGISwapChain** optional, out
  (pp-device :pointer)   ; ID3D11Device** optional, out
  (p-feature-level :pointer)   ; D3D_FEATURE_LEVEL* optional, out
  (pp-immediate-context :pointer))   ; ID3D11DeviceContext** optional, out
; isize/usize(INT_PTR/SIZE_T)は x64 前提で :int64/:uint64。x86 では :int32/:uint32。
use Win32::API;
my $D3D11CreateDeviceAndSwapChain = Win32::API::More->new('d3d11',
    'int D3D11CreateDeviceAndSwapChain(LPVOID pAdapter, int DriverType, HANDLE Software, DWORD Flags, LPVOID pFeatureLevels, DWORD FeatureLevels, DWORD SDKVersion, LPVOID pSwapChainDesc, LPVOID ppSwapChain, LPVOID ppDevice, LPVOID pFeatureLevel, LPVOID ppImmediateContext)');
# my $ret = $D3D11CreateDeviceAndSwapChain->Call($pAdapter, $DriverType, $Software, $Flags, $pFeatureLevels, $FeatureLevels, $SDKVersion, $pSwapChainDesc, $ppSwapChain, $ppDevice, $pFeatureLevel, $ppImmediateContext);
# pAdapter : IDXGIAdapter* optional -> LPVOID
# DriverType : D3D_DRIVER_TYPE -> int
# Software : HMODULE -> HANDLE
# Flags : D3D11_CREATE_DEVICE_FLAG -> DWORD
# pFeatureLevels : D3D_FEATURE_LEVEL* optional -> LPVOID
# FeatureLevels : DWORD -> DWORD
# SDKVersion : DWORD -> DWORD
# pSwapChainDesc : DXGI_SWAP_CHAIN_DESC* optional -> LPVOID
# ppSwapChain : IDXGISwapChain** optional, out -> LPVOID
# ppDevice : ID3D11Device** optional, out -> LPVOID
# pFeatureLevel : D3D_FEATURE_LEVEL* optional, out -> LPVOID
# ppImmediateContext : ID3D11DeviceContext** optional, out -> LPVOID
# 値渡し構造体は pack() した文字列、または Win32::API::Struct を使用。

関連項目

使用する型