보통은 SwapChain 은 D3D11CreateDeviceAndSwapChain 로 만든다.
이때 Device, DeviceContext, SwapChain 이 같이 만들어진다.
그럼 새 HWND 의 SwapChain 을 만들 때 마다 Device 를 만들어야 하는가?
하지만 한 프로그램에서 여러 Device 를 쓰는 것은 좋지 않다.
일단 device 마다 gpu 에 올린 데이터가 공유되기 힘들기 때문이다.
그렇다면 기존 device 에서 swapchain 을 새로 만들기 위해선 어떻게 해야하는가?
1 2 3 4 5 6 7 8 9 10 | 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://docs.microsoft.com/en-us/windows/win32/api/dxgi/nf-dxgi-idxgifactory-createswapchain
위의 함수를 쓰면 된다.
위 msdn 이 말하듯, 용도에 따라 https://docs.microsoft.com/en-us/windows/win32/api/dxgi1_2/nf-dxgi1_2-idxgifactory2-createswapchainforcomposition 같은걸 쓰라곤 하는데, 내 컴에 깔린 DirectX SDK 엔 지원하지 않아서 걍 냅뒀다.
댓글 없음:
댓글 쓰기