VertexAnimationPass.h 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  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/RPI.Public/Pass/ComputePass.h>
  10. #include <AzCore/Debug/Timer.h>
  11. namespace AZ::Render
  12. {
  13. class VertexAnimationPass : public RPI::ComputePass
  14. {
  15. using BaseClass = RPI::ComputePass;
  16. public:
  17. AZ_RTTI(VertexAnimationPass, "{5796A3AC-E306-4F0C-8B2D-DDC25EE446F8}", BaseClass);
  18. AZ_CLASS_ALLOCATOR(VertexAnimationPass, SystemAllocator, 0);
  19. static RPI::Ptr<VertexAnimationPass> Create(const RPI::PassDescriptor& descriptor);
  20. void SetSourceBuffer(Data::Instance<RPI::Buffer> sourceBuffer);
  21. void SetTargetBuffer(Data::Instance<RPI::Buffer> targetBuffer);
  22. void SetInstanceOffsetBuffer(Data::Instance<RPI::Buffer> instanceOffsetBuffer);
  23. void SetInstanceCount(u32 instanceCount);
  24. void SetVertexCountPerInstance(u32 vertexCountPerInstance);
  25. void SetTargetVertexStridePerInstance(u32 targetVertexStridePerInstance);
  26. protected:
  27. explicit VertexAnimationPass(const RPI::PassDescriptor& descriptor);
  28. void BuildInternal() override;
  29. void FrameBeginInternal(FramePrepareParams params) override;
  30. private:
  31. Data::Instance<RPI::Buffer> m_sourceBuffer;
  32. Data::Instance<RPI::Buffer> m_targetBuffer;
  33. Data::Instance<RPI::Buffer> m_instanceOffsetBuffer;
  34. u32 m_instanceCount;
  35. u32 m_vertexCountPerInstance;
  36. u32 m_targetVertexStridePerInstance;
  37. RHI::ShaderInputNameIndex m_frameTimeNameIndex{ "m_frameTime" };
  38. RHI::ShaderInputNameIndex m_vertexCountPerInstanceNameIndex{ "m_vertexCountPerInstance" };
  39. RHI::ShaderInputNameIndex m_targetVertexStridePerInstanceNameIndex{ "m_targetVertexStridePerInstance" };
  40. Debug::Timer m_frameTimer;
  41. float m_frameTime{ 0 };
  42. };
  43. } // namespace AZ::Render