MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / EndFrame

Function EndFrame

SampleFramework12/v1.00/ImGuiHelper.cpp:223–322  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

221}
222
223void EndFrame(ID3D12GraphicsCommandList* cmdList, D3D12_CPU_DESCRIPTOR_HANDLE rtv, uint32 displayWidth, uint32 displayHeight)
224{
225 Assert_(CurrBeginFrame == DX12::CurrentCPUFrame);
226 Assert_(CurrEndFrame != DX12::CurrentCPUFrame);
227
228 ImGui::Render();
229
230 PIXMarker pixMarker(cmdList, "ImGui Rendering");
231
232 ImDrawData* drawData = ImGui::GetDrawData();
233
234 // Get memory for vertex and index buffers
235 const uint64 vbSize = sizeof(ImDrawVert) * drawData->TotalVtxCount;
236 const uint64 ibSize = sizeof(ImDrawIdx) * drawData->TotalIdxCount;
237 MapResult vertexMem = DX12::AcquireTempBufferMem(vbSize, 4);
238 MapResult indexMem = DX12::AcquireTempBufferMem(ibSize, 4);
239
240 // Copy and convert all vertices into a single contiguous buffer
241 ImDrawVert* vertexCPUMem = reinterpret_cast<ImDrawVert*>(vertexMem.CPUAddress);
242 ImDrawIdx* indexCPUMem = reinterpret_cast<ImDrawIdx*>(indexMem.CPUAddress);
243 for(uint64 i = 0; i < drawData->CmdListsCount; i++)
244 {
245 const ImDrawList* drawList = drawData->CmdLists[i];
246 memcpy(vertexCPUMem, &drawList->VtxBuffer[0], drawList->VtxBuffer.size() * sizeof(ImDrawVert));
247 memcpy(indexCPUMem, &drawList->IdxBuffer[0], drawList->IdxBuffer.size() * sizeof(ImDrawIdx));
248 vertexCPUMem += drawList->VtxBuffer.size();
249 indexCPUMem += drawList->IdxBuffer.size();
250 }
251
252 // Setup orthographic projection matrix into our constant buffer
253 {
254 const float L = 0.0f;
255 const float R = float(displayWidth);
256 const float B = float(displayHeight);
257 const float T = 0.0f;
258
259 CBuffer.Data.ProjectionMatrix = Float4x4(Float4(2.0f/(R-L), 0.0f, 0.0f, 0.0f),
260 Float4(0.0f, 2.0f/(T-B), 0.0f, 0.0f),
261 Float4(0.0f, 0.0f, 0.5f, 0.0f),
262 Float4((R+L)/(L-R), (T+B)/(B-T), 0.5f, 1.0f));
263
264 CBuffer.Upload();
265 }
266
267 // Setup viewport
268 DX12::SetViewport(cmdList, displayWidth, displayHeight);
269
270 cmdList->OMSetRenderTargets(1, &rtv, false, nullptr);
271
272 // Bind shader and vertex buffers
273 cmdList->SetPipelineState(PSO);
274 cmdList->SetGraphicsRootSignature(RootSignature);
275 cmdList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
276 CBuffer.SetAsGfxRootParameter(cmdList, 1);
277
278 D3D12_VERTEX_BUFFER_VIEW vbView = { };
279 vbView.BufferLocation = vertexMem.GPUAddress;
280 vbView.SizeInBytes = uint32(vbSize);

Callers 1

Render_InternalMethod · 0.70

Calls 8

AcquireTempBufferMemFunction · 0.85
Float4x4Class · 0.85
SetViewportFunction · 0.85
BindShaderResourcesFunction · 0.85
UploadMethod · 0.80
SetAsGfxRootParameterMethod · 0.80
Float4Class · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected