| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370 |
- /*
- * 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 "AtomLyIntegration/CommonFeatures/CoreLights/AreaLightBus.h"
- #include <AzCore/RTTI/BehaviorContext.h>
- #include <Atom/RPI.Public/Scene.h>
- #include <PostProcess/DisplayMapper/DisplayMapperComponentController.h>
- #include <Atom/Feature/ACES/AcesDisplayMapperFeatureProcessor.h>
- #include <Atom/Feature/DisplayMapper/DisplayMapperConfigurationDescriptor.h>
- namespace AZ
- {
- namespace Render
- {
- void DisplayMapperComponentController::Reflect(ReflectContext* context)
- {
- DisplayMapperComponentConfig::Reflect(context);
- if (auto* serializeContext = azrtti_cast<SerializeContext*>(context))
- {
- serializeContext->Class<DisplayMapperComponentController>()
- ->Version(0)
- ->Field("Configuration", &DisplayMapperComponentController::m_configuration);
- }
- if (AZ::BehaviorContext* behaviorContext = azrtti_cast<AZ::BehaviorContext*>(context))
- {
- behaviorContext->EBus<DisplayMapperComponentRequestBus>("DisplayMapperComponentRequestBus")
- ->Attribute(AZ::Script::Attributes::Scope, AZ::Script::Attributes::ScopeFlags::Common)
- ->Attribute(AZ::Script::Attributes::Category, "render")
- ->Attribute(AZ::Script::Attributes::Module, "render")
- // LoadPreset
- ->Event("LoadPreset", &DisplayMapperComponentRequestBus::Events::LoadPreset)
- // DisplayMapperOperationType
- ->Event("SetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::SetDisplayMapperOperationType)
- ->Event("GetDisplayMapperOperationType", &DisplayMapperComponentRequestBus::Events::GetDisplayMapperOperationType)
- ->VirtualProperty("DisplayMapperOperationType", "GetDisplayMapperOperationType", "SetDisplayMapperOperationType")
- // AcesParameterOverrides
- ->Event("SetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::SetAcesParameterOverrides)
- ->Event("GetAcesParameterOverrides", &DisplayMapperComponentRequestBus::Events::GetAcesParameterOverrides)
- ->VirtualProperty("AcesParameterOverrides", "GetAcesParameterOverrides", "SetAcesParameterOverrides")
- // OverrideAcesParameters
- ->Event("SetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::SetOverrideAcesParameters)
- ->Event("GetOverrideAcesParameters", &DisplayMapperComponentRequestBus::Events::GetOverrideAcesParameters)
- ->VirtualProperty("OverrideAcesParameters", "GetOverrideAcesParameters", "SetOverrideAcesParameters")
- // AlterSurround
- ->Event("SetAlterSurround", &DisplayMapperComponentRequestBus::Events::SetAlterSurround)
- ->Event("GetAlterSurround", &DisplayMapperComponentRequestBus::Events::GetAlterSurround)
- ->VirtualProperty("AlterSurround", "GetAlterSurround", "SetAlterSurround")
- // ApplyDesaturation
- ->Event("SetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::SetApplyDesaturation)
- ->Event("GetApplyDesaturation", &DisplayMapperComponentRequestBus::Events::GetApplyDesaturation)
- ->VirtualProperty("ApplyDesaturation", "GetApplyDesaturation", "SetApplyDesaturation")
- // ApplyCATD60toD65
- ->Event("SetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::SetApplyCATD60toD65)
- ->Event("GetApplyCATD60toD65", &DisplayMapperComponentRequestBus::Events::GetApplyCATD60toD65)
- ->VirtualProperty("ApplyCATD60toD65", "GetApplyCATD60toD65", "SetApplyCATD60toD65")
- // CinemaLimitsBlack
- ->Event("SetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsBlack)
- ->Event("GetCinemaLimitsBlack", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsBlack)
- ->VirtualProperty("CinemaLimitsBlack", "GetCinemaLimitsBlack", "SetCinemaLimitsBlack")
- // CinemaLimitsWhite
- ->Event("SetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::SetCinemaLimitsWhite)
- ->Event("GetCinemaLimitsWhite", &DisplayMapperComponentRequestBus::Events::GetCinemaLimitsWhite)
- ->VirtualProperty("CinemaLimitsWhite", "GetCinemaLimitsWhite", "SetCinemaLimitsWhite")
- // MinPoint
- ->Event("SetMinPoint", &DisplayMapperComponentRequestBus::Events::SetMinPoint)
- ->Event("GetMinPoint", &DisplayMapperComponentRequestBus::Events::GetMinPoint)
- ->VirtualProperty("MinPoint", "GetMinPoint", "SetMinPoint")
- // MidPoint
- ->Event("SetMidPoint", &DisplayMapperComponentRequestBus::Events::SetMidPoint)
- ->Event("GetMidPoint", &DisplayMapperComponentRequestBus::Events::GetMidPoint)
- ->VirtualProperty("MidPoint", "GetMidPoint", "SetMidPoint")
- // MaxPoint
- ->Event("SetMaxPoint", &DisplayMapperComponentRequestBus::Events::SetMaxPoint)
- ->Event("GetMaxPoint", &DisplayMapperComponentRequestBus::Events::GetMaxPoint)
- ->VirtualProperty("MaxPoint", "GetMaxPoint", "SetMaxPoint")
- // SurroundGamma
- ->Event("SetSurroundGamma", &DisplayMapperComponentRequestBus::Events::SetSurroundGamma)
- ->Event("GetSurroundGamma", &DisplayMapperComponentRequestBus::Events::GetSurroundGamma)
- ->VirtualProperty("SurroundGamma", "GetSurroundGamma", "SetSurroundGamma")
- // Gamma
- ->Event("SetGamma", &DisplayMapperComponentRequestBus::Events::SetGamma)
- ->Event("GetGamma", &DisplayMapperComponentRequestBus::Events::GetGamma)
- ->VirtualProperty("Gamma", "GetGamma", "SetGamma")
- ;
- }
- }
- void DisplayMapperComponentController::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
- {
- provided.push_back(AZ_CRC("ToneMapperService", 0xb8f814e8));
- }
- void DisplayMapperComponentController::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
- {
- incompatible.push_back(AZ_CRC("ToneMapperService", 0xb8f814e8));
- }
- void DisplayMapperComponentController::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
- {
- AZ_UNUSED(required);
- }
- DisplayMapperComponentController::DisplayMapperComponentController(const DisplayMapperComponentConfig& config)
- : m_configuration(config)
- {
- }
- void DisplayMapperComponentController::Activate(EntityId entityId)
- {
- m_entityId = entityId;
- DisplayMapperComponentRequestBus::Handler::BusConnect(m_entityId);
- }
- void DisplayMapperComponentController::Deactivate()
- {
- DisplayMapperComponentRequestBus::Handler::BusDisconnect(m_entityId);
- m_postProcessInterface = nullptr;
- m_entityId.SetInvalid();
- }
- void DisplayMapperComponentController::SetConfiguration(const DisplayMapperComponentConfig& config)
- {
- m_configuration = config;
- OnConfigChanged();
- }
- const DisplayMapperComponentConfig& DisplayMapperComponentController::GetConfiguration() const
- {
- return m_configuration;
- }
- void DisplayMapperComponentController::LoadPreset(OutputDeviceTransformType preset)
- {
- AcesParameterOverrides propertyOverrides;
- propertyOverrides.m_preset = preset;
- propertyOverrides.m_overrideDefaults = true;
- propertyOverrides.LoadPreset();
- SetAcesParameterOverrides(propertyOverrides);
- }
- void DisplayMapperComponentController::SetDisplayMapperOperationType(DisplayMapperOperationType displayMapperOperationType)
- {
- if (m_configuration.m_displayMapperOperation != displayMapperOperationType)
- {
- m_configuration.m_displayMapperOperation = displayMapperOperationType;
- OnConfigChanged();
- DisplayMapperComponentNotificationBus::Broadcast(
- &DisplayMapperComponentNotificationBus::Handler::OnDisplayMapperOperationTypeUpdated,
- m_configuration.m_displayMapperOperation);
- }
- }
- DisplayMapperOperationType DisplayMapperComponentController::GetDisplayMapperOperationType() const
- {
- return m_configuration.m_displayMapperOperation;
- }
- void DisplayMapperComponentController::SetAcesParameterOverrides(const AcesParameterOverrides& parameterOverrides)
- {
- m_configuration.m_acesParameterOverrides = parameterOverrides;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- DisplayMapperComponentNotificationBus::Broadcast(
- &DisplayMapperComponentNotificationBus::Handler::OnAcesParameterOverridesUpdated,
- m_configuration.m_acesParameterOverrides);
- }
- const AcesParameterOverrides& DisplayMapperComponentController::GetAcesParameterOverrides() const
- {
- return m_configuration.m_acesParameterOverrides;
- }
- void DisplayMapperComponentController::SetOverrideAcesParameters(bool value)
- {
- if (m_configuration.m_acesParameterOverrides.m_overrideDefaults == value)
- {
- return; // prevents flickering when set via TrackView
- }
- m_configuration.m_acesParameterOverrides.m_overrideDefaults = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- bool DisplayMapperComponentController::GetOverrideAcesParameters() const
- {
- return m_configuration.m_acesParameterOverrides.m_overrideDefaults;
- }
- void DisplayMapperComponentController::SetAlterSurround(bool value)
- {
- if (m_configuration.m_acesParameterOverrides.m_alterSurround != value)
- {
- return; // prevents flickering when set via TrackView
- }
- m_configuration.m_acesParameterOverrides.m_alterSurround = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- bool DisplayMapperComponentController::GetAlterSurround() const
- {
- return m_configuration.m_acesParameterOverrides.m_alterSurround;
- }
- void DisplayMapperComponentController::SetApplyDesaturation(bool value)
- {
- if (m_configuration.m_acesParameterOverrides.m_applyDesaturation != value)
- {
- return; // prevents flickering when set via TrackView
- }
- m_configuration.m_acesParameterOverrides.m_applyDesaturation = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- bool DisplayMapperComponentController::GetApplyDesaturation() const
- {
- return m_configuration.m_acesParameterOverrides.m_applyDesaturation;
- }
- void DisplayMapperComponentController::SetApplyCATD60toD65(bool value)
- {
- if (m_configuration.m_acesParameterOverrides.m_applyCATD60toD65 != value)
- {
- return; // prevents flickering when set via TrackView
- }
- m_configuration.m_acesParameterOverrides.m_applyCATD60toD65 = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- bool DisplayMapperComponentController::GetApplyCATD60toD65() const
- {
- return m_configuration.m_acesParameterOverrides.m_applyCATD60toD65;
- }
- void DisplayMapperComponentController::SetCinemaLimitsBlack(float value)
- {
- m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetCinemaLimitsBlack() const
- {
- return m_configuration.m_acesParameterOverrides.m_cinemaLimitsBlack;
- }
- void DisplayMapperComponentController::SetCinemaLimitsWhite(float value)
- {
- m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetCinemaLimitsWhite() const
- {
- return m_configuration.m_acesParameterOverrides.m_cinemaLimitsWhite;
- }
- void DisplayMapperComponentController::SetMinPoint(float value)
- {
- m_configuration.m_acesParameterOverrides.m_minPoint = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetMinPoint() const
- {
- return m_configuration.m_acesParameterOverrides.m_minPoint;
- }
- void DisplayMapperComponentController::SetMidPoint(float value)
- {
- m_configuration.m_acesParameterOverrides.m_midPoint = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetMidPoint() const
- {
- return m_configuration.m_acesParameterOverrides.m_midPoint;
- }
- void DisplayMapperComponentController::SetMaxPoint(float value)
- {
- m_configuration.m_acesParameterOverrides.m_maxPoint = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetMaxPoint() const
- {
- return m_configuration.m_acesParameterOverrides.m_maxPoint;
- }
- void DisplayMapperComponentController::SetSurroundGamma(float value)
- {
- m_configuration.m_acesParameterOverrides.m_surroundGamma = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetSurroundGamma() const
- {
- return m_configuration.m_acesParameterOverrides.m_surroundGamma;
- }
- void DisplayMapperComponentController::SetGamma(float value)
- {
- m_configuration.m_acesParameterOverrides.m_gamma = value;
- if (m_configuration.m_displayMapperOperation == DisplayMapperOperationType::Aces)
- {
- OnConfigChanged();
- }
- }
- float DisplayMapperComponentController::GetGamma() const
- {
- return m_configuration.m_acesParameterOverrides.m_gamma;
- }
- void DisplayMapperComponentController::OnConfigChanged()
- {
- // Register the configuration with the AcesDisplayMapperFeatureProcessor for this scene.
- DisplayMapperFeatureProcessorInterface* fp = AZ::RPI::Scene::GetFeatureProcessorForEntity<DisplayMapperFeatureProcessorInterface>(m_entityId);
- DisplayMapperConfigurationDescriptor desc;
- desc.m_operationType = m_configuration.m_displayMapperOperation;
- desc.m_ldrGradingLutEnabled = m_configuration.m_ldrColorGradingLutEnabled;
- desc.m_ldrColorGradingLut = m_configuration.m_ldrColorGradingLut;
- desc.m_acesParameterOverrides = m_configuration.m_acesParameterOverrides;
- fp->RegisterDisplayMapperConfiguration(desc);
- }
- } // namespace Render
- } // namespace AZ
|