Foundation
Loading...
Searching...
No Matches
Animation.hpp
Go to the documentation of this file.
1#pragma once
4#include "GPUScene.hpp"
5
7{
8 uint32_t skeletonIndex{UINT32_MAX};
9 uint32_t clipIndex{UINT32_MAX};
10 float time{0.0f};
11 float speed{1.0f};
12 bool playing{false};
13 bool loop{true};
14 bool dirty{true};
15};
16
18{
19 size_t inputBytes{0};
20 size_t paletteBytes{0};
21 [[nodiscard]] size_t TotalBytes() const { return inputBytes * 2u + paletteBytes; }
22};
23
25
27{
28public:
29 explicit FAnimationRuntime(Allocator* alloc = GLOBAL_ALLOC);
30
31 void Initialize(FImportedScene& scene, GPUScene& gpu, RHIDevice* device, FSceneGPUResources& resources);
32 void Reset(FSceneGPUResources* resources = nullptr);
33 void RemoveInstance(uint32_t instanceIndex, FSceneGPUResources& resources);
34 [[nodiscard]] bool Tick(float dt, uint64_t frame);
35 void BuildGraph(Renderer* renderer, RendererResources& resources);
36
37 [[nodiscard]] bool HasSkinning() const { return !mOutputs.empty(); }
38 [[nodiscard]] Span<FAnimationPlayback> GetPlaybacks() { return {mPlaybacks.data(), mPlaybacks.size()}; }
40 {
41 return {mPlaybacks.data(), mPlaybacks.size()};
42 }
43 [[nodiscard]] Span<const uint32_t> GetSkeletonClips(uint32_t skeletonIndex) const;
44
45private:
46 static constexpr uint32_t kPaletteFrames = 4u;
47
48 struct MeshInput
49 {
50 uint32_t bindVertexOffset{0};
51 uint32_t skinBindingOffset{0};
52 uint32_t indexOffset{0};
53 uint32_t vertexCount{0};
54 uint32_t indexCount{0};
55 uint32_t skeletonIndex{UINT32_MAX};
56 bool valid{false};
57 };
58 struct Output
59 {
60 uint32_t instanceIndex{0};
61 uint32_t meshIndex{0};
63 bool updateIndices{true};
64 };
65 struct Dispatch
66 {
68 uint32_t bindVertexOffset{0};
69 uint32_t skinBindingOffset{0};
70 uint32_t indexSourceOffset{0};
73 uint32_t paletteOffset{0};
74 uint32_t vertexCount{0};
75 uint32_t indexCount{0};
76 uint32_t jointCount{0};
77 bool updateIndices{false};
78 };
79
82 GPUScene* mGPU{nullptr};
83 RHIDevice* mDevice{nullptr};
94 mat4* mPaletteMapped{nullptr};
95 uint32_t mInputSize{0};
98 bool mForceUpdate{false};
99};
#define GLOBAL_ALLOC
Definition Allocator.hpp:240
FAnimationRuntimeBudget CalculateAnimationRuntimeBudget(FImportedScene const &scene)
Definition Animation.cpp:17
Definition Animation.hpp:27
bool Tick(float dt, uint64_t frame)
Definition Animation.cpp:217
RHIDeviceScopedHandle< RHIBuffer > mPaletteBuffer
Definition Animation.hpp:93
RHIDeviceScopedHandle< RHIBuffer > mInputBuffer
Definition Animation.hpp:91
bool mForceUpdate
Definition Animation.hpp:98
void BuildGraph(Renderer *renderer, RendererResources &resources)
Definition Animation.cpp:306
void Reset(FSceneGPUResources *resources=nullptr)
Definition Animation.cpp:168
Vector< uint32_t > mPaletteSkeletonOffsets
Definition Animation.hpp:89
RHIDevice * mDevice
Definition Animation.hpp:83
void Initialize(FImportedScene &scene, GPUScene &gpu, RHIDevice *device, FSceneGPUResources &resources)
Definition Animation.cpp:45
Vector< Dispatch > mDispatches
Definition Animation.hpp:90
Vector< FAnimationPlayback > mPlaybacks
Definition Animation.hpp:86
bool HasSkinning() const
Definition Animation.hpp:37
Span< const FAnimationPlayback > GetPlaybacks() const
Definition Animation.hpp:39
bool mInputUploadPending
Definition Animation.hpp:97
Vector< Output > mOutputs
Definition Animation.hpp:85
Vector< FPose > mPoses
Definition Animation.hpp:88
uint32_t mPaletteFrameMatrices
Definition Animation.hpp:96
Span< FAnimationPlayback > GetPlaybacks()
Definition Animation.hpp:38
RHIDeviceScopedHandle< RHIBuffer > mInputStagingBuffer
Definition Animation.hpp:92
Vector< MeshInput > mMeshes
Definition Animation.hpp:84
mat4 * mPaletteMapped
Definition Animation.hpp:94
Vector< Vector< uint32_t > > mSkeletonClips
Definition Animation.hpp:87
Allocator * mAllocator
Definition Animation.hpp:80
GPUScene * mGPU
Definition Animation.hpp:82
static constexpr uint32_t kPaletteFrames
Definition Animation.hpp:46
FImportedScene * mScene
Definition Animation.hpp:81
Span< const uint32_t > GetSkeletonClips(uint32_t skeletonIndex) const
Definition Animation.cpp:209
uint32_t mInputSize
Definition Animation.hpp:95
void RemoveInstance(uint32_t instanceIndex, FSceneGPUResources &resources)
Definition Animation.cpp:192
Allocator interface (noexcept)
Definition Allocator.hpp:29
Definition Device.hpp:246
Scoped move-only RAII handle wrapper for RHI Objects.
Definition Details.hpp:85
Renderer implementing a Frame Graph system with automatic resource tracking and synchronization.
Definition Renderer.hpp:377
Definition GPUScene.hpp:187
std::vector< T, StlAllocator< T > > Vector
std::vector with explicit Foundation::Core::StlAllocator constructor
Definition Container.hpp:149
std::span< T > Span
Alias for std::span
Definition Container.hpp:62
Definition Animation.hpp:7
uint32_t skeletonIndex
Definition Animation.hpp:8
bool playing
Definition Animation.hpp:12
uint32_t clipIndex
Definition Animation.hpp:9
float speed
Definition Animation.hpp:11
float time
Definition Animation.hpp:10
bool loop
Definition Animation.hpp:13
bool dirty
Definition Animation.hpp:14
Definition Animation.hpp:18
size_t inputBytes
Definition Animation.hpp:19
size_t paletteBytes
Definition Animation.hpp:20
size_t TotalBytes() const
Definition Animation.hpp:21
Definition Animation.hpp:66
uint32_t indexCount
Definition Animation.hpp:75
uint32_t jointCount
Definition Animation.hpp:76
uint32_t vertexCount
Definition Animation.hpp:74
uint32_t paletteOffset
Definition Animation.hpp:73
uint32_t indexSourceOffset
Definition Animation.hpp:70
uint32_t skinBindingOffset
Definition Animation.hpp:69
uint32_t indexDestinationOffset
Definition Animation.hpp:72
GeometryHandle geometry
Definition Animation.hpp:67
bool updateIndices
Definition Animation.hpp:77
uint32_t bindVertexOffset
Definition Animation.hpp:68
uint32_t vertexDestinationOffset
Definition Animation.hpp:71
Definition Animation.hpp:49
uint32_t vertexCount
Definition Animation.hpp:53
uint32_t indexOffset
Definition Animation.hpp:52
uint32_t skeletonIndex
Definition Animation.hpp:55
uint32_t skinBindingOffset
Definition Animation.hpp:51
bool valid
Definition Animation.hpp:56
uint32_t bindVertexOffset
Definition Animation.hpp:50
uint32_t indexCount
Definition Animation.hpp:54
Definition Animation.hpp:59
uint32_t meshIndex
Definition Animation.hpp:61
bool updateIndices
Definition Animation.hpp:63
uint32_t instanceIndex
Definition Animation.hpp:60
GeometryHandle geometry
Definition Animation.hpp:62
Definition Scene.hpp:376
Definition GPUScene.hpp:8
Definition GPUScene.hpp:47
Definition Renderer.hpp:159