UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
FStaticMeshVertexBuffer Class Reference

#include <StaticMeshVertexBuffer.h>

+ Inheritance diagram for FStaticMeshVertexBuffer:

Classes

class  FTangentsVertexBuffer
 
class  FTexcoordVertexBuffer
 

Public Member Functions

ENGINE_API FStaticMeshVertexBuffer ()
 
ENGINE_API ~FStaticMeshVertexBuffer ()
 
ENGINE_API void CleanUp ()
 
ENGINE_API void Init (uint32 InNumVertices, uint32 InNumTexCoords, bool bNeedsCPUAccess=true)
 
ENGINE_API void Init (const TArray< FStaticMeshBuildVertex > &InVertices, uint32 InNumTexCoords, const FStaticMeshVertexBufferFlags &InInitFlags)
 
ENGINE_API void Init (const FConstMeshBuildVertexView &InVertices, const FStaticMeshVertexBufferFlags &InInitFlags)
 
void Init (const FConstMeshBuildVertexView &InVertices, bool bNeedsCPUAccess=true)
 
void Init (const TArray< FStaticMeshBuildVertex > &InVertices, uint32 InNumTexCoords, bool bNeedsCPUAccess=true)
 
void Init (const FStaticMeshVertexBuffer &InVertexBuffer, bool bNeedsCPUAccess=true)
 
ENGINE_API void AppendVertices (const FStaticMeshBuildVertex *Vertices, const uint32 NumVerticesToAppend, bool bUseBackwardsCompatibleF16TruncUVs=false)
 
ENGINE_API void Serialize (FArchive &Ar, bool bNeedsCPUAccess)
 
void SerializeMetaData (FArchive &Ar)
 
ENGINE_API void SetMetaData (uint32 NumTexCoords, uint32 NumVertices, bool bUseFullPrecisionUVs, bool bUseHighPrecisionTangentBasis)
 
void ClearMetaData ()
 
ENGINE_API void operator= (const FStaticMeshVertexBuffer &Other)
 
template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f VertexTangentX_Typed (uint32 VertexIndex) const
 
FVector4f VertexTangentX (uint32 VertexIndex) const
 
template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f VertexTangentZ_Typed (uint32 VertexIndex) const
 
FVector4f VertexTangentZ (uint32 VertexIndex) const
 
template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f VertexTangentY_Typed (uint32 VertexIndex) const
 
FVector3f VertexTangentY (uint32 VertexIndex) const
 
void SetVertexTangents (uint32 VertexIndex, FVector3f X, FVector3f Y, FVector3f Z)
 
void SetVertexUV (uint32 VertexIndex, uint32 UVIndex, const FVector2f &Vec2D, bool bUseBackwardsCompatibleF16TruncUVs=false)
 
template<EStaticMeshVertexUVType UVTypeT>
FVector2f GetVertexUV_Typed (uint32 VertexIndex, uint32 UVIndex) const
 
FVector2f GetVertexUV (uint32 VertexIndex, uint32 UVIndex) const
 
uint32 GetNumVertices () const
 
uint32 GetNumTexCoords () const
 
bool GetUseFullPrecisionUVs () const
 
void SetUseFullPrecisionUVs (bool UseFull)
 
bool GetUseHighPrecisionTangentBasis () const
 
void SetUseHighPrecisionTangentBasis (bool bUseHighPrecision)
 
uint32 GetResourceSize () const
 
FBufferRHIRef CreateTangentsRHIBuffer (FRHICommandListBase &RHICmdList)
 
FBufferRHIRef CreateTexCoordRHIBuffer (FRHICommandListBase &RHICmdList)
 
void InitRHIForStreaming (FRHIBuffer *IntermediateTangentsBuffer, FRHIBuffer *IntermediateTexCoordBuffer, FRHIResourceReplaceBatcher &Batcher)
 
void ReleaseRHIForStreaming (FRHIResourceReplaceBatcher &Batcher)
 
virtual ENGINE_API void InitRHI (FRHICommandListBase &RHICmdList) override
 
virtual ENGINE_API void ReleaseRHI () override
 
virtual ENGINE_API void InitResource (FRHICommandListBase &RHICmdList) override
 
virtual ENGINE_API void ReleaseResource () override
 
virtual FString GetFriendlyName () const override
 
ENGINE_API void BindTangentVertexBuffer (const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data) const
 
ENGINE_API void BindTexCoordVertexBuffer (const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int ClampedNumTexCoords=-1) const
 
ENGINE_API void BindPackedTexCoordVertexBuffer (const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int32 MaxNumTexCoords=-1) const
 
ENGINE_API void BindLightMapVertexBuffer (const FVertexFactory *VertexFactory, struct FStaticMeshDataType &Data, int LightMapCoordinateIndex) const
 
voidGetTangentData ()
 
const voidGetTangentData () const
 
voidGetTexCoordData ()
 
const voidGetTexCoordData () const
 
ENGINE_API int GetTangentSize () const
 
ENGINE_API int GetTexCoordSize () const
 
bool GetAllowCPUAccess () const
 
bool IsValid ()
 
FRHIShaderResourceViewGetTangentsSRV () const
 
FRHIShaderResourceViewGetTexCoordsSRV () const
 
ENGINE_API FShaderResourceViewRHIRef GetOrCreateTangentsSRV (FRHICommandListBase &RHICmdList) const
 
ENGINE_API FShaderResourceViewRHIRef GetOrCreateTexCoordsSRV (FRHICommandListBase &RHICmdList) const
 
- Public Member Functions inherited from FRenderResource
RENDERCORE_API FRenderResource ()
 
RENDERCORE_API FRenderResource (ERHIFeatureLevel::Type InFeatureLevel)
 
RENDERCORE_API FRenderResource (const FRenderResource &)
 
RENDERCORE_API FRenderResource (FRenderResource &&)
 
RENDERCORE_API FRenderResourceoperator= (const FRenderResource &Other)
 
RENDERCORE_API FRenderResourceoperator= (FRenderResource &&Other)
 
virtual RENDERCORE_API ~FRenderResource ()
 
RENDERCORE_API void UpdateRHI (FRHICommandListBase &RHICmdList)
 
bool IsInitialized () const
 
int32 GetListIndex () const
 
EInitPhase GetInitPhase () const
 
void SetOwnerName (FName InOwnerName)
 
FName GetOwnerName () const
 
void SetResourceName (FName InResourceName)
 
FName GetResourceName () const
 

Public Attributes

FStaticMeshVertexBuffer::FTangentsVertexBuffer TangentsVertexBuffer
 
FStaticMeshVertexBuffer::FTexcoordVertexBuffer TexCoordVertexBuffer
 
- Public Attributes inherited from FRenderResource
ERenderResourceState ResourceState = ERenderResourceState::Default
 

Friends

class FStaticMeshVertexBuffer
 

Additional Inherited Members

- Public Types inherited from FRenderResource
enum class  EInitPhase : uint8 { Pre , Default , MAX }
 
- Static Public Member Functions inherited from FRenderResource
static RENDERCORE_API void ReleaseRHIForAllResources ()
 
static RENDERCORE_API void InitPreRHIResources ()
 
static RENDERCORE_API void ChangeFeatureLevel (ERHIFeatureLevel::Type NewFeatureLevel)
 
static RENDERCORE_API FName SetScopeName (FName Name)
 
- Protected Member Functions inherited from FRenderResource
void SetFeatureLevel (const FStaticFeatureLevel InFeatureLevel)
 
const FStaticFeatureLevel GetFeatureLevel () const
 
bool HasValidFeatureLevel () const
 
template<typename T >
FBufferRHIRef CreateRHIBuffer (FRHICommandListBase &RHICmdList, T &InOutResourceObject, uint32 ResourceCount, EBufferUsageFlags InBufferUsageFlags, const TCHAR *InDebugName)
 
void SetInitPhase (EInitPhase InInitPhase)
 
- Static Protected Member Functions inherited from FRenderResource
static RENDERCORE_API FRHICommandListBaseGetImmediateCommandList ()
 

Detailed Description

Vertex buffer for a static mesh LOD

Constructor & Destructor Documentation

◆ FStaticMeshVertexBuffer()

ENGINE_API FStaticMeshVertexBuffer::FStaticMeshVertexBuffer ( )

Default constructor.

◆ ~FStaticMeshVertexBuffer()

FStaticMeshVertexBuffer::~FStaticMeshVertexBuffer ( )

Destructor.

Member Function Documentation

◆ AppendVertices()

void FStaticMeshVertexBuffer::AppendVertices ( const FStaticMeshBuildVertex Vertices,
const uint32  NumVerticesToAppend,
bool  bUseBackwardsCompatibleF16TruncUVs = false 
)

Appends the specified vertices to the end of the buffer

Parameters
VerticesThe vertex data to be appended. Must not be nullptr.
NumVerticesToAppendHow many vertices should be added
bUseBackwardsCompatibleF16TruncUVs- Whether backwards compatible legacy truncation mode should be used for F16 UVs (default false)

◆ BindLightMapVertexBuffer()

void FStaticMeshVertexBuffer::BindLightMapVertexBuffer ( const FVertexFactory VertexFactory,
struct FStaticMeshDataType Data,
int  LightMapCoordinateIndex 
) const

◆ BindPackedTexCoordVertexBuffer()

void FStaticMeshVertexBuffer::BindPackedTexCoordVertexBuffer ( const FVertexFactory VertexFactory,
struct FStaticMeshDataType Data,
int32  MaxNumTexCoords = -1 
) const

◆ BindTangentVertexBuffer()

void FStaticMeshVertexBuffer::BindTangentVertexBuffer ( const FVertexFactory VertexFactory,
struct FStaticMeshDataType Data 
) const

◆ BindTexCoordVertexBuffer()

void FStaticMeshVertexBuffer::BindTexCoordVertexBuffer ( const FVertexFactory VertexFactory,
struct FStaticMeshDataType Data,
int  ClampedNumTexCoords = -1 
) const

◆ CleanUp()

void FStaticMeshVertexBuffer::CleanUp ( )

Delete existing resources

◆ ClearMetaData()

void FStaticMeshVertexBuffer::ClearMetaData ( )

◆ CreateTangentsRHIBuffer()

FBufferRHIRef FStaticMeshVertexBuffer::CreateTangentsRHIBuffer ( FRHICommandListBase RHICmdList)

Create an RHI vertex buffer with CPU data. CPU data may be discarded after creation (see TResourceArray::Discard)

◆ CreateTexCoordRHIBuffer()

FBufferRHIRef FStaticMeshVertexBuffer::CreateTexCoordRHIBuffer ( FRHICommandListBase RHICmdList)

◆ GetAllowCPUAccess()

bool FStaticMeshVertexBuffer::GetAllowCPUAccess ( ) const
inline

◆ GetFriendlyName()

virtual FString FStaticMeshVertexBuffer::GetFriendlyName ( ) const
inlineoverridevirtual
Returns
The resource's friendly name. Typically a UObject name.

Reimplemented from FRenderResource.

◆ GetNumTexCoords()

uint32 FStaticMeshVertexBuffer::GetNumTexCoords ( ) const
inline

◆ GetNumVertices()

uint32 FStaticMeshVertexBuffer::GetNumVertices ( ) const
inline

◆ GetOrCreateTangentsSRV()

FShaderResourceViewRHIRef FStaticMeshVertexBuffer::GetOrCreateTangentsSRV ( FRHICommandListBase RHICmdList) const

◆ GetOrCreateTexCoordsSRV()

FShaderResourceViewRHIRef FStaticMeshVertexBuffer::GetOrCreateTexCoordsSRV ( FRHICommandListBase RHICmdList) const

◆ GetResourceSize()

uint32 FStaticMeshVertexBuffer::GetResourceSize ( ) const
inline

◆ GetTangentData() [1/2]

void * FStaticMeshVertexBuffer::GetTangentData ( )
inline

◆ GetTangentData() [2/2]

const void * FStaticMeshVertexBuffer::GetTangentData ( ) const
inline

◆ GetTangentSize()

int FStaticMeshVertexBuffer::GetTangentSize ( ) const

◆ GetTangentsSRV()

FRHIShaderResourceView * FStaticMeshVertexBuffer::GetTangentsSRV ( ) const
inline

◆ GetTexCoordData() [1/2]

void * FStaticMeshVertexBuffer::GetTexCoordData ( )
inline

◆ GetTexCoordData() [2/2]

const void * FStaticMeshVertexBuffer::GetTexCoordData ( ) const
inline

◆ GetTexCoordSize()

int FStaticMeshVertexBuffer::GetTexCoordSize ( ) const

◆ GetTexCoordsSRV()

FRHIShaderResourceView * FStaticMeshVertexBuffer::GetTexCoordsSRV ( ) const
inline

◆ GetUseFullPrecisionUVs()

bool FStaticMeshVertexBuffer::GetUseFullPrecisionUVs ( ) const
inline

◆ GetUseHighPrecisionTangentBasis()

bool FStaticMeshVertexBuffer::GetUseHighPrecisionTangentBasis ( ) const
inline

◆ GetVertexUV()

FVector2f FStaticMeshVertexBuffer::GetVertexUV ( uint32  VertexIndex,
uint32  UVIndex 
) const
inline

Set the vertex UV values at the given index in the vertex buffer

Parameters
VertexIndex- index into the vertex buffer
UVIndex- [0,MAX_STATIC_TEXCOORDS] value to index into UVs array
2DUV values

◆ GetVertexUV_Typed()

template<EStaticMeshVertexUVType UVTypeT>
FVector2f FStaticMeshVertexBuffer::GetVertexUV_Typed ( uint32  VertexIndex,
uint32  UVIndex 
) const
inline

◆ Init() [1/6]

void FStaticMeshVertexBuffer::Init ( const FConstMeshBuildVertexView InVertices,
bool  bNeedsCPUAccess = true 
)
inline

Initializes the buffer with the given vertices.

Parameters
InVertices- The vertices to initialize the buffer with.
InNumTexCoords- The number of texture coordinate to store in the buffer.
bNeedsCPUAccess- Whether the vertex data needs to be accessed by the CPU after creation (default true)

◆ Init() [2/6]

void FStaticMeshVertexBuffer::Init ( const FConstMeshBuildVertexView InVertices,
const FStaticMeshVertexBufferFlags InInitFlags 
)

Initializes the buffer with the given vertex view.

Parameters
InVertices- The vertices to initialize the buffer with.
InNumTexCoords- The number of texture coordinate to store in the buffer.

◆ Init() [3/6]

void FStaticMeshVertexBuffer::Init ( const FStaticMeshVertexBuffer InVertexBuffer,
bool  bNeedsCPUAccess = true 
)

Initializes this vertex buffer with the contents of the given vertex buffer.

Parameters
InVertexBuffer- The vertex buffer to initialize from.
bNeedsCPUAccess- Whether the vertex data needs to be accessed by the CPU after creation (default true)

Initializes this vertex buffer with the contents of the given vertex buffer.

Parameters
InVertexBuffer- The vertex buffer to initialize from.

◆ Init() [4/6]

void FStaticMeshVertexBuffer::Init ( const TArray< FStaticMeshBuildVertex > &  InVertices,
uint32  InNumTexCoords,
bool  bNeedsCPUAccess = true 
)
inline

◆ Init() [5/6]

void FStaticMeshVertexBuffer::Init ( const TArray< FStaticMeshBuildVertex > &  InVertices,
uint32  InNumTexCoords,
const FStaticMeshVertexBufferFlags InInitFlags 
)

Initializes the buffer with the given vertices.

Parameters
InVertices- The vertices to initialize the buffer with.
InNumTexCoords- The number of texture coordinate to store in the buffer.
Flags- Options for Init ; FStaticMeshVertexBufferFlags can be default constructed for default options

Initializes the buffer with the given vertices.

Parameters
InVertices- The vertices to initialize the buffer with.
InNumTexCoords- The number of texture coordinate to store in the buffer.

◆ Init() [6/6]

void FStaticMeshVertexBuffer::Init ( uint32  InNumVertices,
uint32  InNumTexCoords,
bool  bNeedsCPUAccess = true 
)

◆ InitResource()

void FStaticMeshVertexBuffer::InitResource ( FRHICommandListBase RHICmdList)
overridevirtual

Initializes the resource. This is only called by the rendering thread.

Reimplemented from FRenderResource.

◆ InitRHI()

void FStaticMeshVertexBuffer::InitRHI ( FRHICommandListBase RHICmdList)
overridevirtual

Initializes the RHI resources used by this resource. Called when entering the state where both the resource and the RHI have been initialized. This is only called by the rendering thread.

Reimplemented from FRenderResource.

◆ InitRHIForStreaming()

void FStaticMeshVertexBuffer::InitRHIForStreaming ( FRHIBuffer IntermediateTangentsBuffer,
FRHIBuffer IntermediateTexCoordBuffer,
FRHIResourceReplaceBatcher Batcher 
)

Similar to Init/ReleaseRHI but only update existing SRV so references to the SRV stays valid

◆ IsValid()

bool FStaticMeshVertexBuffer::IsValid ( )
inline

◆ operator=()

void FStaticMeshVertexBuffer::operator= ( const FStaticMeshVertexBuffer Other)

Specialized assignment operator, only used when importing LOD's.

◆ ReleaseResource()

void FStaticMeshVertexBuffer::ReleaseResource ( )
overridevirtual

Prepares the resource for deletion. This is only called by the rendering thread.

Reimplemented from FRenderResource.

◆ ReleaseRHI()

void FStaticMeshVertexBuffer::ReleaseRHI ( )
overridevirtual

Releases the RHI resources used by this resource. Called when leaving the state where both the resource and the RHI have been initialized. This is only called by the rendering thread.

Reimplemented from FRenderResource.

◆ ReleaseRHIForStreaming()

void FStaticMeshVertexBuffer::ReleaseRHIForStreaming ( FRHIResourceReplaceBatcher Batcher)

◆ Serialize()

void FStaticMeshVertexBuffer::Serialize ( FArchive Ar,
bool  bNeedsCPUAccess 
)

Serializer

Parameters
ArArchive to serialize with
bNeedsCPUAccessWhether the elements need to be accessed by the CPU

◆ SerializeMetaData()

void FStaticMeshVertexBuffer::SerializeMetaData ( FArchive Ar)

◆ SetMetaData()

void FStaticMeshVertexBuffer::SetMetaData ( uint32  NumTexCoords,
uint32  NumVertices,
bool  bUseFullPrecisionUVs,
bool  bUseHighPrecisionTangentBasis 
)

◆ SetUseFullPrecisionUVs()

void FStaticMeshVertexBuffer::SetUseFullPrecisionUVs ( bool  UseFull)
inline

◆ SetUseHighPrecisionTangentBasis()

void FStaticMeshVertexBuffer::SetUseHighPrecisionTangentBasis ( bool  bUseHighPrecision)
inline

◆ SetVertexTangents()

void FStaticMeshVertexBuffer::SetVertexTangents ( uint32  VertexIndex,
FVector3f  X,
FVector3f  Y,
FVector3f  Z 
)
inline

◆ SetVertexUV()

void FStaticMeshVertexBuffer::SetVertexUV ( uint32  VertexIndex,
uint32  UVIndex,
const FVector2f Vec2D,
bool  bUseBackwardsCompatibleF16TruncUVs = false 
)
inline

Set the vertex UV values at the given index in the vertex buffer

Parameters
VertexIndex- index into the vertex buffer
UVIndex- [0,MAX_STATIC_TEXCOORDS] value to index into UVs array
Vec2D- UV values to set
bUseBackwardsCompatibleF16TruncUVs- whether backwards compatible Truncate mode is used for F32 to F16 conversion

◆ VertexTangentX()

FVector4f FStaticMeshVertexBuffer::VertexTangentX ( uint32  VertexIndex) const
inline

◆ VertexTangentX_Typed()

template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f FStaticMeshVertexBuffer::VertexTangentX_Typed ( uint32  VertexIndex) const
inline

◆ VertexTangentY()

FVector3f FStaticMeshVertexBuffer::VertexTangentY ( uint32  VertexIndex) const
inline

Calculate the binormal (TangentY) vector using the normal,tangent vectors

Parameters
VertexIndex- index into the vertex buffer
Returns
binormal (TangentY) vector

◆ VertexTangentY_Typed()

template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f FStaticMeshVertexBuffer::VertexTangentY_Typed ( uint32  VertexIndex) const
inline

◆ VertexTangentZ()

FVector4f FStaticMeshVertexBuffer::VertexTangentZ ( uint32  VertexIndex) const
inline

◆ VertexTangentZ_Typed()

template<EStaticMeshVertexTangentBasisType TangentBasisTypeT>
FVector4f FStaticMeshVertexBuffer::VertexTangentZ_Typed ( uint32  VertexIndex) const
inline

Friends And Related Symbol Documentation

◆ FStaticMeshVertexBuffer

FStaticMeshVertexBuffer::FStaticMeshVertexBuffer
friend

Member Data Documentation

◆ TangentsVertexBuffer

FStaticMeshVertexBuffer::FTangentsVertexBuffer FStaticMeshVertexBuffer::TangentsVertexBuffer

◆ TexCoordVertexBuffer

FStaticMeshVertexBuffer::FTexcoordVertexBuffer FStaticMeshVertexBuffer::TexCoordVertexBuffer

The documentation for this class was generated from the following files: