mCommandAllocator->Reset();
mCommandList->Reset(mCommandAllocator.Get(), mPSO.Get());
璁剧疆 root signature
mCommandList->SetGraphicsRootSignature(mRootSignature.Get());
璁剧疆 viewport and scissor rectangles
mCommandList->RSSetViewports(1, &mViewPort); mCommandList->RSSetScissorRects(1, &mRectScissor);
mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(mRenderTarget.Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET));
float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f }; mCommandList->ClearRenderTargetView(mDescriptorHeap->GetCPUDescriptorHandleForHeapStart(), clearColor, 0, nullptr); mCommandList->OMSetRenderTargets(1, &mDescriptorHeap->GetCPUDescriptorHandleForHeapStart(), true, nullptr); mCommandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); mCommandList->IASetVertexBuffers(0, 1, &mDescViewBufVert); mCommandList->DrawInstanced(3, 1, 0, 0);
mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(mRenderTarget.Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT));
mCommandList->Close();
ID3D12CommandList* ppCommandLists[] = { mCommandList.Get() }; mCommandQueue->ExecuteCommandLists(_countof(ppCommandLists), ppCommandLists);
mSwapChain->Present(1, 0); mIndexLastSwapBuf = (1 + mIndexLastSwapBuf) % cNumSwapBufs; mSwapChain->GetBuffer(mIndexLastSwapBuf, IID_PPV_ARGS(mRenderTarget.ReleaseAndGetAddressOf())); mDevice->CreateRenderTargetView(mRenderTarget.Get(), nullptr, mDescriptorHeap->GetCPUDescriptorHandleForHeapStart());
waitForGPU();
void populateCommandLists() { mCommandAllocator->Reset(); mCommandList->Reset(mCommandAllocator.Get(), mPSO.Get()); mCommandList->SetGraphicsRootSignature(mRootSignature.Get()); mCommandList->RSSetViewports(1, &mViewPort); mCommandList->RSSetScissorRects(1, &mRectScissor); mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(mRenderTarget.Get(), D3D12_RESOURCE_STATE_PRESENT, D3D12_RESOURCE_STATE_RENDER_TARGET)); float clearColor[] = { 0.0f, 0.2f, 0.4f, 1.0f }; mCommandList->ClearRenderTargetView(mDescriptorHeap->GetCPUDescriptorHandleForHeapStart(), clearColor, 0, nullptr); mCommandList->OMSetRenderTargets(1, &mDescriptorHeap->GetCPUDescriptorHandleForHeapStart(), true, nullptr); mCommandList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST); mCommandList->IASetVertexBuffers(0, 1, &mDescViewBufVert); mCommandList->DrawInstanced(3, 1, 0, 0); mCommandList->ResourceBarrier(1, &CD3DX12_RESOURCE_BARRIER::Transition(mRenderTarget.Get(), D3D12_RESOURCE_STATE_RENDER_TARGET, D3D12_RESOURCE_STATE_PRESENT)); mCommandList->Close(); } void Render() { populateCommandLists(); ID3D12CommandList* ppCommandLists[] = { mCommandList.Get() }; mCommandQueue->ExecuteCommandLists(1, ppCommandLists); mSwapChain->Present(1, 0); mIndexLastSwapBuf = (1 + mIndexLastSwapBuf) % cNumSwapBufs; mSwapChain->GetBuffer(mIndexLastSwapBuf, IID_PPV_ARGS(mRenderTarget.ReleaseAndGetAddressOf())); mDevice->CreateRenderTargetView(mRenderTarget.Get(), nullptr, mDescriptorHeap->GetCPUDescriptorHandleForHeapStart()); waitForGPU(); }