1. HWND 사용
1 2 3 4 5 | <Viewbox> <WindowsFormsHost Height="240" Width="500"> <wf:PictureBox x:Name="GameDisplay"/> </WindowsFormsHost> </Viewbox> | cs |
1 2 3 4 | unsafe { _editor.Init(500, 500, true, GameDisplay.Handle.ToPointer(), false, 0, 1); } | cs |
위처럼 WinForm 을 이용해서 Control 을 만들고, 그 컨트롤의 HWND 을 뽑아서 그걸 이용해 d3d device 를 만들면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | void D3DImage::CreateSwapChain(unsigned int screenWidth, unsigned int screenHeight, HWND hwnd) { DXGI_SWAP_CHAIN_DESC desc_swapChain; ZeroMemory(&desc_swapChain, sizeof(DXGI_SWAP_CHAIN_DESC)); //count of back buffer desc_swapChain.BufferCount = 1; desc_swapChain.BufferDesc.Width = screenWidth; desc_swapChain.BufferDesc.Height = screenHeight; desc_swapChain.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; desc_swapChain.BufferDesc.RefreshRate.Numerator = 0; desc_swapChain.BufferDesc.RefreshRate.Denominator = 1; desc_swapChain.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED; desc_swapChain.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED; desc_swapChain.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; desc_swapChain.SampleDesc.Count = 1;// off multi sampling desc_swapChain.SampleDesc.Quality = 0; desc_swapChain.SwapEffect = DXGI_SWAP_EFFECT_SEQUENTIAL; desc_swapChain.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; desc_swapChain.Windowed = true; desc_swapChain.OutputWindow = hwnd; IDXGIDevice* device; Graphic::Get_Device()->QueryInterface(__uuidof(IDXGIDevice), (void**)&device); IDXGIAdapter* adapter; device->GetParent(__uuidof(IDXGIAdapter), (void**)&adapter); IDXGIFactory* factory; adapter->GetParent(__uuidof(IDXGIFactory), (void**)&factory); factory->CreateSwapChain(Graphic::Get_Device(), &desc_swapChain, &_swapChain); } | cs |
https://stackoverflow.com/questions/21292996/directx11-2-window-rendering
이 때 위처럼 하나의 device 를 이용해 여러개의 swapchain 을 만들어야한다.
다른 device 에서 생성한 d3dcomponent 는 서로 호환이 안됨.
2. D3D Image 사용
https://www.codeproject.com/Articles/28526/Introduction-to-D3DImage
https://github.com/Marlamin/SharpDX.WPF/blob/master/SharpDX.WPF/DXImageSource.cs
D3DImage 가 만들어져서, 이걸로 ImageBrush 를 만들고, 이게 Control 에 붙는게 WPF.
근데 direct9 만 지원해서, 따로 변환기를 써야함. 아래 깃이 그거.
그리고 SharpDX 버전이 2.6.2 만 지원이 되는데, 이거가지고 충돌나서 못써먹겠음.
3. DXGI
어려워보여서 아직 보류
댓글 없음:
댓글 쓰기