Files
UnrealEngine/Engine/Source/Runtime/Renderer/Private/Skinning/AnimBankTransformProvider.h
2025-05-18 13:04:45 +08:00

45 lines
1.4 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Animation/AnimBank.h"
#include "Delegates/Delegate.h"
#include "Delegates/DelegateCombinations.h"
#include "RendererPrivateUtils.h"
#include "SceneExtensions.h"
#include "SkinningTransformProvider.h"
#include "SpanAllocator.h"
class FAnimBankTransformProvider : public ISceneExtension
{
DECLARE_SCENE_EXTENSION(RENDERER_API, FAnimBankTransformProvider);
public:
using ISceneExtension::ISceneExtension;
static bool ShouldCreateExtension(FScene& InScene);
virtual void InitExtension(FScene& InScene) override;
RENDERER_API FAnimBankRecordHandle RegisterBank(const FAnimBankDesc& Desc);
RENDERER_API void UnregisterBank(const FAnimBankRecordHandle& Handle);
RENDERER_API static FAnimBankRecordHandle ComputeDescHash(const FAnimBankDesc& Desc);
private:
void AdvanceAnimation(FSkinningTransformProvider::FProviderContext& Context);
void ScatterAnimation(
FSkinningTransformProvider::FProviderContext& Context,
const TConstArrayView<uint32> IdToOffsetMapping,
FRDGBufferRef SrcTransformBuffer
);
void ProvideGPUBankTransforms(FSkinningTransformProvider::FProviderContext& Context);
void ProvideCPUBankTransforms(FSkinningTransformProvider::FProviderContext& Context);
private:
FAnimBankRecordMap BankRecordMap;
FSpanAllocator BankAllocator;
};
RENDERER_API const FSkinningTransformProvider::FProviderId& GetAnimBankProviderId();