MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / PrecomputeCubemaps

Method PrecomputeCubemaps

PBR/src/PBR_Renderer.cpp:567–803  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

565}
566
567void PBR_Renderer::PrecomputeCubemaps(IDeviceContext* pCtx,
568 ITextureView* pEnvironmentMap,
569 Uint32 NumDiffuseSamples,
570 Uint32 NumSpecularSamples,
571 bool OptimizeSamples)
572{
573 if (!m_Settings.EnableIBL)
574 {
575 LOG_WARNING_MESSAGE("IBL is disabled, so precomputing cube maps will have no effect");
576 return;
577 }
578
579 if (NumSpecularSamples == 0)
580 {
581 NumSpecularSamples = 256;
582 }
583 if (NumDiffuseSamples == 0)
584 {
585 NumDiffuseSamples = GetDefaultDiffuseSamplesCount(m_Device.GetAdapterInfo());
586 }
587
588 struct PrecomputeEnvMapAttribs
589 {
590 float4x4 Rotation;
591
592 float Roughness;
593 float EnvMapWidth;
594 float EnvMapHeight;
595 float EnvMapMipCount;
596
597 uint NumSamples;
598 uint Padding0;
599 uint Padding1;
600 uint Padding2;
601 };
602
603 if (!m_PrecomputeEnvMapAttribsCB)
604 {
605 CreateUniformBuffer(m_Device, sizeof(PrecomputeEnvMapAttribs), "Precompute env map attribs CB", &m_PrecomputeEnvMapAttribsCB);
606 }
607
608 IBL_FEATURE_FLAGS FeatureFlags = IBL_FEATURE_FLAG_NONE;
609
610 if (OptimizeSamples)
611 FeatureFlags |= IBL_FEATURE_FLAG_OPTIMIZE_SAMPLES;
612
613 const IBL_PSOKey::ENV_MAP_TYPE EnvMapType = pEnvironmentMap->GetTexture()->GetDesc().IsCube() ?
614 IBL_PSOKey::ENV_MAP_TYPE_CUBE :
615 IBL_PSOKey::ENV_MAP_TYPE_SPHERE;
616
617 ShaderMacroHelper Macros;
618 Macros
619 .Add("OPTIMIZE_SAMPLES", (FeatureFlags & IBL_FEATURE_FLAG_OPTIMIZE_SAMPLES) != 0)
620 .Add("ENV_MAP_TYPE_CUBE", static_cast<int>(IBL_PSOKey::ENV_MAP_TYPE_CUBE))
621 .Add("ENV_MAP_TYPE_SPHERE", static_cast<int>(IBL_PSOKey::ENV_MAP_TYPE_SPHERE))
622 .Add("ENV_MAP_TYPE", static_cast<int>(EnvMapType));
623
624 auto& PrecomputeIrradianceCubeTech = m_IBL_PSOCache[IBL_PSOKey{IBL_PSOKey::PSO_TYPE_IRRADIANCE_CUBE, EnvMapType, FeatureFlags, m_pIrradianceCubeSRV->GetDesc().Format}];

Callers 1

PrecomputeIBLCubemapsMethod · 0.80

Calls 6

ProcessCubemapFacesFunction · 0.85
IsInitializedMethod · 0.80
CreateShaderMethod · 0.80
SetPipelineStateMethod · 0.80
CommitShaderResourcesMethod · 0.80

Tested by

no test coverage detected