Files
UnrealEngine/Engine/Source/Runtime/MovieSceneTracks/Public/Systems/MovieScenePreAnimatedMaterialParameters.h
2025-05-18 13:04:45 +08:00

65 lines
2.8 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "CoreTypes.h"
#include "UObject/ObjectKey.h"
#include "Evaluation/PreAnimatedState/MovieScenePreAnimatedObjectStorage.h"
#include "Evaluation/PreAnimatedState/MovieScenePreAnimatedStateStorage.h"
#include "Materials/MaterialParameters.h"
namespace UE::MovieScene
{
struct FMaterialParameterKey
{
FObjectKey BoundMaterial;
FMaterialParameterInfo ParameterInfo;
MOVIESCENETRACKS_API FMaterialParameterKey(const FObjectComponent& InBoundMaterial, const FName& InParameterName);
MOVIESCENETRACKS_API FMaterialParameterKey(const FObjectComponent& InBoundMaterial, const FMaterialParameterInfo& InParameterInfo);
friend MOVIESCENETRACKS_API uint32 GetTypeHash(const FMaterialParameterKey& InKey);
friend MOVIESCENETRACKS_API bool operator==(const FMaterialParameterKey& A, const FMaterialParameterKey& B);
};
struct FMaterialParameterCollectionScalarTraits : FBoundObjectPreAnimatedStateTraits
{
using KeyType = FMaterialParameterKey;
using StorageType = float;
static MOVIESCENETRACKS_API void ReplaceObject(FMaterialParameterKey& InOutKey, const FObjectKey& NewObject);
static MOVIESCENETRACKS_API float CachePreAnimatedValue(const FObjectComponent& InBoundMaterial, const FName& ParameterName);
static MOVIESCENETRACKS_API float CachePreAnimatedValue(const FObjectComponent& InBoundMaterial, const FMaterialParameterInfo& ParameterInfo);
static MOVIESCENETRACKS_API void RestorePreAnimatedValue(const FMaterialParameterKey& InKey, float OldValue, const FRestoreStateParams& Params);
};
struct FMaterialParameterCollectionVectorTraits : FBoundObjectPreAnimatedStateTraits
{
using KeyType = FMaterialParameterKey;
using StorageType = FLinearColor;
static MOVIESCENETRACKS_API void ReplaceObject(FMaterialParameterKey& InOutKey, const FObjectKey& NewObject);
static MOVIESCENETRACKS_API FLinearColor CachePreAnimatedValue(const FObjectComponent& InBoundMaterial, const FName& ParameterName);
static MOVIESCENETRACKS_API FLinearColor CachePreAnimatedValue(const FObjectComponent& InBoundMaterial, const FMaterialParameterInfo& ParameterInfo);
static MOVIESCENETRACKS_API void RestorePreAnimatedValue(const FMaterialParameterKey& InKey, const FLinearColor& OldValue, const FRestoreStateParams& Params);
};
struct FPreAnimatedScalarMaterialParameterStorage
: public TPreAnimatedStateStorage<FMaterialParameterCollectionScalarTraits>
{
static MOVIESCENETRACKS_API TAutoRegisterPreAnimatedStorageID<FPreAnimatedScalarMaterialParameterStorage> StorageID;
};
struct FPreAnimatedVectorMaterialParameterStorage
: public TPreAnimatedStateStorage<FMaterialParameterCollectionVectorTraits>
{
static MOVIESCENETRACKS_API TAutoRegisterPreAnimatedStorageID<FPreAnimatedVectorMaterialParameterStorage> StorageID;
};
} // namespace UE::MovieScene