FilmGrainSettings.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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/FilmGrain/FilmGrainSettings.h>
  9. #include <Atom/Feature/PostProcess/FilmGrain/FilmGrainConstants.h>
  10. #include <PostProcess/PostProcessFeatureProcessor.h>
  11. #include <AzCore/Serialization/SerializeContext.h>
  12. #include <Atom/RPI.Public/Image/ImageSystemInterface.h>
  13. #include <Atom/RPI.Public/Pass/ParentPass.h>
  14. #include <Atom/RPI.Public/Pass/PassSystemInterface.h>
  15. #include <Atom/RPI.Public/RPIUtils.h>
  16. #include <Atom/RPI.Public/Scene.h>
  17. #include <Atom/RPI.Public/Shader/ShaderResourceGroup.h>
  18. #include <Atom/RPI.Public/View.h>
  19. namespace AZ
  20. {
  21. namespace Render
  22. {
  23. FilmGrainSettings::FilmGrainSettings(PostProcessFeatureProcessor* featureProcessor)
  24. : PostProcessBase(featureProcessor)
  25. {
  26. }
  27. void FilmGrainSettings::OnConfigChanged()
  28. {
  29. m_parentSettings->OnConfigChanged();
  30. }
  31. AZ::Data::Instance<AZ::RPI::StreamingImage> FilmGrainSettings::LoadStreamingImage(
  32. const char* textureFilePath, [[maybe_unused]] const char* sampleName)
  33. {
  34. using namespace AZ;
  35. Data::AssetId streamingImageAssetId;
  36. Data::AssetCatalogRequestBus::BroadcastResult(
  37. streamingImageAssetId, &Data::AssetCatalogRequestBus::Events::GetAssetIdByPath, textureFilePath,
  38. azrtti_typeid<RPI::StreamingImageAsset>(), false);
  39. if (!streamingImageAssetId.IsValid())
  40. {
  41. AZ_Error(sampleName, false, "Failed to get streaming image asset id with path %s", textureFilePath);
  42. return nullptr;
  43. }
  44. auto streamingImageAsset = Data::AssetManager::Instance().GetAsset<RPI::StreamingImageAsset>(
  45. streamingImageAssetId, AZ::Data::AssetLoadBehavior::PreLoad);
  46. streamingImageAsset.BlockUntilLoadComplete();
  47. if (!streamingImageAsset.IsReady())
  48. {
  49. AZ_Error(sampleName, false, "Failed to get streaming image asset '%s'", textureFilePath);
  50. return nullptr;
  51. }
  52. auto image = RPI::StreamingImage::FindOrCreate(streamingImageAsset);
  53. if (!image)
  54. {
  55. AZ_Error(sampleName, false, "Failed to find or create an image instance from image asset '%s'", textureFilePath);
  56. return nullptr;
  57. }
  58. return image;
  59. }
  60. void FilmGrainSettings::ApplySettingsTo(FilmGrainSettings* target, float alpha) const
  61. {
  62. AZ_Assert(target != nullptr, "FilmGrainSettings::ApplySettingsTo called with nullptr as argument.");
  63. // Auto-gen code to blend individual params based on their override value onto target settings
  64. #define OVERRIDE_TARGET target
  65. #define OVERRIDE_ALPHA alpha
  66. #include <Atom/Feature/ParamMacros/StartOverrideBlend.inl>
  67. #include <Atom/Feature/PostProcess/FilmGrain/FilmGrainParams.inl>
  68. #include <Atom/Feature/ParamMacros/EndParams.inl>
  69. #undef OVERRIDE_TARGET
  70. #undef OVERRIDE_ALPHA
  71. }
  72. void FilmGrainSettings::Simulate(float deltaTime)
  73. {
  74. m_deltaTime = deltaTime;
  75. }
  76. } // namespace Render
  77. } // namespace AZ