19template <
bool bExtraBoneInfluences,
typename BoneIndexType>
116 {
return TEXT(
"SkeletalMesh Vertex Weights Lookup"); }
120 {
return NumVertices; }
124 {
return sizeof(
uint32); }
139 {
return bNeedsCPUAccess; }
162 bool bNeedsCPUAccess;
174 static const uint32 PixelFormatStride = 4;
178template<
typename VertexDataType>
220 {
return TEXT(
"SkeletalMesh Vertex Weights Data"); }
224 {
return NumVertices; }
228 {
return NumBoneWeights; }
265 {
return bNeedsCPUAccess; }
268 {
return bVariableBonesPerVertex; }
274 {
return MaxBoneInfluences; }
280 {
return bUse16BitBoneIndex; }
286 {
return bUse16BitBoneWeight; }
329 uint32 GetPixelFormatStride()
const
330 {
return bVariableBonesPerVertex ? 1 : 4; }
333 bool bNeedsCPUAccess;
335 bool bVariableBonesPerVertex;
341 bool bUse16BitBoneIndex;
344 bool bUse16BitBoneWeight;
452 {
return &DataVertexBuffer; }
455 {
return &DataVertexBuffer; }
458 {
return &LookupVertexBuffer; }
uint16 FBoneIndexType
Definition BoneIndices.h:7
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define EXTRA_BONE_INFLUENCES
Definition GPUSkinPublicDefs.h:15
#define MAX_INFLUENCES_PER_STREAM
Definition GPUSkinPublicDefs.h:18
#define MAX_TOTAL_INFLUENCES
Definition GPUSkinPublicDefs.h:12
GPUSkinBoneInfluenceType
Definition GPUSkinVertexFactory.h:158
void Init()
Definition LockFreeList.h:4
uint8 FBoneIndex8
Definition SkinWeightVertexBuffer.h:15
uint16 FBoneIndex16
Definition SkinWeightVertexBuffer.h:16
Definition Archive.h:1208
virtual CORE_API void UsingCustomVersion(const struct FGuid &Guid)
Definition Archive.cpp:590
UE_FORCEINLINE_HINT bool IsLoading() const
Definition Archive.h:236
CORE_API int32 CustomVer(const struct FGuid &Key) const
Definition Archive.cpp:602
Definition NameTypes.h:617
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHIResourceReplace.h:55
Definition RHIResources.h:3304
Definition SkinWeightVertexBuffer.h:190
bool GetNeedsCPUAccess() const
Definition SkinWeightVertexBuffer.h:264
void SetNeedsCPUAccess(bool bInNeedsCPUAccess)
Definition SkinWeightVertexBuffer.h:261
ENGINE_API bool GetRigidWeightBone(uint32 VertexWeightOffset, uint32 VertexInfluenceCount, int32 &OutBoneIndex) const
Definition SkinWeightVertexBuffer.cpp:488
ENGINE_API ~FSkinWeightDataVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:231
ENGINE_API void SetMetaData(uint32 InNumVertices, uint32 InMaxBoneInfluences, bool bInUse16BitBoneIndex, bool bInUse16BitBoneWeight)
Definition SkinWeightVertexBuffer.cpp:386
ENGINE_API void SetMaxBoneInfluences(uint32 InMaxBoneInfluences)
Definition SkinWeightVertexBuffer.cpp:470
ENGINE_API void CopyDataFromBuffer(const uint8 *InSkinWeightData, uint32 InNumVertices)
Definition SkinWeightVertexBuffer.cpp:613
void SetUse16BitBoneWeight(bool bInUse16BitBoneWeight)
Definition SkinWeightVertexBuffer.h:282
FShaderResourceViewRHIRef SRVValue
Definition SkinWeightVertexBuffer.h:321
const uint8 * GetWeightData() const
Definition SkinWeightVertexBuffer.h:309
uint32 GetVertexDataSize() const
Definition SkinWeightVertexBuffer.h:253
bool Use16BitBoneIndex() const
Definition SkinWeightVertexBuffer.h:279
ENGINE_API void CleanUp()
Definition SkinWeightVertexBuffer.cpp:247
uint32 GetNumBoneWeights() const
Definition SkinWeightVertexBuffer.h:227
ENGINE_API uint16 GetBoneWeight(uint32 VertexWeightOffset, uint32 VertexInfluenceCount, uint32 InfluenceIndex) const
Definition SkinWeightVertexBuffer.cpp:558
uint32 GetConstantInfluencesBoneWeightsOffset() const
Definition SkinWeightVertexBuffer.h:249
uint32 GetBoneIndexByteSize() const
Definition SkinWeightVertexBuffer.h:231
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.cpp:419
ENGINE_API GPUSkinBoneInfluenceType GetBoneInfluenceType() const
uint32 GetBoneIndexAndWeightByteSize() const
Definition SkinWeightVertexBuffer.h:239
FRHIShaderResourceView * GetSRV() const
Definition SkinWeightVertexBuffer.h:257
bool IsWeightDataValid() const
Definition SkinWeightVertexBuffer.cpp:427
ENGINE_API void ResetVertexBoneWeights(uint32 VertexWeightOffset, uint32 VertexInfluenceCount)
Definition SkinWeightVertexBuffer.cpp:605
uint8 * GetWeightData()
Definition SkinWeightVertexBuffer.h:314
ENGINE_API FSkinWeightDataVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:204
FBufferRHIRef CreateRHIBuffer(FRHICommandListBase &RHICmdList)
Definition SkinWeightVertexBuffer.cpp:405
void SerializeMetaData(FArchive &Ar)
Definition SkinWeightVertexBuffer.cpp:348
uint32 GetNumVertices() const
Definition SkinWeightVertexBuffer.h:223
bool Use16BitBoneWeight() const
Definition SkinWeightVertexBuffer.h:285
void InitRHIForStreaming(FRHIBuffer *IntermediateBuffer, FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.cpp:411
ENGINE_API void SetBoneIndex(uint32 VertexWeightOffset, uint32 VertexInfluenceCount, uint32 InfluenceIndex, uint32 BoneIndex)
Definition SkinWeightVertexBuffer.cpp:537
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition SkinWeightVertexBuffer.cpp:432
void SetUse16BitBoneIndex(bool bInUse16BitBoneIndex)
Definition SkinWeightVertexBuffer.h:276
bool GetVariableBonesPerVertex() const
Definition SkinWeightVertexBuffer.h:267
uint32 GetMaxBoneInfluences() const
Definition SkinWeightVertexBuffer.h:273
ENGINE_API uint32 GetBoneIndex(uint32 VertexWeightOffset, uint32 VertexInfluenceCount, uint32 InfluenceIndex) const
Definition SkinWeightVertexBuffer.cpp:516
uint32 GetConstantInfluencesVertexStride() const
Definition SkinWeightVertexBuffer.h:245
ENGINE_API void SetBoneWeight(uint32 VertexWeightOffset, uint32 VertexInfluenceCount, uint32 InfluenceIndex, uint16 BoneWeight)
Definition SkinWeightVertexBuffer.cpp:581
uint32 GetBoneWeightByteSize() const
Definition SkinWeightVertexBuffer.h:234
void CopyMetaData(const FSkinWeightDataVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:396
virtual FString GetFriendlyName() const override
Definition SkinWeightVertexBuffer.h:219
virtual ENGINE_API void ReleaseRHI() override
Definition SkinWeightVertexBuffer.cpp:455
friend FArchive & operator<<(FArchive &Ar, FSkinWeightDataVertexBuffer &VertexBuffer)
Definition SkinWeightVertexBuffer.cpp:274
ENGINE_API FSkinWeightDataVertexBuffer & operator=(const FSkinWeightDataVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:236
Definition SkinWeightVertexBuffer.h:73
void SetWeightOffsetAndInfluenceCount(uint32 VertexIndex, uint32 WeightOffset, uint32 InfluenceCount)
Definition SkinWeightVertexBuffer.cpp:188
FRHIShaderResourceView * GetSRV() const
Definition SkinWeightVertexBuffer.h:131
void CopyMetaData(const FSkinWeightLookupVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:121
uint32 GetVertexDataSize() const
Definition SkinWeightVertexBuffer.h:127
void InitRHIForStreaming(FRHIBuffer *IntermediateBuffer, FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.cpp:164
bool GetNeedsCPUAccess() const
Definition SkinWeightVertexBuffer.h:138
ENGINE_API FSkinWeightLookupVertexBuffer & operator=(const FSkinWeightLookupVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:39
FBufferRHIRef CreateRHIBuffer(FRHICommandListBase &RHICmdList)
Definition SkinWeightVertexBuffer.cpp:195
uint32 GetNumVertices() const
Definition SkinWeightVertexBuffer.h:119
uint8 * GetLookupData()
Definition SkinWeightVertexBuffer.h:98
ENGINE_API FSkinWeightLookupVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:17
bool IsLookupDataValid() const
Definition SkinWeightVertexBuffer.cpp:55
const uint8 * GetLookupData() const
Definition SkinWeightVertexBuffer.h:93
virtual FString GetFriendlyName() const override
Definition SkinWeightVertexBuffer.h:115
ENGINE_API void SetMetaData(uint32 InNumVertices)
Definition SkinWeightVertexBuffer.cpp:116
ENGINE_API ~FSkinWeightLookupVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:34
void GetWeightOffsetAndInfluenceCount(uint32 VertexIndex, uint32 &OutWeightOffset, uint32 &OutInfluenceCount) const
Definition SkinWeightVertexBuffer.cpp:180
uint32 GetStride() const
Definition SkinWeightVertexBuffer.h:123
friend FArchive & operator<<(FArchive &Ar, FSkinWeightLookupVertexBuffer &VertexBuffer)
Definition SkinWeightVertexBuffer.cpp:73
ENGINE_API void CleanUp()
Definition SkinWeightVertexBuffer.cpp:46
virtual void InitRHI(FRHICommandListBase &RHICmdList) override
Definition SkinWeightVertexBuffer.cpp:134
void SerializeMetaData(FArchive &Ar)
Definition SkinWeightVertexBuffer.cpp:107
void SetNeedsCPUAccess(bool bInNeedsCPUAccess)
Definition SkinWeightVertexBuffer.h:135
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.cpp:172
virtual void ReleaseRHI() override
Definition SkinWeightVertexBuffer.cpp:157
FShaderResourceViewRHIRef SRVValue
Definition SkinWeightVertexBuffer.h:153
Definition SkinWeightVertexBuffer.h:364
ENGINE_API FSkinWeightVertexBuffer & operator=(const FSkinWeightVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:651
const FSkinWeightLookupVertexBuffer * GetLookupVertexBuffer() const
Definition SkinWeightVertexBuffer.h:457
void InitRHIForStreaming(const FSkinWeightRHIInfo &RHIInfo, FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.h:482
ENGINE_API void ReleaseResources()
Definition SkinWeightVertexBuffer.cpp:815
bool Use16BitBoneWeight() const
Definition SkinWeightVertexBuffer.h:430
ENGINE_API void CleanUp()
Definition SkinWeightVertexBuffer.cpp:666
uint32 GetMaxBoneInfluences() const
Definition SkinWeightVertexBuffer.h:418
uint32 GetNumVertices() const
Definition SkinWeightVertexBuffer.h:399
void SerializeMetaData(FArchive &Ar)
Definition SkinWeightVertexBuffer.cpp:704
ENGINE_API void CopySkinWeightRawDataFromBuffer(const uint8 *InSkinWeightData, uint32 InNumVertices)
Definition SkinWeightVertexBuffer.cpp:944
bool Use16BitBoneIndex() const
Definition SkinWeightVertexBuffer.h:424
void SetUse16BitBoneIndex(bool bInUse16BitBoneIndex)
Definition SkinWeightVertexBuffer.h:421
ENGINE_API friend FArchive & operator<<(FArchive &Ar, FSkinWeightVertexBuffer &VertexBuffer)
Definition SkinWeightVertexBuffer.cpp:686
ENGINE_API FSkinWeightInfo GetVertexSkinWeights(uint32 VertexIndex) const
Definition SkinWeightVertexBuffer.cpp:934
ENGINE_API void SetOwnerName(const FName &OwnerName)
Definition SkinWeightVertexBuffer.cpp:797
const FSkinWeightDataVertexBuffer * GetDataVertexBuffer() const
Definition SkinWeightVertexBuffer.h:454
uint32 GetVertexDataSize() const
Definition SkinWeightVertexBuffer.h:403
ENGINE_API void BeginInitResources()
Definition SkinWeightVertexBuffer.cpp:803
uint32 GetBoneWeightByteSize() const
Definition SkinWeightVertexBuffer.h:436
ENGINE_API ~FSkinWeightVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:646
ENGINE_API void ResetVertexBoneWeights(uint32 VertexIndex)
Definition SkinWeightVertexBuffer.cpp:789
ENGINE_API bool GetRigidWeightBone(uint32 VertexIndex, int32 &OutBoneIndex) const
Definition SkinWeightVertexBuffer.cpp:749
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition SkinWeightVertexBuffer.h:488
uint32 GetConstantInfluencesVertexStride() const
Definition SkinWeightVertexBuffer.h:445
ENGINE_API uint32 GetBoneIndex(uint32 VertexIndex, uint32 InfluenceIndex) const
Definition SkinWeightVertexBuffer.cpp:757
ENGINE_API GPUSkinBoneInfluenceType GetBoneInfluenceType() const
Definition SkinWeightVertexBuffer.cpp:724
void SetNeedsCPUAccess(bool bInNeedsCPUAccess)
Definition SkinWeightVertexBuffer.h:406
ENGINE_API void SetBoneIndex(uint32 VertexIndex, uint32 InfluenceIndex, uint32 BoneIndex)
Definition SkinWeightVertexBuffer.cpp:765
ENGINE_API void SetBoneWeight(uint32 VertexIndex, uint32 InfluenceIndex, uint16 BoneWeight)
Definition SkinWeightVertexBuffer.cpp:781
ENGINE_API void RebuildLookupVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:672
ENGINE_API uint16 GetBoneWeight(uint32 VertexIndex, uint32 InfluenceIndex) const
Definition SkinWeightVertexBuffer.cpp:773
FSkinWeightRHIInfo CreateRHIBuffer(FRHICommandListBase &RHICmdList)
Definition SkinWeightVertexBuffer.cpp:716
ENGINE_API void GetVertexInfluenceOffsetCount(uint32 VertexIndex, uint32 &VertexWeightOffset, uint32 &VertexInfluenceCount) const
Definition SkinWeightVertexBuffer.cpp:736
ENGINE_API void BeginReleaseResources()
Definition SkinWeightVertexBuffer.cpp:809
ENGINE_API FSkinWeightVertexBuffer()
Definition SkinWeightVertexBuffer.cpp:629
bool GetVariableBonesPerVertex() const
Definition SkinWeightVertexBuffer.h:442
uint32 GetBoneIndexByteSize() const
Definition SkinWeightVertexBuffer.h:433
uint32 GetConstantInfluencesBoneWeightsOffset() const
Definition SkinWeightVertexBuffer.h:448
bool GetNeedsCPUAccess() const
Definition SkinWeightVertexBuffer.h:412
uint32 GetBoneIndexAndWeightByteSize() const
Definition SkinWeightVertexBuffer.h:439
ENGINE_API void GetSkinWeights(TArray< FSkinWeightInfo > &OutVertices) const
Definition SkinWeightVertexBuffer.cpp:921
void CopyMetaData(const FSkinWeightVertexBuffer &Other)
Definition SkinWeightVertexBuffer.cpp:710
FSkinWeightDataVertexBuffer * GetDataVertexBuffer()
Definition SkinWeightVertexBuffer.h:451
void SetUse16BitBoneWeight(bool bInUse16BitBoneWeight)
Definition SkinWeightVertexBuffer.h:427
void SetMaxBoneInfluences(uint32 InMaxBoneInfluences)
Definition SkinWeightVertexBuffer.h:415
Definition SkinWeightVertexBuffer.h:180
FSkinWeightVertexData(bool InNeedsCPUAccess=false)
Definition SkinWeightVertexBuffer.h:182
Definition StaticMeshVertexDataInterface.h:22
Definition RenderResource.h:474
Definition StaticMeshVertexData.h:13
CORE_API static const FGuid GUID
Definition AnimObjectVersion.h:65
@ IncreaseBoneIndexLimitPerChunk
Definition AnimObjectVersion.h:25
Definition SkinWeightVertexBuffer.h:60
FBoneIndexType InfluenceBones[MAX_TOTAL_INFLUENCES]
Definition SkinWeightVertexBuffer.h:61
uint16 InfluenceWeights[MAX_TOTAL_INFLUENCES]
Definition SkinWeightVertexBuffer.h:62
Definition SkinWeightVertexBuffer.h:66
FBufferRHIRef LookupVertexBufferRHI
Definition SkinWeightVertexBuffer.h:68
FBufferRHIRef DataVertexBufferRHI
Definition SkinWeightVertexBuffer.h:67
Definition SkeletalMeshTypes.h:57
Definition SkinWeightVertexBuffer.h:21
@ NumInfluences
Definition SkinWeightVertexBuffer.h:24
friend FArchive & operator<<(FArchive &Ar, TLegacySkinWeightInfo &I)
Definition SkinWeightVertexBuffer.h:29
uint8 InfluenceWeights[NumInfluences]
Definition SkinWeightVertexBuffer.h:27
BoneIndexType InfluenceBones[NumInfluences]
Definition SkinWeightVertexBuffer.h:26