PostProcessSettings.cpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #include <PostProcess/PostProcessFeatureProcessor.h>
  9. #include <PostProcess/PostProcessSettings.h>
  10. namespace AZ
  11. {
  12. namespace Render
  13. {
  14. PostProcessSettings::PostProcessSettings(PostProcessFeatureProcessor* featureProcessor)
  15. : PostProcessBase(featureProcessor)
  16. { }
  17. void PostProcessSettings::OnConfigChanged()
  18. {
  19. if (m_featureProcessor)
  20. {
  21. m_featureProcessor->OnPostProcessSettingsChanged();
  22. }
  23. }
  24. void PostProcessSettings::Simulate(float deltaTime)
  25. {
  26. // Auto-gen calls to simulate() function on all sub-setting members
  27. #define POST_PROCESS_MEMBER(ClassName, MemberName) \
  28. if (MemberName) \
  29. { \
  30. MemberName->Simulate(deltaTime); \
  31. } \
  32. #include <Atom/Feature/PostProcess/PostProcessSettings.inl>
  33. #undef POST_PROCESS_MEMBER
  34. }
  35. void PostProcessSettings::ApplySettingsTo(PostProcessSettings* target, float blendFactor) const
  36. {
  37. if (target == nullptr)
  38. {
  39. return;
  40. }
  41. // Modulate blendFactor by settings' overrideFactor
  42. blendFactor *= m_overrideFactor;
  43. // Auto-gen application of sub-settings for all members
  44. #define POST_PROCESS_MEMBER(ClassName, MemberName) \
  45. if (MemberName) \
  46. { \
  47. if (!target->MemberName) \
  48. { \
  49. target->MemberName = AZStd::make_unique<ClassName>(*MemberName); \
  50. } \
  51. else \
  52. { \
  53. MemberName->ApplySettingsTo(target->MemberName.get(), blendFactor); \
  54. } \
  55. } \
  56. #include <Atom/Feature/PostProcess/PostProcessSettings.inl>
  57. #undef POST_PROCESS_MEMBER
  58. }
  59. void PostProcessSettings::CopyViewToBlendWeightSettings(const ViewBlendWeightMap& perViewBlendWeights)
  60. {
  61. m_perViewBlendWeights = perViewBlendWeights;
  62. }
  63. float PostProcessSettings::GetBlendWeightForView(AZ::RPI::View* view) const
  64. {
  65. const auto& settingsIterator = m_perViewBlendWeights.find(view);
  66. return settingsIterator != m_perViewBlendWeights.end() ? settingsIterator->second : defaultBlendWeight;
  67. }
  68. // Auto-gen code for getting, creating and removing sub-setting members
  69. #define POST_PROCESS_MEMBER(ClassName, MemberName) \
  70. \
  71. ClassName##Interface* PostProcessSettings::GetOrCreate##ClassName##Interface() \
  72. { \
  73. if (!MemberName) \
  74. { \
  75. MemberName = AZStd::make_unique<ClassName>(m_featureProcessor); \
  76. MemberName->m_parentSettings = this; \
  77. OnConfigChanged(); \
  78. } \
  79. return MemberName.get(); \
  80. } \
  81. \
  82. void PostProcessSettings::Remove##ClassName##Interface() \
  83. { \
  84. MemberName = nullptr; \
  85. OnConfigChanged(); \
  86. } \
  87. #include <Atom/Feature/PostProcess/PostProcessSettings.inl>
  88. #undef POST_PROCESS_MEMBER
  89. } // namespace Render
  90. } // namespace AZ