3
0

ImageBuilderComponent.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  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. #pragma once
  9. #include <AzCore/Component/Component.h>
  10. #include <AssetBuilderSDK/AssetBuilderBusses.h>
  11. #include <AssetBuilderSDK/AssetBuilderSDK.h>
  12. #include <AzCore/Asset/AssetManager.h>
  13. #include <Atom/ImageProcessing/ImageProcessingBus.h>
  14. namespace ImageProcessingAtom
  15. {
  16. //! Builder to process images
  17. class ImageBuilderWorker
  18. : public AssetBuilderSDK::AssetBuilderCommandBus::Handler
  19. {
  20. public:
  21. AZ_RTTI(ImageBuilderWorker, "{7F1FA09D-77F3-4118-A7D5-4906BED59C19}");
  22. ImageBuilderWorker() = default;
  23. ~ImageBuilderWorker() = default;
  24. //! Asset Builder Callback Functions
  25. void CreateJobs(const AssetBuilderSDK::CreateJobsRequest& request, AssetBuilderSDK::CreateJobsResponse& response);
  26. void ProcessJob(const AssetBuilderSDK::ProcessJobRequest& request, AssetBuilderSDK::ProcessJobResponse& response);
  27. //////////////////////////////////////////////////////////////////////////
  28. //!AssetBuilderSDK::AssetBuilderCommandBus interface
  29. void ShutDown() override; // if you get this you must fail all existing jobs and return.
  30. //////////////////////////////////////////////////////////////////////////
  31. private:
  32. bool m_isShuttingDown = false;
  33. };
  34. //! BuilderPluginComponent is to handle the lifecycle of ImageBuilder module.
  35. class BuilderPluginComponent
  36. : public AZ::Component
  37. , protected ImageProcessingRequestBus::Handler
  38. , protected ImageBuilderRequestBus::Handler
  39. {
  40. public:
  41. AZ_COMPONENT(BuilderPluginComponent, "{A227F803-D2E4-406E-93EC-121EF45A64A1}")
  42. static void Reflect(AZ::ReflectContext* context);
  43. BuilderPluginComponent(); // avoid initialization here.
  44. ~BuilderPluginComponent() override; // free memory an uninitialize yourself.
  45. //////////////////////////////////////////////////////////////////////////
  46. // AZ::Component
  47. void Init() override; // create objects, allocate memory and initialize yourself without reaching out to the outside world
  48. void Activate() override; // reach out to the outside world and connect up to what you need to, register things, etc.
  49. void Deactivate() override; // unregister things, disconnect from the outside world
  50. static void GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided);
  51. static void GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible);
  52. //////////////////////////////////////////////////////////////////////////
  53. ////////////////////////////////////////////////////////////////////////
  54. // AtomImageProcessingRequestBus interface implementation
  55. IImageObjectPtr LoadImage(const AZStd::string& filePath) override;
  56. IImageObjectPtr LoadImagePreview(const AZStd::string& filePath) override;
  57. ////////////////////////////////////////////////////////////////////////
  58. ////////////////////////////////////////////////////////////////////////
  59. // ImageBuilderRequestBus interface implementation
  60. IImageObjectPtr CreateImage(
  61. AZ::u32 width,
  62. AZ::u32 height,
  63. AZ::u32 maxMipCount,
  64. EPixelFormat pixelFormat) override;
  65. AZStd::vector<AssetBuilderSDK::JobProduct> ConvertImageObject(
  66. IImageObjectPtr imageObject,
  67. const AZStd::string& presetName,
  68. const AZStd::string& platformName,
  69. const AZStd::string& outputDir,
  70. const AZ::Data::AssetId& sourceAssetId,
  71. const AZStd::string& sourceAssetName) override;
  72. IImageObjectPtr ConvertImageObjectInMemory(
  73. IImageObjectPtr imageObject,
  74. const AZStd::string& presetName,
  75. const AZStd::string& platformName,
  76. const AZ::Data::AssetId& sourceAssetId,
  77. const AZStd::string& sourceAssetName) override;
  78. bool DoesSupportPlatform(const AZStd::string& platformId) override;
  79. bool IsPresetFormatSquarePow2(const AZStd::string& presetName, const AZStd::string& platformName) override;
  80. FileMask GetFileMask(AZStd::string_view imageFilePath) override;
  81. AZStd::vector<AZStd::string> GetFileMasksForPreset(const PresetName& presetName) override;
  82. AZStd::vector<PresetName> GetPresetsForFileMask(const FileMask& fileMask) override;
  83. PresetName GetDefaultPreset() override;
  84. PresetName GetDefaultAlphaPreset() override;
  85. bool IsValidPreset(PresetName presetName) override;
  86. ////////////////////////////////////////////////////////////////////////
  87. private:
  88. BuilderPluginComponent(const BuilderPluginComponent&) = delete;
  89. ImageBuilderWorker m_imageBuilder;
  90. AZStd::vector<AZStd::unique_ptr<AZ::Data::AssetHandler>> m_assetHandlers;
  91. };
  92. }// namespace ImageProcessingAtom