33 bool bIsSingleBuffer =
false;
42 , MaterialRelevance(
Component->GetMaterialRelevance(
GetScene().GetShaderPlatform()))
60 if (NumMaterials == 0)
62 RenderBufferSets.
SetNum(1);
68 RenderBufferSets.
SetNum(NumMaterials);
69 for (
int32 k = 0; k < NumMaterials; ++k)
78 if (
Mesh->HasAttributes() &&
Mesh->Attributes()->HasMaterialID() && NumMaterials > 1)
80 bIsSingleBuffer =
false;
85 bIsSingleBuffer =
true;
99 if (
TangentsType == EDynamicMeshComponentTangentsMode::ExternallyProvided)
138 int32 NumSets = Decomposition->Num();
139 RenderBufferSets.
SetNum(NumSets);
140 for (
int32 k = 0; k < NumSets; ++k)
143 RenderBufferSets[k]->Material = Decomposition->GetGroup(k).Material;
144 if (RenderBufferSets[k]->
Material ==
nullptr)
150 bIsSingleBuffer =
false;
162 const FDynamicMeshNormalOverlay* NormalOverlay = Attributes->
PrimaryNormals();
163 const FDynamicMeshColorOverlay* ColorOverlay = Attributes->
PrimaryColors();
171 if (Triangles.
Num() > 0)
173 FMeshRenderBufferSet* RenderBuffers = RenderBufferSets[SetIndex];
174 RenderBuffers->Triangles = Triangles;
175 InitializeBuffersFromOverlays(RenderBuffers, Mesh,
176 Triangles.Num(), Triangles,
177 UVOverlays, NormalOverlay, ColorOverlay, TangentsFunc);
179 ENQUEUE_RENDER_COMMAND(FDynamicMeshSceneProxyInitializeFromDecomposition)(
180 [RenderBuffers](FRHICommandListImmediate& RHICmdList)
182 RenderBuffers->Upload();
204 const FDynamicMeshNormalOverlay* NormalOverlay =
nullptr;
205 const FDynamicMeshColorOverlay* ColorOverlay =
nullptr;
206 if (
Mesh->HasAttributes())
220 const bool bParallel =
true;
222 Mesh->TriangleCount(),
Mesh->TriangleIndicesItr(),
241 if (
ensure(
Mesh->HasAttributes() &&
Mesh->Attributes()->HasMaterialID()) ==
false)
249 const FDynamicMeshMaterialAttribute* MaterialID = Attributes->
GetMaterialID();
250 const FDynamicMeshNormalOverlay* NormalOverlay =
Mesh->Attributes()->PrimaryNormals();
251 const FDynamicMeshColorOverlay* ColorOverlay =
Mesh->Attributes()->PrimaryColors();
265 Counts.
SetNum(NumMaterials);
266 for (
int k = 0; k < NumMaterials; ++k)
272 if (!Mesh->IsTriangle(tid))
280 Counts[
MatIdx].Increment();
288 MaxCount = FMath::Max(
Count.GetValue(), MaxCount);
295 for (
int k = 0; k < NumMaterials; ++k)
302 for (
int tid :
Mesh->TriangleIndicesItr())
313 const bool bParallel =
true;
315 Triangles.
Num(), Triangles,
339 for (
int TriangleID :
BufferSet->Triangles.GetValue())
341 if (!
Mesh->IsTriangle(TriangleID))
348 int NumVertices = NumTriangles * 3;
349 if (
BufferSet->PositionVertexBuffer.GetNumVertices() != NumVertices ||
350 BufferSet->StaticMeshVertexBuffer.GetNumVertices() != NumVertices ||
351 BufferSet->ColorVertexBuffer.GetNumVertices() != NumVertices)
361 if (
ensure(RenderBufferSets.Num() == 1))
370 int NumTriangles =
Mesh->TriangleCount();
385 int NumTriangles =
BufferSet->Triangles->Num();
411 FDynamicMeshNormalOverlay* NormalOverlay =
nullptr;
414 NormalOverlay =
Mesh->Attributes()->PrimaryNormals();
426 FDynamicMeshColorOverlay* ColorOverlay =
nullptr;
429 ColorOverlay =
Mesh->Attributes()->PrimaryColors();
437 if (
ensure(RenderBufferSets.Num() == 1))
444 Mesh->TriangleCount(),
Mesh->TriangleIndicesItr(),
466 FMeshRenderBufferSet* Buffers = RenderBufferSets[i];
467 FScopeLock BuffersLock(&Buffers->BuffersLock);
468 if (Buffers->TriangleCount == 0)
474 if (bPositions || bNormals || bColors)
476 UpdateVertexBuffersFromOverlays(Buffers, Mesh,
477 Buffers->Triangles->Num(), Buffers->Triangles.GetValue(),
478 NormalOverlay, ColorOverlay, TangentsFunc,
479 bPositions, bNormals, bColors);
518 const FDynamicMeshNormalOverlay* NormalOverlay =
nullptr;
521 NormalOverlay =
Mesh->Attributes()->PrimaryNormals();
533 const FDynamicMeshColorOverlay* ColorOverlay =
nullptr;
536 ColorOverlay =
Mesh->Attributes()->PrimaryColors();
544 int32 BufferIndex = WhichBuffers[idx];
545 if ( RenderBufferSets.IsValidIndex(BufferIndex) == false)
551 if (
Buffers->TriangleCount == 0)
594 FMeshRenderBufferSet* Buffers = RenderBufferSets[i];
596 FScopeLock BuffersLock(&Buffers->BuffersLock);
598 if (Buffers->TriangleCount > 0)
600 RecomputeRenderBufferTriangleIndexSets(Buffers, Mesh);
606 Buffers->UploadIndexBufferUpdate();
626 int32 BufferIndex = WhichBuffers[i];
627 if (RenderBufferSets.IsValidIndex(BufferIndex) == false)
634 if (
Buffers->TriangleCount > 0)
636 RecomputeRenderBufferTriangleIndexSets(
Buffers,
Mesh);
642 Buffers->UploadIndexBufferUpdate();
657 Result.bDrawRelevance = IsShown(View);
658 Result.bShadowRelevance = IsShadowCast(View);
665 Result.bEditorVisualizeLevelInstanceRelevance = IsEditingLevelInstanceChild();
666 Result.bEditorStaticSelectionRelevance = (IsSelected() || IsHovered());
670 Result.bRenderInMainPass = ShouldRenderInMainPass();
672 Result.bTranslucentSelfShadow = bCastVolumetricTranslucentShadow;
673 Result.bRenderCustomDepth = ShouldRenderCustomDepth();
675 MaterialRelevance.SetPrimitiveViewRelevance(Result);
676 Result.bVelocityRelevance = DrawsVelocity() && Result.bOpaque && Result.bRenderInMainPass;
686 MaterialRelevance = ParentComponent->GetMaterialRelevance(GetScene().GetShaderPlatform());
697 return !MaterialRelevance.bDisableDepthTest;
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define ensure( InExpression)
Definition AssertionMacros.h:464
EDynamicMeshComponentTangentsMode
Definition BaseDynamicMeshComponent.h:48
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
#define TRACE_CPUPROFILER_EVENT_SCOPE(Name)
Definition CpuProfilerTrace.h:528
uint8 GetDefaultLightingChannelMask()
Definition EngineTypes.h:592
void FlushRenderingCommands()
Definition RenderingThread.cpp:1272
#define ENQUEUE_RENDER_COMMAND(Type)
Definition RenderingThread.h:1167
if(Failed) console_printf("Failed.\n")
Definition BaseDynamicMeshSceneProxy.h:39
virtual GEOMETRYFRAMEWORK_API void UpdatedReferencedMaterials()
Definition BaseDynamicMeshSceneProxy.cpp:126
virtual GEOMETRYFRAMEWORK_API FMeshRenderBufferSet * AllocateNewRenderBufferSet()
Definition BaseDynamicMeshSceneProxy.cpp:88
virtual GEOMETRYFRAMEWORK_API int32 GetNumMaterials() const
Definition BaseDynamicMeshSceneProxy.cpp:115
virtual GEOMETRYFRAMEWORK_API UMaterialInterface * GetMaterial(int32 k) const
Definition BaseDynamicMeshSceneProxy.cpp:120
void UpdateLumenCardsFromBounds()
Definition BaseDynamicMeshSceneProxy.cpp:831
Definition DynamicMeshSceneProxy.h:23
FDynamicMeshSceneProxy(UDynamicMeshComponent *Component)
Definition DynamicMeshSceneProxy.h:40
TUniqueFunction< void(int, int, int, const FVector3f &, FVector3f &, FVector3f &)> MakeTangentsFunc(bool bSkipAutoCompute=false)
Definition DynamicMeshSceneProxy.h:96
void InitializeFromDecomposition(TUniquePtr< FMeshRenderDecomposition > &Decomposition)
Definition DynamicMeshSceneProxy.h:135
bool RenderMeshLayoutMatchesRenderBuffers() const
Definition DynamicMeshSceneProxy.h:331
void FastUpdateVertices(bool bPositions, bool bNormals, bool bColors, bool bUVs)
Definition DynamicMeshSceneProxy.h:403
virtual void UpdatedReferencedMaterials() override
Definition DynamicMeshSceneProxy.h:681
virtual void GetLightRelevance(const FLightSceneProxy *LightSceneProxy, bool &bDynamic, bool &bRelevant, bool &bLightMapped, bool &bShadowMapped) const override
Definition DynamicMeshSceneProxy.h:690
void InitializeByMaterial(TArray< FMeshRenderBufferSet * > &BufferSets)
Definition DynamicMeshSceneProxy.h:238
virtual bool CanBeOccluded() const override
Definition DynamicMeshSceneProxy.h:695
void InitializeSingleBufferSet(FMeshRenderBufferSet *RenderBuffers)
Definition DynamicMeshSceneProxy.h:198
virtual void GetActiveRenderBufferSets(TArray< FMeshRenderBufferSet * > &Buffers) const override
Definition DynamicMeshSceneProxy.h:48
void FastUpdateVertices(const TArray< int32 > &WhichBuffers, bool bPositions, bool bNormals, bool bColors, bool bUVs)
Definition DynamicMeshSceneProxy.h:502
SIZE_T GetTypeHash() const override
Definition DynamicMeshSceneProxy.h:704
uint32 GetAllocatedSize(void) const
Definition DynamicMeshSceneProxy.h:702
void Initialize()
Definition DynamicMeshSceneProxy.h:55
virtual FPrimitiveViewRelevance GetViewRelevance(const FSceneView *View) const override
Definition DynamicMeshSceneProxy.h:653
void FastUpdateAllIndexBuffers()
Definition DynamicMeshSceneProxy.h:585
UDynamicMeshComponent * ParentComponent
Definition DynamicMeshSceneProxy.h:37
virtual uint32 GetMemoryFootprint(void) const override
Definition DynamicMeshSceneProxy.h:700
void FastUpdateIndexBuffers(const TArray< int32 > &WhichBuffers)
Definition DynamicMeshSceneProxy.h:617
Definition LightSceneProxy.h:43
Definition MeshRenderBufferSet.h:39
SIZE_T GetAllocatedSize(void) const
Definition PrimitiveSceneProxy.h:684
FSceneInterface & GetScene() const
Definition PrimitiveSceneProxy.h:733
virtual void GetLightRelevance(const FLightSceneProxy *LightSceneProxy, bool &bDynamic, bool &bRelevant, bool &bLightMapped, bool &bShadowMapped) const
Definition PrimitiveSceneProxy.h:550
Definition SceneView.h:1425
Definition ScopeLock.h:141
Definition ThreadSafeCounter.h:14
UE_REWRITE SizeType Num() const
Definition Array.h:1144
void Reset(SizeType NewSize=0)
Definition Array.h:2246
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 FunctionFwd.h:19
Definition UniquePtr.h:107
Definition DynamicMesh3.h:108
Definition DynamicMeshAttributeSet.h:84
FDynamicMeshNormalOverlay * PrimaryNormals()
Definition DynamicMeshAttributeSet.h:250
FDynamicMeshUVOverlay * GetUVLayer(int Index)
Definition DynamicMeshAttributeSet.h:178
virtual int NumUVLayers() const
Definition DynamicMeshAttributeSet.h:169
FDynamicMeshMaterialAttribute * GetMaterialID()
Definition DynamicMeshAttributeSet.h:364
FDynamicMeshColorOverlay * PrimaryColors()
Definition DynamicMeshAttributeSet.h:291
Definition MeshTangents.h:25
Definition MeshTangents.h:76
void GetTriangleVertexTangentVectors(int32 TriangleID, int32 TriVertexIndex, OtherVectorType &TangentOut, OtherVectorType &BitangentOut) const
Definition MeshTangents.h:226
static ENGINE_API UMaterial * GetDefaultMaterial(EMaterialDomain Domain)
Definition Material.cpp:1071
T::FDataType GetValue(const UBlackboardComponent &Blackboard, const FName &Name, FBlackboard::FKey &InOutCachedKey, const typename T::FDataType &DefaultValue)
Definition ValueOrBBKey.h:51
void MakePerpVectors(const TVector< RealType > &Normal, TVector< RealType > &OutPerp1, TVector< RealType > &OutPerp2)
Definition VectorUtil.h:211
Definition MaterialRelevance.h:13
Definition MeshRenderDecomposition.h:32
Definition PrimitiveViewRelevance.h:14
Definition IndexTypes.h:27
Definition IndexTypes.h:158