비타Cpp

Direct3D의 초기화 - 4. 명령 대기열과 명령 목록 생성 본문

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 호출 시 파이프라인 상태 객체 매개변수에 널 포인터를 지정했다. 이번에는 어떤 그리기 명령도 제출하지 않으므로 유효한 파이프라인 상태 객체를 지정하지 않았다.

Comments