18template<
typename TangentTypeT>
60template<
typename UVTypeT>
101template<EStaticMeshVertexTangentBasisType TangentBasisType>
120template<EStaticMeshVertexUVType UVType>
231 template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
236 check((
void*)((&ElementData[VertexIndex]) + 1) <= (
void*)(TangentsDataPtr + TangentsData->
GetResourceSize()));
237 check((
void*)((&ElementData[VertexIndex]) + 0) >= (
void*)(TangentsDataPtr));
238 return FVector4f(ElementData[VertexIndex].GetTangentX());
255 template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
260 check((
void*)((&ElementData[VertexIndex]) + 1) <= (
void*)(TangentsDataPtr + TangentsData->
GetResourceSize()));
261 check((
void*)((&ElementData[VertexIndex]) + 0) >= (
void*)(TangentsDataPtr));
262 return FVector4f(ElementData[VertexIndex].GetTangentZ());
279 template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
284 check((
void*)((&ElementData[VertexIndex]) + 1) <= (
void*)(TangentsDataPtr + TangentsData->
GetResourceSize()));
285 check((
void*)((&ElementData[VertexIndex]) + 0) >= (
void*)(TangentsDataPtr));
286 return FVector4f(ElementData[VertexIndex].GetTangentY());
317 check((
void*)((&ElementData[VertexIndex]) + 1) <= (
void*)(TangentsDataPtr + TangentsData->
GetResourceSize()));
318 check((
void*)((&ElementData[VertexIndex]) + 0) >= (
void*)(TangentsDataPtr));
319 ElementData[VertexIndex].SetTangents(
X,
Y,
Z);
325 check((
void*)((&ElementData[VertexIndex]) + 1) <= (
void*)(TangentsDataPtr + TangentsData->
GetResourceSize()));
326 check((
void*)((&ElementData[VertexIndex]) + 0) >= (
void*)(TangentsDataPtr));
327 ElementData[VertexIndex].SetTangents(
X,
Y,
Z);
349 check((
void*)((&ElementData[UVIndex]) + 1) <= (
void*)(TexcoordDataPtr + TexcoordData->
GetResourceSize()));
350 check((
void*)((&ElementData[UVIndex]) + 0) >= (
void*)(TexcoordDataPtr));
351 ElementData[UVIndex] =
Vec2D;
358 check((
void*)((&ElementData[UVIndex]) + 1) <= (
void*)(TexcoordDataPtr + TexcoordData->
GetResourceSize()));
359 check((
void*)((&ElementData[UVIndex]) + 0) >= (
void*)(TexcoordDataPtr));
361 if ( bUseBackwardsCompatibleF16TruncUVs )
367 ElementData[UVIndex] =
Vec2D;
372 template<EStaticMeshVertexUVType UVTypeT>
379 check((
void*)((&ElementData[UVIndex]) + 1) <= (
void*)(TexcoordDataPtr + TexcoordData->
GetResourceSize()));
380 check((
void*)((&ElementData[UVIndex]) + 0) >= (
void*)(TexcoordDataPtr));
381 return ElementData[UVIndex].GetUV();
418 return bUseFullPrecisionUVs;
423 bUseFullPrecisionUVs =
UseFull;
428 return bUseHighPrecisionTangentBasis;
438 return (TangentsStride + (TexcoordStride *
GetNumTexCoords())) * NumVertices;
473 if (!TangentsData || !TexcoordData)
481 virtual FString GetFriendlyName()
const override {
return TEXT(
"FTangentsVertexBuffer"); }
486 virtual FString GetFriendlyName()
const override {
return TEXT(
"FTexcoordVertexBuffer"); }
512 uint8* TangentsDataPtr;
513 uint8* TexcoordDataPtr;
516 mutable uint32 TangentsStride;
519 mutable uint32 TexcoordStride;
528 bool bUseFullPrecisionUVs;
531 bool bUseHighPrecisionTangentBasis;
533 bool NeedsCPUAccess =
true;
536 void AllocateData(
bool bNeedsCPUAccess =
true);
541 void ConvertHalfTexcoordsToFloat(
const uint8*
InData);
543 void InitTangentAndTexCoordStrides();
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define check(expr)
Definition AssertionMacros.h:314
FConstMeshBuildVertexView MakeConstMeshBuildVertexView(const TConstArrayView< FStaticMeshBuildVertex > &InVertices)
Definition Components.h:205
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
bool IsValidRef(const FVertexBufferAndSRV &Buffer)
Definition GPUSkinVertexFactory.h:92
void Init()
Definition LockFreeList.h:4
UE::Math::TVector2< float > FVector2f
Definition MathFwd.h:74
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
UE::Math::TVector< double > FVector3d
Definition MathFwd.h:60
UE::Math::TVector4< float > FVector4f
Definition MathFwd.h:75
EVertexElementType
Definition RHIDefinitions.h:496
@ VET_PackedNormal
Definition RHIDefinitions.h:502
@ VET_Short4N
Definition RHIDefinitions.h:511
FVector GenerateYAxis(const VectorType &XAxis, const VectorType &ZAxis)
Definition RenderMath.h:49
float GetBasisDeterminantSign(const FVector &XAxis, const FVector &YAxis, const FVector &ZAxis)
Definition RenderMath.h:16
EStaticMeshVertexTangentBasisType
Definition StaticMeshVertexBuffer.h:90
EStaticMeshVertexUVType
Definition StaticMeshVertexBuffer.h:96
@ LightMapCoordinateIndex
Definition Archive.h:1208
Definition RHIResources.h:1581
Definition RHICommandList.h:455
Definition RHIResourceReplace.h:55
Definition RHIResources.h:3304
Definition RenderResource.h:37
Definition StaticMeshVertexBuffer.h:480
Definition StaticMeshVertexBuffer.h:485
Definition StaticMeshVertexBuffer.h:150
ENGINE_API FStaticMeshVertexBuffer()
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition StaticMeshVertexBuffer.cpp:306
ENGINE_API ~FStaticMeshVertexBuffer()
Definition StaticMeshVertexBuffer.cpp:25
void SetUseHighPrecisionTangentBasis(bool bUseHighPrecision)
Definition StaticMeshVertexBuffer.h:431
ENGINE_API void operator=(const FStaticMeshVertexBuffer &Other)
Definition StaticMeshVertexBuffer.cpp:272
FVector2f GetVertexUV(uint32 VertexIndex, uint32 UVIndex) const
Definition StaticMeshVertexBuffer.h:391
FRHIShaderResourceView * GetTangentsSRV() const
Definition StaticMeshVertexBuffer.h:494
bool GetAllowCPUAccess() const
Definition StaticMeshVertexBuffer.h:471
const void * GetTexCoordData() const
Definition StaticMeshVertexBuffer.h:465
virtual FString GetFriendlyName() const override
Definition StaticMeshVertexBuffer.h:454
const void * GetTangentData() const
Definition StaticMeshVertexBuffer.h:462
uint32 GetNumVertices() const
Definition StaticMeshVertexBuffer.h:406
FVector4f VertexTangentX_Typed(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:232
FVector2f GetVertexUV_Typed(uint32 VertexIndex, uint32 UVIndex) const
Definition StaticMeshVertexBuffer.h:373
void * GetTangentData()
Definition StaticMeshVertexBuffer.h:461
FStaticMeshVertexBuffer::FTangentsVertexBuffer TangentsVertexBuffer
void SerializeMetaData(FArchive &Ar)
Definition StaticMeshVertexBuffer.cpp:241
uint32 GetResourceSize() const
Definition StaticMeshVertexBuffer.h:436
ENGINE_API void AppendVertices(const FStaticMeshBuildVertex *Vertices, const uint32 NumVerticesToAppend, bool bUseBackwardsCompatibleF16TruncUVs=false)
Definition StaticMeshVertexBuffer.cpp:153
ENGINE_API FShaderResourceViewRHIRef GetOrCreateTexCoordsSRV(FRHICommandListBase &RHICmdList) const
Definition StaticMeshVertexBuffer.cpp:453
virtual ENGINE_API void ReleaseRHI() override
Definition StaticMeshVertexBuffer.cpp:341
void SetVertexTangents(uint32 VertexIndex, FVector3f X, FVector3f Y, FVector3f Z)
Definition StaticMeshVertexBuffer.h:309
virtual ENGINE_API void InitResource(FRHICommandListBase &RHICmdList) override
Definition StaticMeshVertexBuffer.cpp:349
void Init(const FConstMeshBuildVertexView &InVertices, bool bNeedsCPUAccess=true)
Definition StaticMeshVertexBuffer.h:181
FVector4f VertexTangentZ_Typed(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:256
ENGINE_API int GetTangentSize() const
Definition StaticMeshVertexBuffer.cpp:396
ENGINE_API void BindLightMapVertexBuffer(const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int LightMapCoordinateIndex) const
Definition StaticMeshVertexBuffer.cpp:648
ENGINE_API void BindPackedTexCoordVertexBuffer(const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int32 MaxNumTexCoords=-1) const
Definition StaticMeshVertexBuffer.cpp:536
bool GetUseHighPrecisionTangentBasis() const
Definition StaticMeshVertexBuffer.h:426
void Init(const TArray< FStaticMeshBuildVertex > &InVertices, uint32 InNumTexCoords, bool bNeedsCPUAccess=true)
Definition StaticMeshVertexBuffer.h:188
void ClearMetaData()
Definition StaticMeshVertexBuffer.cpp:260
uint32 GetNumTexCoords() const
Definition StaticMeshVertexBuffer.h:411
FVector4f VertexTangentZ(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:265
FVector3f VertexTangentY(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:295
FStaticMeshVertexBuffer::FTexcoordVertexBuffer TexCoordVertexBuffer
virtual ENGINE_API void ReleaseResource() override
Definition StaticMeshVertexBuffer.cpp:356
FVector4f VertexTangentX(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:241
bool IsValid()
Definition StaticMeshVertexBuffer.h:489
FBufferRHIRef CreateTexCoordRHIBuffer(FRHICommandListBase &RHICmdList)
Definition StaticMeshVertexBuffer.cpp:285
FRHIShaderResourceView * GetTexCoordsSRV() const
Definition StaticMeshVertexBuffer.h:495
ENGINE_API void BindTangentVertexBuffer(const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data) const
Definition StaticMeshVertexBuffer.cpp:488
void InitRHIForStreaming(FRHIBuffer *IntermediateTangentsBuffer, FRHIBuffer *IntermediateTexCoordBuffer, FRHIResourceReplaceBatcher &Batcher)
Definition StaticMeshVertexBuffer.cpp:290
ENGINE_API void CleanUp()
Definition StaticMeshVertexBuffer.cpp:31
void SetVertexUV(uint32 VertexIndex, uint32 UVIndex, const FVector2f &Vec2D, bool bUseBackwardsCompatibleF16TruncUVs=false)
Definition StaticMeshVertexBuffer.h:339
ENGINE_API int GetTexCoordSize() const
Definition StaticMeshVertexBuffer.cpp:412
FVector4f VertexTangentY_Typed(uint32 VertexIndex) const
Definition StaticMeshVertexBuffer.h:280
FBufferRHIRef CreateTangentsRHIBuffer(FRHICommandListBase &RHICmdList)
Definition StaticMeshVertexBuffer.cpp:280
void SetUseFullPrecisionUVs(bool UseFull)
Definition StaticMeshVertexBuffer.h:421
ENGINE_API void SetMetaData(uint32 NumTexCoords, uint32 NumVertices, bool bUseFullPrecisionUVs, bool bUseHighPrecisionTangentBasis)
Definition StaticMeshVertexBuffer.cpp:250
ENGINE_API void BindTexCoordVertexBuffer(const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int ClampedNumTexCoords=-1) const
Definition StaticMeshVertexBuffer.cpp:598
ENGINE_API FShaderResourceViewRHIRef GetOrCreateTangentsSRV(FRHICommandListBase &RHICmdList) const
Definition StaticMeshVertexBuffer.cpp:428
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition StaticMeshVertexBuffer.cpp:313
void * GetTexCoordData()
Definition StaticMeshVertexBuffer.h:464
bool GetUseFullPrecisionUVs() const
Definition StaticMeshVertexBuffer.h:416
Definition StaticMeshVertexDataInterface.h:22
virtual SIZE_T GetResourceSize() const =0
virtual bool GetAllowCPUAccess() const =0
Definition RenderResource.h:474
FBufferRHIRef VertexBufferRHI
Definition RenderResource.h:489
Definition VertexFactory.h:661
Definition Components.h:72
Definition PackedNormal.h:13
Definition PackedNormal.h:309
Definition Components.h:26
Definition Components.h:38
Definition StaticMeshVertexBuffer.h:143
bool bNeedsCPUAccess
Definition StaticMeshVertexBuffer.h:144
bool bUseBackwardsCompatibleF16TruncUVs
Definition StaticMeshVertexBuffer.h:145
Definition Vector2DHalf.h:14
void SetTruncate(float InX, float InY)
Definition Vector2DHalf.h:152
Definition StaticMeshVertexBuffer.h:20
void SetTangents(FVector3f X, FVector3f Y, FVector3f Z)
Definition StaticMeshVertexBuffer.h:39
FVector3f GetTangentX() const
Definition StaticMeshVertexBuffer.h:24
TangentTypeT TangentX
Definition StaticMeshVertexBuffer.h:21
FVector4f GetTangentZ() const
Definition StaticMeshVertexBuffer.h:29
FVector3f GetTangentY() const
Definition StaticMeshVertexBuffer.h:34
TangentTypeT TangentZ
Definition StaticMeshVertexBuffer.h:22
friend FArchive & operator<<(FArchive &Ar, TStaticMeshVertexTangentDatum &Vertex)
Definition StaticMeshVertexBuffer.h:52
FPackedNormal TangentTypeT
Definition StaticMeshVertexBuffer.h:109
FPackedRGBA16N TangentTypeT
Definition StaticMeshVertexBuffer.h:116
Definition StaticMeshVertexBuffer.h:103
Definition StaticMeshVertexBuffer.h:62
void SetUV(FVector2f UV)
Definition StaticMeshVertexBuffer.h:70
friend FArchive & operator<<(FArchive &Ar, TStaticMeshVertexUVsDatum &Vertex)
Definition StaticMeshVertexBuffer.h:82
UVTypeT UVs
Definition StaticMeshVertexBuffer.h:63
FVector2f GetUV() const
Definition StaticMeshVertexBuffer.h:65
FVector2DHalf UVsTypeT
Definition StaticMeshVertexBuffer.h:128
FVector2f UVsTypeT
Definition StaticMeshVertexBuffer.h:134
Definition StaticMeshVertexBuffer.h:122