/// <summary> /// Creates an <see cref="ID2D1Device"/> instance. /// </summary> /// <param name="d2D1Factory2">The input <see cref="ID2D1Factory2"/> instance to use to create the device.</param> /// <returns>A new <see cref="ID2D1Device"/> instance.</returns> public static unsafe ComPtr <ID2D1Device> CreateD2D1Device(ID2D1Factory2 *d2D1Factory2) { using ComPtr <ID3D11Device> d3D11Device = default; uint creationFlags = (uint)D3D11_CREATE_DEVICE_FLAG.D3D11_CREATE_DEVICE_BGRA_SUPPORT; D3D_FEATURE_LEVEL *featureLevels = stackalloc[] { D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_10_1, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_10_0, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_3, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_2, D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_1 }; D3D_FEATURE_LEVEL d3DFeatureLevel; // Create the Direct3D 11 API device and context DirectX.D3D11CreateDevice( pAdapter: null, DriverType: D3D_DRIVER_TYPE.D3D_DRIVER_TYPE_HARDWARE, Software: HMODULE.NULL, Flags: creationFlags, pFeatureLevels: featureLevels, FeatureLevels: 7, SDKVersion: D3D11.D3D11_SDK_VERSION, ppDevice: d3D11Device.GetAddressOf(), pFeatureLevel: &d3DFeatureLevel, ppImmediateContext: null).Assert(); using ComPtr <IDXGIDevice3> dxgiDevice3 = default; // Get a DXGI device from the D3D11 device d3D11Device.CopyTo(dxgiDevice3.GetAddressOf()).Assert(); using ComPtr <ID2D1Device> d2D1Device = default; // Create a D2D1 device d2D1Factory2->CreateDevice( dxgiDevice: (IDXGIDevice *)dxgiDevice3.Get(), d2dDevice: d2D1Device.GetAddressOf()); return(d2D1Device.Move()); }