2020년 11월 4일 수요일

DirectX - CreateSwapChain


보통은 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 엔 지원하지 않아서 걍 냅뒀다.



댓글 없음:

댓글 쓰기

List