220 for (
int32 k = 0; k < 2; ++k)
356 template<
typename TriangleEnumerable>
361 const FDynamicMeshUVOverlay* UVOverlay,
362 const FDynamicMeshNormalOverlay* NormalOverlay,
363 const FDynamicMeshColorOverlay* ColorOverlay,
366 bool bParallel =
false)
379 template<
typename TriangleEnumerable,
typename UVOverlayListAllocator>
385 const FDynamicMeshNormalOverlay* NormalOverlay,
386 const FDynamicMeshColorOverlay* ColorOverlay,
389 bool bParallel =
false);
416 template<
typename TriangleEnumerable>
420 const FDynamicMeshNormalOverlay* NormalOverlay,
421 const FDynamicMeshColorOverlay* ColorOverlay,
423 bool bUpdatePositions =
true,
424 bool bUpdateNormals =
false,
432 template<
typename TriangleEnumerable,
typename UVOverlayListAllocator>
503template<
typename TriangleEnumerable,
typename UVOverlayListAllocator>
509 const FDynamicMeshNormalOverlay* NormalOverlay,
510 const FDynamicMeshColorOverlay* ColorOverlay,
517 if (NumTriangles == 0)
524 const int NumVertices = NumTriangles * 3;
530 RenderBuffers->StaticMeshVertexBuffer.Init(NumVertices, NumTexCoords);
532 RenderBuffers->IndexBuffer.Indices.AddUninitialized(NumTriangles * 3);
551 for (
int idx = 0,
IdxMax = 3 * NumTriangles; idx <
IdxMax; ++idx)
560 int32 TriangleID = TriangleArray[idx];
561 FIndex3i Tri = Mesh->GetTriangle(TriangleID);
564 FIndex3i TriNormal = (NormalOverlay != nullptr) ? NormalOverlay->GetTriangle(TriangleID) : FIndex3i::Zero();
565 FIndex3i TriColor = (ColorOverlay != nullptr) ? ColorOverlay->GetTriangle(TriangleID) : FIndex3i::Zero();
567 FColor UniformTriColor = ConstantVertexColor;
568 if (bUsePerTriangleColor && PerTriangleColorFunc != nullptr)
570 UniformTriColor = PerTriangleColorFunc(Mesh, TriangleID);
575 for (
int j = 0; j < 3; ++j)
586 Normal = (NormalOverlay !=
nullptr &&
TriNormal[j] != FDynamicMesh3::InvalidID) ?
587 NormalOverlay->GetElement(
TriNormal[j]) :
Mesh->GetVertexNormal(Tri[j]);
604 for (
int32 k = 0; k < NumTexCoords; ++k)
608 for (
int j = 0; j < 3; ++j)
624 if (bUseSecondaryTriBuffers)
636template<
typename TriangleEnumerable>
640 const FDynamicMeshNormalOverlay* NormalOverlay,
641 const FDynamicMeshColorOverlay* ColorOverlay,
643 bool bUpdatePositions,
654 int NumVertices = NumTriangles * 3;
655 if ((bUpdatePositions &&
ensure(
RenderBuffers->PositionVertexBuffer.GetNumVertices() == NumVertices) ==
false)
656 || (bUpdateNormals &&
ensure(
RenderBuffers->StaticMeshVertexBuffer.GetNumVertices() == NumVertices) ==
false)
678 for (
int j = 0; j < 3; ++j)
680 if (bUpdatePositions)
695 Normal = (NormalOverlay !=
nullptr &&
TriNormal[j] != FDynamicMesh3::InvalidID) ?
696 NormalOverlay->GetElement(
TriNormal[j]) :
Mesh->GetVertexNormal(Tri[j]);
716template<
typename TriangleEnumerable,
typename UVOverlayListAllocator>
728 int NumVertices = NumTriangles * 3;
729 if (
ensure(
RenderBuffers->StaticMeshVertexBuffer.GetNumVertices() == NumVertices) ==
false)
735 int NumTexCoords =
RenderBuffers->StaticMeshVertexBuffer.GetNumTexCoords();
748 for (
int32 k = 0; k < NumTexCoords; ++k)
753 for (
int j = 0; j < 3; ++j)
755 for (
int32 k = 0; k < NumTexCoords; ++k)
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define checkSlow(expr)
Definition AssertionMacros.h:332
#define ensure( InExpression)
Definition AssertionMacros.h:464
EDynamicMeshVertexColorTransformMode
Definition BaseDynamicMeshComponent.h:110
void ParallelFor(int32 Num, TFunctionRef< void(int32)> Body, bool bForceSingleThread, bool bPumpRenderingThread=false)
Definition ParallelFor.h:481
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
UE::FPlatformRecursiveMutex FCriticalSection
Definition CriticalSection.h:53
constexpr void EnumAddFlags(Enum &Flags, Enum FlagsToAdd)
Definition EnumClassFlags.h:91
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
const bool
Definition NetworkReplayStreaming.h:178
@ RTGT_Triangles
Definition RHIResources.h:3439
bool IsRayTracingEnabled()
Definition RenderUtils.cpp:1775
UE_INTRINSIC_CAST UE_REWRITE constexpr std::remove_reference_t< T > && MoveTemp(T &&Obj) noexcept
Definition UnrealTemplate.h:520
Definition ColorVertexBuffer.h:16
Definition MeshRenderBufferSet.h:477
GEOMETRYFRAMEWORK_API void Convert(class UDynamicMeshComponent &DynamicMeshComponent, FMeshRenderBufferSet &MeshRenderBufferSet, bool bUseComponentSettings=true)
------------— ToMeshRenderBufferSet ---------------— ///
Definition MeshRenderBufferSet.cpp:217
TUniqueFunction< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> MakeTangentsFunc(class UDynamicMeshComponent &DynamicMeshCompnent, bool bSkipAutoCompute=false)
Definition MeshRenderBufferSet.cpp:257
FMeshRenderBufferSetConversionUtil MeshRenderBufferSetConverter
Definition MeshRenderBufferSet.h:480
Definition DynamicMeshBuilder.h:228
TArray< uint32 > Indices
Definition DynamicMeshBuilder.h:233
EBufferUsageFlags UsageFlags
Definition DynamicMeshBuilder.h:234
Definition LocalVertexFactory.h:51
Definition MeshRenderBufferSet.h:39
FDynamicMeshIndexBuffer32 IndexBuffer
Definition MeshRenderBufferSet.h:52
FStaticMeshVertexBuffer StaticMeshVertexBuffer
Definition MeshRenderBufferSet.h:45
void InvalidateRayTracingData()
Definition MeshRenderBufferSet.h:186
FMeshRenderBufferSet(ERHIFeatureLevel::Type FeatureLevelType)
Definition MeshRenderBufferSet.h:97
FDynamicMeshIndexBuffer32 SecondaryIndexBuffer
Definition MeshRenderBufferSet.h:74
bool bEnableSecondaryIndexBuffer
Definition MeshRenderBufferSet.h:69
FPositionVertexBuffer PositionVertexBuffer
Definition MeshRenderBufferSet.h:47
FCriticalSection BuffersLock
Definition MeshRenderBufferSet.h:94
UMaterialInterface * Material
Definition MeshRenderBufferSet.h:58
FColorVertexBuffer ColorVertexBuffer
Definition MeshRenderBufferSet.h:49
TOptional< TArray< int > > Triangles
Definition MeshRenderBufferSet.h:64
GEOMETRYFRAMEWORK_API void UploadVertexUpdate(bool bPositions, bool bMeshAttribs, bool bColors)
Definition MeshRenderBufferSet.cpp:50
virtual ~FMeshRenderBufferSet()
Definition MeshRenderBufferSet.h:109
FLocalVertexFactory VertexFactory
Definition MeshRenderBufferSet.h:55
void UploadIndexBufferUpdate()
Definition MeshRenderBufferSet.h:150
void UpdateRaytracingGeometryIfEnabled()
Definition MeshRenderBufferSet.h:212
int TriangleCount
Definition MeshRenderBufferSet.h:42
void InitOrUpdateResource(FRHICommandListBase &RHICmdList, FRenderResource *Resource)
Definition MeshRenderBufferSet.h:256
static void DestroyRenderBufferSet(FMeshRenderBufferSet *BufferSet)
Definition MeshRenderBufferSet.h:275
GEOMETRYFRAMEWORK_API void TransferVertexUpdateToGPU(FRHICommandListBase &RHICmdList, bool bPositions, bool bNormals, bool bTexCoords, bool bColors)
Definition MeshRenderBufferSet.cpp:91
GEOMETRYFRAMEWORK_API void Upload()
------------— FMeshRenderBuffferSet ---------------— ///
Definition MeshRenderBufferSet.cpp:8
bool bEnableRaytracing
Definition MeshRenderBufferSet.h:79
void ValidateRayTracingData()
Definition MeshRenderBufferSet.h:196
Definition PositionVertexBuffer.h:27
uint32 GetNumVertices() const
Definition PositionVertexBuffer.h:100
Definition RHICommandList.h:455
Definition RayTracingGeometry.h:31
Definition RenderResource.h:37
virtual RENDERCORE_API void ReleaseResource()
Definition RenderResource.cpp:206
bool IsInitialized() const
Definition RenderResource.h:114
RENDERCORE_API void UpdateRHI(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:225
virtual RENDERCORE_API void InitResource(FRHICommandListBase &RHICmdList)
Definition RenderResource.cpp:178
Definition StaticMeshVertexBuffer.h:150
void SetUseHighPrecisionTangentBasis(bool bUseHighPrecision)
Definition StaticMeshVertexBuffer.h:431
virtual ENGINE_API void ReleaseResource() override
Definition StaticMeshVertexBuffer.cpp:356
void SetUseFullPrecisionUVs(bool UseFull)
Definition StaticMeshVertexBuffer.h:421
FBufferRHIRef VertexBufferRHI
Definition RenderResource.h:489
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void SetNum(SizeType NewNum, EAllowShrinking AllowShrinking=UE::Core::Private::AllowShrinkingByDefault< AllocatorType >())
Definition Array.h:2308
UE_NODEBUG UE_FORCEINLINE_HINT SizeType Add(ElementType &&Item)
Definition Array.h:2696
UE_FORCEINLINE_HINT void Reserve(SizeType Number)
Definition Array.h:3016
Definition AssetRegistryState.h:50
Definition AndroidPlatformMisc.h:14
Definition FunctionFwd.h:19
Definition DynamicMesh3.h:108
Definition DynamicMeshAttributeSet.h:84
Definition DynamicMeshTriangleAttribute.h:604
Definition DynamicMeshOverlay.h:714
Definition MaterialInterface.h:296
Type
Definition RHIFeatureLevel.h:20
static CORE_API const FColor White
Definition Color.h:749
FColor ToFColor(const bool bSRGB) const
Definition Color.h:810
Definition MeshRenderBufferSet.h:298
bool bIgnoreVertexColors
Definition MeshRenderBufferSet.h:308
bool bUseSecondaryTriBuffers
Definition MeshRenderBufferSet.h:344
bool bUsePerTriangleNormals
Definition MeshRenderBufferSet.h:339
FColor ConstantVertexColor
Definition MeshRenderBufferSet.h:303
TFunction< FColor(const FDynamicMesh3 *, int)> PerTriangleColorFunc
Definition MeshRenderBufferSet.h:318
TUniqueFunction< void(FVector4f &)> VertexColorRemappingFunc
Definition MeshRenderBufferSet.h:328
bool bApplyVertexColorRemapping
Definition MeshRenderBufferSet.h:323
void UpdateVertexBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bUpdatePositions=true, bool bUpdateNormals=false, bool bUpdateColors=false)
Definition MeshRenderBufferSet.h:637
FColor GetOverlayColorAsFColor(const FDynamicMeshColorOverlay *ColorOverlay, int32 ElementID)
Definition MeshRenderBufferSet.h:442
void GEOMETRYFRAMEWORK_API UpdateSecondaryTriangleBuffer(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, bool bDuplicate)
------------— FMeshRenderBufferSetConversionUtil ---------------— ///
Definition MeshRenderBufferSet.cpp:136
void UpdateVertexUVBufferFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int32 NumTriangles, const TriangleEnumerable &Enumerable, const TArray< const FDynamicMeshUVOverlay *, UVOverlayListAllocator > &UVOverlays)
Definition MeshRenderBufferSet.h:717
EDynamicMeshVertexColorTransformMode ColorSpaceTransformMode
Definition MeshRenderBufferSet.h:334
void GEOMETRYFRAMEWORK_API RecomputeRenderBufferTriangleIndexSets(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh)
Definition MeshRenderBufferSet.cpp:174
TUniqueFunction< bool(const FDynamicMesh3 *, int32)> SecondaryTriFilterFunc
Definition MeshRenderBufferSet.h:349
void InitializeBuffersFromOverlays(FMeshRenderBufferSet *RenderBuffers, const FDynamicMesh3 *Mesh, int NumTriangles, const TriangleEnumerable &Enumerable, const FDynamicMeshUVOverlay *UVOverlay, const FDynamicMeshNormalOverlay *NormalOverlay, const FDynamicMeshColorOverlay *ColorOverlay, TFunctionRef< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> TangentsFunc, bool bTrackTriangles=false, bool bParallel=false)
Definition MeshRenderBufferSet.h:357
bool bUsePerTriangleColor
Definition MeshRenderBufferSet.h:313
Definition RHIResources.h:3496
FBufferRHIRef IndexBuffer
Definition RHIResources.h:3498
Definition RHIResources.h:3463
FBufferRHIRef VertexBuffer
Definition RHIResources.h:3465
Definition Optional.h:131
Definition IndexTypes.h:27
Definition IndexTypes.h:158
static constexpr FIndex3i Zero()
Definition IndexTypes.h:177
static constexpr FIndex3i Invalid()
Definition IndexTypes.h:185
static TVector2< float > Zero()
Definition Vector2D.h:79