public static ID2D1DeviceContext CreateRenderTarget( ID2D1Factory1 factory2d, ID3D11Device device3d) { var dxgiDevice = device3d.QueryInterface <IDXGIDevice>(); using (ID2D1Device device2d = factory2d.CreateDevice(dxgiDevice)) { return(device2d.CreateDeviceContext(DeviceContextOptions.None)); } }
public static ComObject <T> CreateDevice <T>(this ID2D1Factory1 factory, IDXGIDevice device) where T : ID2D1Device { if (factory == null) { throw new ArgumentNullException(nameof(factory)); } if (device == null) { throw new ArgumentNullException(nameof(device)); } factory.CreateDevice(device, out var dev).ThrowOnError(); return(new ComObject <T>((T)dev)); }
void EnsureDevice(IntPtr hWnd) { if (m_device) { return; } // D3D Span <D3D_FEATURE_LEVEL> levels = stackalloc D3D_FEATURE_LEVEL[] { D3D_FEATURE_LEVEL._11_1, 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 }; var flags = D3D11_CREATE_DEVICE_FLAG._DEBUG | D3D11_CREATE_DEVICE_FLAG._BGRA_SUPPORT; var level = default(D3D_FEATURE_LEVEL); d3d11.D3D11CreateDevice( null, D3D_DRIVER_TYPE._HARDWARE, IntPtr.Zero, (uint)flags, ref MemoryMarshal.GetReference(levels), (uint)levels.Length, Constants.D3D11_SDK_VERSION, out m_device, out level, out m_context).ThrowIfFailed(); // D2D using (var dxgiDevice = new IDXGIDevice()) { m_device.QueryInterface(ref IDXGIDevice.IID, out dxgiDevice.PtrForNew).ThrowIfFailed(); using (var d2dFactory = new ID2D1Factory1()) { var factory_opt = new D2D1_FACTORY_OPTIONS { }; d2d1.D2D1CreateFactory(D2D1_FACTORY_TYPE._SINGLE_THREADED, ref ID2D1Factory1.IID, ref factory_opt, out d2dFactory.PtrForNew).ThrowIfFailed(); d2dFactory.GetDesktopDpi(out float x, out float y); // using (var d2dDevice = new ()) { var prop = new D2D1_CREATION_PROPERTIES { }; d2dFactory.CreateDevice(dxgiDevice, out ID2D1Device d2dDevice).ThrowIfFailed(); using (d2dDevice) d2dDevice.CreateDeviceContext(D2D1_DEVICE_CONTEXT_OPTIONS._NONE, out m_d2dContext).ThrowIfFailed(); } } // SWAPChain // using (var adapter = new ()) { dxgiDevice.GetAdapter(out IDXGIAdapter adapter).ThrowIfFailed(); using (adapter) using (var dxgiFactory = new IDXGIFactory2()) { adapter.GetParent(ref IDXGIFactory2.IID, out dxgiFactory.PtrForNew).ThrowIfFailed(); var swapChainDesc = new DXGI_SWAP_CHAIN_DESC1 { Width = 0, Height = 0, Format = DXGI_FORMAT._B8G8R8A8_UNORM, Stereo = 0 }; swapChainDesc.SampleDesc.Count = 1; swapChainDesc.SampleDesc.Quality = 0; swapChainDesc.BufferUsage = DXGI_USAGE._RENDER_TARGET_OUTPUT; swapChainDesc.BufferCount = 2; //swapChainDesc.Scaling = DXGI_SCALING_NONE; swapChainDesc.Scaling = DXGI_SCALING._STRETCH; //swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT._DISCARD; swapChainDesc.AlphaMode = DXGI_ALPHA_MODE._UNSPECIFIED; var fs = new DXGI_SWAP_CHAIN_FULLSCREEN_DESC { Windowed = 1, }; dxgiFactory.CreateSwapChainForHwnd( dxgiDevice, hWnd, ref swapChainDesc, ref fs, null, out m_swapchain).ThrowIfFailed(); Console.Write("CreateSwapchain"); } } } // Dwrite dwrite.DWriteCreateFactory(DWRITE_FACTORY_TYPE._SHARED, ref IDWriteFactory.IID, out m_dwriteFactory.PtrForNew).ThrowIfFailed(); }