2020. 7. 13. 01:00ใPROGRAMMING/DirectX 12
[ DirectX 12 ์ฅ์น ์ด๊ธฐํ ๋จ๊ณ ]
1 ๋จ๊ณ Device(๊ทธ๋ํฝ ๋๋ฐ์ด์ค) ์์ฑ.
2 ๋จ๊ณ CommandQueue์ CommandList ์์ฑ.
3 ๋จ๊ณ SwapChain ์์ฑ.
4 ๋จ๊ณ FenceObject ์์ฑ.
5 ๋จ๊ณ ๋ ๋ํ๊ฒ(RenderTarget)๊ณผ ๊น์ด/์คํ ์ค(Depth/Stencil) ๋ฒํผ ์์ฑ.
[ 1 ๋จ๊ณ Device ์์ฑ ]
Device๋ฅผ ์์ฑํ๊ธฐ ์ํด์๋ IDXGIFactory๋ผ๋ ์ปด๊ฐ์ฒด๊ฐ ํ์ํ๋ค.
DXGI (DirectX Graphics Infrastructure)๋ ๋ฌด์์ธ๊ฐ?
- Direct3D ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ๊ธฐ๋ฐ์ด ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
- DirectX ๊ทธ๋ํฝ ๋ฐํ์์ ๋ ๋ฆฝ์ ์ธ ์ ์์ค(Low-Level)์ ์์ ๋ค์ ๊ด๋ฆฌํ๋ค.
(๊ทธ๋ํฝ ์นด๋ ์ด๊ฑฐ, ๋ชจ๋ํฐ ์ด๊ฑฐ, ํ๋ฆฌ์ ํธ, ์ ์ฒด ํ๋ฉด ๋ชจ๋ ์ ํ ๋ฑ๋ฑ)
- Direct 3D๋ฅผ ์คํํ๋ ค๊ณ ํ๋ฉด ๋ฐ๋์ DXGI๊ฐ ์์ด์ผ ํ๋ค.
- Direct 3D๋ฟ๋ง ์๋๋ผ ์ผ๋ฐ์ ์ธ ์๋์ฐ ์ด์์ฒด์ ์ ๋ฐ์ ํ๊ฒ ์ฐ๊ด์ด ๋์ด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ณ์ธต์ด๋ค.
- Direct 3D๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค๋ฉด ๋ฌด์กฐ๊ฑด DXGI๋ฅผ ๊ฑฐ์ณ์ผ ํ๋ค.
- DXGI๋ฅผ ๋ง๋ ์ด์ ๋ ๊ทธ๋ํฝ ์ถ๋ ฅ์ ํ๋ค ๋ณด๋ SwapChain, Present ๋ฑ๋ฑ ์ ๊ฐ๋ ์ด ํ์ํ๋ฐ,
์ด ๊ฐ๋ ๋ค์ ์ค์ 3D๋ฅผ ๊ตฌํํ๋ ๋ด์ฉ๊ณผ๋ ๋ณ๊ฐ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋ ๊ธฐ๋ฅ์ด๊ธฐ ๋๋ฌธ์ ๋ถ๋ฆฌํ ๊ฒ์ด๋ค.
์ฐฝ ๋ชจ๋? ์ ์ฒด ํ๋ฉด ๋ชจ๋? ๋ชจ๋ํฐ๊ฐ ๋ช ๊ฐ ์ฐ๊ฒฐ? ํน์ ๊ทธ๋ํฝ ์นด๋๊ฐ ๋ช ๊ฐ ์ฐ๊ฒฐ?
์ด ๋ด์ฉ๋ค์ Direct3D์๋ ๊ด๋ จ์ด ์๋ค.
- IDXGIFactory1, IDXGIFactory2, 3, 4์ ์ซ์๋ DXGI์ ๋ฒ์ ์ ๋ํ๋ธ๋ค.
- DXGI๋ฒ์ ์ ์์๊ตฌ์กฐ๋ก ๋์ด์์ผ๋ฏ๋ก ์์ ๋ฒ์ ์ ํ์ ๋ฒ์ ์ ๋ด์ฉ์ ๋ชจ๋ ํฌํจํ๊ณ ์๋ค.
DXGI์ ๊ฐ๋ ์ ์์์ผ๋ ์ด์ IDXGIFactory์ ๋ํด์ ์์๋ณด์.
IDXGIFactory๋ ์ด๋ํฐ(Adapter), ์ถ๋ ฅ์ฅ์น(Output), ๋๋ฐ์ด์ค(Device)๋ฅผ ํฌํจํ๊ณ ์๋ ์ปด๊ฐ์ฒด์ด๋ค.
์ด๋ํฐ๋ ํ๋์จ์ด, ์ํํธ์จ์ด์ ๋ฅ๋ ฅ์ ์ถ์ํํ ๊ฐ์ฒด, ์ฆ ๋น๋์ค ์นด๋๋ฅผ ์๋ฏธํ๋ค.
์ถ๋ ฅ์ฅ์น๋ ๋ชจ๋ํฐ๋ฅผ ์๋ฏธํ๊ณ , ๋๋ฐ์ด์ค๋ ์ปดํจํฐ์ ์ฅ์ฐฉ๋ ๊ทธ๋ํฝ ์นด๋๋ฅผ ์๋ฏธํ๋ค.
IDXGIFactory๋ฅผ ํตํด์ ๋ชจ๋ํฐ๊ฐ ๋ช ๊ฐ ์ฐ๊ฒฐ๋์ด ์๋์ง, ๊ทธ๋ํฝ ์นด๋๊ฐ ๋ช ๊ฐ ์ฅ์ฐฉ๋์ด ์๋์ง ๋ฑ์
์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
IDXGIFactory4* m_pFactory๋ฅผ ์ ์ธํ๊ณ , CreateDXGIFactory1() ํจ์ ํธ์ถ์ ํตํด ์์ฑํ ์ ์๋ค.
IDXGIFactory๋ฅผ ์์ฑํ๋ค๋ฉด ์ด์ IDXGIFactory์ ๋ด์ฅ ํจ์์ธ EnumAdapters1๋ฅผ ํตํด
์ปดํจํฐ์ ์ฅ์ฐฉ๋ ๊ทธ๋ํฝ ์นด๋๋ค์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค.
EnumAdpaters๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ IDXGIAdapter ์ปด๊ฐ์ฒด๊ฐ ํ์ํ๋ค.
์ฐพ์ ๊ทธ๋ํฝ ์นด๋์ ์ ๋ณด๋ DXGI_ADAPTER_DESC์ ํตํด ์ป์ ์ ์๋ค.
๋ณดํต 0๋ฒ ์ฌ๋กฏ์ ์ฑ๋ฅ์ด ์ข์ ๋๋ฐ์ด์ค๊ฐ ์ฅ์ฐฉ๋์ด ์์ง๋ง,
๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ ์ด ๊ตฌ์กฐ์ฒด๋ฅผ ํตํด ์ฐพ์์ ์ฐ๊ฒฐํด ์ค๋ค.
๋๋ฐ์ด์ค ์ด๋ํฐ ์ ๋ณด๋ฅผ ์ป์๋ค๋ฉด ์ด์ ๊ทธ๋ํฝ ๋๋ฐ์ด์ค๋ฅผ ์์ฑํด์ค๋ค.
๋๋ฐ์ด์ค ์์ฑ์ ID3D12Device* ๋๋ฐ์ด์ค ์ปด๊ฐ์ฒด๋ฅผ ์ ์ธํ๊ณ ,
D3D12CreateDevice() ํจ์๋ฅผ ํตํด ์์ฑํ ์ ์๋ค.
๋ง์ฝ ์ฅ์ฐฉ๋ ๊ทธ๋ํฝ ์นด๋๊ฐ DirectX 12๋ฅผ ์ง์ํ์ง ์๋๋ค๋ฉด, DirectX 11 ์์ค ๋ ๋ฒจ๋ก ์์ฑํด์ค๋ค.
'PROGRAMMING > DirectX 12' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 2 (0) | 2020.07.27 |
---|---|
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (5) - part 1 (3) | 2020.07.25 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (4) (0) | 2020.07.16 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (3) (1) | 2020.07.15 |
DirectX 12 ์ฅ์น ์ด๊ธฐํ ์ดํดํ๊ธฐ (2) (2) | 2020.07.14 |