StreamBufferViewsBuilder.h 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  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 <Atom/Feature/Mesh/MeshFeatureProcessorInterface.h>
  10. #include <Atom/Feature/Mesh/StreamBufferViewsBuilderInterface.h>
  11. namespace AZ
  12. {
  13. namespace Render
  14. {
  15. class ShaderStreamBufferViewsBuilder final
  16. : public StreamBufferViewsBuilderInterface
  17. {
  18. public:
  19. AZ_RTTI(AZ::Render::ShaderStreamBufferViewsBuilder,
  20. "{427005C5-DB26-4DB2-992C-9E080DE9202C}", AZ::Render::StreamBufferViewsBuilderInterface);
  21. ShaderStreamBufferViewsBuilder() = delete;
  22. ShaderStreamBufferViewsBuilder(const MeshFeatureProcessorInterface::MeshHandle& meshHandle);
  23. virtual ~ShaderStreamBufferViewsBuilder() = default;
  24. ////////////////////////////////////////////////////////////
  25. // StreamBufferViewsBuilderInterface overrides Start...
  26. bool AddStream(const char* semanticName, AZ::RHI::Format streamFormat, bool isOptional) override;
  27. AZ::u8 GetStreamCount() const override;
  28. AZStd::unique_ptr<ShaderStreamBufferViewsInterface> BuildShaderStreamBufferViews(
  29. uint32_t lodIndex, uint32_t meshIndex) override;
  30. const MeshFeatureProcessorInterface::MeshHandle& GetMeshHandle() const override;
  31. // StreamBufferViewsBuilderInterface overrides End...
  32. ////////////////////////////////////////////////////////////
  33. private:
  34. void FinalizeShaderInputContract();
  35. AZ::RHI::Ptr<AZ::RHI::BufferView> BuildShaderIndexBufferView(
  36. const AZ::RPI::ModelLod::Mesh& modelLodMesh, AZ::RHI::IndexBufferView& indexBufferViewOut) const;
  37. static constexpr char LogWindow[] = "ShaderStreamBufferViewsBuilder";
  38. const AZ::Render::MeshFeatureProcessorInterface::MeshHandle* m_meshHandle = nullptr;
  39. //! Used to keep track of all calls to @AddStream(...)
  40. struct StreamInfo
  41. {
  42. StreamInfo(const char* semanticName, AZ::RHI::Format streamFormat, bool isOptional)
  43. : m_semanticName(semanticName)
  44. , m_streamFormat(streamFormat)
  45. , m_isOptional(isOptional)
  46. {
  47. }
  48. const char* m_semanticName;
  49. AZ::RHI::Format m_streamFormat;
  50. bool m_isOptional;
  51. };
  52. AZStd::vector<StreamInfo> m_streamsList;
  53. //! Instantiated the first time BuildShaderStreamBufferViews() is called.
  54. AZStd::unique_ptr<AZ::RPI::ShaderInputContract> m_shaderInputContract;
  55. };
  56. } // namespace Render
  57. } // namespace AZ