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

Method RenderMainPass

BindlessDeferred/MeshRenderer.cpp:448–561  ·  view source on GitHub ↗

Renders all meshes in the model, with shadows

Source from the content-addressed store, hash-verified

446
447// Renders all meshes in the model, with shadows
448void MeshRenderer::RenderMainPass(ID3D12GraphicsCommandList* cmdList, const Camera& camera, const MainPassData& mainPassData)
449{
450 PIXMarker marker(cmdList, "Mesh Rendering");
451
452 uint64 numVisible = 0;
453 if(AppSettings::SortByDepth)
454 numVisible = CullMeshesAndSort(camera, meshBoundingBoxes, meshZDepths, meshDrawIndices);
455 else
456 numVisible = CullMeshes(camera, meshBoundingBoxes, meshDrawIndices);
457
458 cmdList->SetGraphicsRootSignature(mainPassRootSignature);
459 cmdList->SetPipelineState(mainPassPSO);
460 cmdList->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
461
462 Float4x4 world;
463
464 // Set constant buffers
465 meshVSConstants.Data.World = world;
466 meshVSConstants.Data.View = camera.ViewMatrix();
467 meshVSConstants.Data.WorldViewProjection = world * camera.ViewProjectionMatrix();
468 meshVSConstants.Upload();
469 meshVSConstants.SetAsGfxRootParameter(cmdList, MainPassVSCBuffer);
470
471 meshPSConstants.Data.SunDirectionWS = AppSettings::SunDirection;
472 meshPSConstants.Data.SunIrradiance = mainPassData.SkyCache->SunIrradiance;
473 meshPSConstants.Data.CosSunAngularRadius = std::cos(DegToRad(AppSettings::SunSize));
474 meshPSConstants.Data.SinSunAngularRadius = std::sin(DegToRad(AppSettings::SunSize));
475 meshPSConstants.Data.CameraPosWS = camera.Position();
476
477 meshPSConstants.Data.CursorDecalPos = mainPassData.CursorDecal.Position;
478 meshPSConstants.Data.CursorDecalIntensity = mainPassData.CursorDecalIntensity;
479 meshPSConstants.Data.CursorDecalOrientation = mainPassData.CursorDecal.Orientation;
480 meshPSConstants.Data.CursorDecalSize = mainPassData.CursorDecal.Size;
481 meshPSConstants.Data.CursorDecalType = mainPassData.CursorDecal.Type;
482 meshPSConstants.Data.NumXTiles = uint32(AppSettings::NumXTiles);
483 meshPSConstants.Data.NumXYTiles = uint32(AppSettings::NumXTiles * AppSettings::NumYTiles);
484 meshPSConstants.Data.NearClip = camera.NearClip();
485 meshPSConstants.Data.FarClip = camera.FarClip();
486
487 meshPSConstants.Data.SkySH = mainPassData.SkyCache->SH;
488 meshPSConstants.Upload();
489 meshPSConstants.SetAsGfxRootParameter(cmdList, MainPassPSCBuffer);
490
491 sunShadowConstants.Upload();
492 sunShadowConstants.SetAsGfxRootParameter(cmdList, MainPassShadowCBuffer);
493
494 AppSettings::BindCBufferGfx(cmdList, MainPassAppSettings);
495
496 D3D12_CPU_DESCRIPTOR_HANDLE psSRVs[] =
497 {
498 sunShadowMap.SRV(),
499 spotLightShadowMap.SRV(),
500 spotLightShadowMatrices.SRV(),
501 materialTextureIndices.SRV(),
502 mainPassData.DecalBuffer->SRV(),
503 mainPassData.DecalClusterBuffer->SRV(),
504 mainPassData.SpotLightBuffer->SRV(),
505 mainPassData.SpotLightClusterBuffer->SRV(),

Callers 1

RenderForwardMethod · 0.80

Calls 15

CullMeshesAndSortFunction · 0.85
CullMeshesFunction · 0.85
DegToRadFunction · 0.85
BindCBufferGfxFunction · 0.85
BindShaderResourcesFunction · 0.85
UploadMethod · 0.80
SetAsGfxRootParameterMethod · 0.80
AllocateMethod · 0.80
NumMeshPartsMethod · 0.80
IndexOffsetMethod · 0.80
VertexOffsetMethod · 0.80

Tested by

no test coverage detected