일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CommandList
- 코딩
- c
- vertex
- engine
- 전처리문
- C언어
- 다이렉트 초기화
- 다이렉트X
- 게임수학
- DirectX
- UE4
- DirectX12
- swapchain
- GPU
- Direct3D
- Input Assembler
- RenderTargetView
- Direct Init
- 동기화
- Direct3D Init
- 다중표본화
- 프로그래밍
- DESC
- CPU
- 세팅
- C++
- DirectXTK
- View
- 다이렉트X 튜토리얼
- Today
- Total
목록Direct Init (6)
비타Cpp
다음으로, 응용 프로그램에 필요한 서술자/뷰들을 담을 서술자 힙을 만들어야 한다. 서술자 힙(Descriptor Heap)은 ID3D12DescrptorHeap 인터페이스로 대표된다. 힙을 생성하는 메서드는 ID3D12Device::CreateDescriptorHeap이다. SwapChainBufferCount에 설정된 개수만큼의 렌더 대상 뷰(Render Target View, RTV)들과 하나의 깊이·스텐실 뷰(Depth/Stencil View, DSV)가 필요하다. 렌더 대상 뷰는 교환 사슬에서 렌더링의 대상이 되는 버퍼 자원을 서술하고, 깊이·스텐실 뷰는 깊이 판정을 위한 버퍼자원을 서술한다. 서술자 힙은 서술자 종류마다 따로 만들어야 한다. 다음은 이 힙들을 생성하는 코드이다. //D3DApp...
초기화 공정 다음 단계는 교환 사슬(Swap Chain)을 생성하는 것이다. 이를 위해서는 DXGI_SWAP_CHAIN_DESC구조체 인스턴스의 멤버들을 지금 생성하고자 하는 교환 사슬에 맞게 설정해야 한다. 이 구조체의 정의는 다음과 같다. https://docs.microsoft.com/en-us/windows/win32/api/dxgi/ns-dxgi-dxgi_swap_chain_desc DXGI_SWAP_CHAIN_DESC (dxgi.h) - Win32 apps Describes a swap chain. docs.microsoft.com typedef struct DXGI_SWAP_CHAIN_DESC { DXGI_MODE_DESC BufferDesc; DXGI_SAMPLE_DESC SampleDes..
명령 대기열(Command Queue)을 대표하는 인터페이스는 ID3D12CommandQueue이고 명령 할당자(Command Allocator)를 대표하는 인터페이스는 ID3D12CommandAllocator, 명령 목록(Command List)를 대표하는 인터페이스는 ID3D12GraphicCommandList이다. 다음 함수는 명령 대기열과 명령 할당자, 명령목록을 생성하는 방법을 보여준다. //D3DApp.h Microsoft::WRL::ComPtrmCommandQueue; Microsoft::WRL::ComPtrmDirectCmdListAlloc; Microsoft::WRL::ComPtrmCommandList; //D3DApp.cpp void D3DApp::CreateCommandObjects(..
Direct3D 11급 장치는 모두 4X MSAA를 지원하긴 하지만, 일단 명시적으로 4X MSAA를 지원하는지에 대한 지원 여부를 점검한다. D3D12_FEATURE_DATA_MULTISAMPLE_QUALITY_LEVELS msQualityLevels; msQualityLevels.Format = mBackBufferFormat; msQualityLevels.SampleCount = 4; msQualityLevels.Flags = D3D12_MULTISAMPLE_QUALITY_LEVELS_FLAG_NONE; msQualityLevels.NumQualityLevels = 0; ThrowIfFailed(md3dDevice->CheckFeatureSupport( D3D12_FEATURE_MULTISAMPLE..
장치를 생성한 다음에는 CPU와 GPU의 동기화를 위한 Fence 객체를 생성한다. 또한, 이후에 필요한 서술자들의 크기도 미리 조회해서 설정해 둔다. 서술자 크기는 GPU마다 다를 수 있으므로, 이처럼 실행 시점에서 적절한 메서드를 호출해서 알아내야 한다. 나중에 서술자 크기가 필요할 때 바로 사용할 수 있도록, 크기들을 적절한 멤버 변수들에 저장해 둔다. ThrowIfFailed(md3dDevice->CreateFence(0, D3D12_FENCE_FLAG_NONE, IID_PPV_ARGS(&mFence))); mRtvDescriptorSize = md3dDevice->GetDescriptorHandleIncrementSize( D3D12_DESCRIPTOR_HEAP_TYPE_RTV); mDsvDes..
Direct3D 초기화는 Direct3D 12 장치(ID3D12Device)를 생성하는 것으로 시작한다. 장치(device)는 디스플레이 어댑터를 나타내는 객체이다. 일반적으로는 물리적인 그래픽 하드웨어 장치이지만, 이를 흉내 내는 소프트웨어 디스플레이 어댑터(WARP)도 존재한다. Direct3D12 장치는 기능 지원 점검에 쓰이며, 자원이나 뷰, 명령 목록 등의 다른 모든 Direct3D 인터페이스 객체들의 생성에도 쓰인다. 장치를 생성할 때에는 다음과 같은 함수를 사용한다. HRESULT D3D12CreateDevice( IUnknown *pAdapter, D3D_FEATURE_LEVEL MinimumFeatureLevel, REFIID riid,//ID3D12Device에 해당하는 ID를 넣어야함..