DirectX12/튜토리얼
Direct3D의 초기화 - 4. 명령 대기열과 명령 목록 생성
멍C
2021. 10. 2. 12:13
명령 대기열(Command Queue)을 대표하는 인터페이스는 ID3D12CommandQueue이고 명령 할당자(Command Allocator)를 대표하는 인터페이스는 ID3D12CommandAllocator, 명령 목록(Command List)를 대표하는 인터페이스는 ID3D12GraphicCommandList이다.
다음 함수는 명령 대기열과 명령 할당자, 명령목록을 생성하는 방법을 보여준다.
//D3DApp.h
Microsoft::WRL::ComPtr<ID3D12CommandQueue> mCommandQueue;
Microsoft::WRL::ComPtr<ID3D12CommandAllocator> mDirectCmdListAlloc;
Microsoft::WRL::ComPtr<ID3D12GraphicsCommandList> mCommandList;
//D3DApp.cpp
void D3DApp::CreateCommandObjects()
{
D3D12_COMMAND_QUEUE_DESC queueDesc = {};
queueDesc.Type = D3D12_COMMAND_LIST_TYPE_DIRECT;
queueDesc.Flags = D3D12_COMMAND_QUEUE_FLAG_NONE;
ThrowIfFailed(md3dDevice->CreateCommandQueue(&queueDesc, IID_PPV_ARGS(&mCommandQueue)));
ThrowIfFailed(md3dDevice->CreateCommandAllocator(
D3D12_COMMAND_LIST_TYPE_DIRECT,
IID_PPV_ARGS(mDirectCmdListAlloc.GetAddressOf())));
ThrowIfFailed(md3dDevice->CreateCommandList(
0,
D3D12_COMMAND_LIST_TYPE_DIRECT,
mDirectCmdListAlloc.Get(), //연관된 명령 할당자
nullptr, //초기 파이프라인 상태 객체
IID_PPV_ARGS(mCommandList.GetAddressOf())));
//Command리스트를 닫고 시작해야한다.
//다시 Command를 작성할때는 닫혀있어야 하기때문이다.
mCommandList->Close();
}
CreateCommandList 호출 시 파이프라인 상태 객체 매개변수에 널 포인터를 지정했다. 이번에는 어떤 그리기 명령도 제출하지 않으므로 유효한 파이프라인 상태 객체를 지정하지 않았다.