/* * Copyright (c) Contributors to the Open 3D Engine Project. * For complete copyright and license terms please see the LICENSE at the root of this distribution. * * SPDX-License-Identifier: Apache-2.0 OR MIT * */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace AZ { namespace Render { void DiffuseProbeGridSystemComponent::Reflect(ReflectContext* context) { if (SerializeContext* serialize = azrtti_cast(context)) { serialize->Class() ->Version(0) ; } DiffuseProbeGridFeatureProcessor::Reflect(context); DiffuseGlobalIlluminationFeatureProcessor::Reflect(context); DiffuseProbeGridQueryFullscreenPassData::Reflect(context); } void DiffuseProbeGridSystemComponent::GetProvidedServices(ComponentDescriptor::DependencyArrayType& provided) { provided.push_back(AZ_CRC_CE("DiffuseProbeGrid")); provided.push_back(AZ_CRC_CE("DiffuseGlobalIllumination")); } void DiffuseProbeGridSystemComponent::GetIncompatibleServices(ComponentDescriptor::DependencyArrayType& incompatible) { incompatible.push_back(AZ_CRC_CE("DiffuseProbeGrid")); incompatible.push_back(AZ_CRC_CE("DiffuseGlobalIllumination")); } void DiffuseProbeGridSystemComponent::GetRequiredServices(ComponentDescriptor::DependencyArrayType& required) { required.push_back(AZ_CRC_CE("RPISystem")); } void DiffuseProbeGridSystemComponent::LoadPassTemplateMappings() { auto* passSystem = RPI::PassSystemInterface::Get(); AZ_Assert(passSystem, "PassSystemInterface is null"); const char* passTemplatesFile = "Passes/DiffuseProbeGridTemplates.azasset"; passSystem->LoadPassTemplateMappings(passTemplatesFile); } void DiffuseProbeGridSystemComponent::Activate() { // register feature processors RPI::FeatureProcessorFactory::Get()->RegisterFeatureProcessor(); RPI::FeatureProcessorFactory::Get()->RegisterFeatureProcessor(); auto* passSystem = RPI::PassSystemInterface::Get(); AZ_Assert(passSystem, "PassSystemInterface is null"); // setup handler for pass templates mappings m_loadTemplatesHandler = RPI::PassSystemInterface::OnReadyLoadTemplatesEvent::Handler([this]() { this->LoadPassTemplateMappings(); }); passSystem->ConnectEvent(m_loadTemplatesHandler); // load the DiffuseProbeGrid pass classes passSystem->AddPassCreator(Name("DiffuseProbeGridPreparePass"), &DiffuseProbeGridPreparePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRayTracingPass"), &DiffuseProbeGridRayTracingPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridBlendIrradiancePass"), &DiffuseProbeGridBlendIrradiancePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridBlendDistancePass"), &DiffuseProbeGridBlendDistancePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridBorderUpdatePass"), &DiffuseProbeGridBorderUpdatePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRelocationPass"), &DiffuseProbeGridRelocationPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridClassificationPass"), &DiffuseProbeGridClassificationPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridDownsamplePass"), &DiffuseProbeGridDownsamplePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridRenderPass"), &DiffuseProbeGridRenderPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridVisualizationPreparePass"), &DiffuseProbeGridVisualizationPreparePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridVisualizationAccelerationStructurePass"), &DiffuseProbeGridVisualizationAccelerationStructurePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridVisualizationRayTracingPass"), &DiffuseProbeGridVisualizationRayTracingPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridVisualizationCompositePass"), &DiffuseProbeGridVisualizationCompositePass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridQueryPass"), &DiffuseProbeGridQueryPass::Create); passSystem->AddPassCreator(Name("DiffuseProbeGridQueryFullscreenPass"), &DiffuseProbeGridQueryFullscreenPass::Create); } void DiffuseProbeGridSystemComponent::Deactivate() { RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); RPI::FeatureProcessorFactory::Get()->UnregisterFeatureProcessor(); m_loadTemplatesHandler.Disconnect(); } } }