@@ -18,35 +18,27 @@ ARealtimeMeshStressTestActor::ARealtimeMeshStressTestActor()
18
18
19
19
static const auto SectionGroupKey = FRealtimeMeshSectionGroupKey::Create(0 , FName(" TestTripleBox" ));
20
20
21
+ static const auto Section0Key = FRealtimeMeshSectionKey::Create(SectionGroupKey, FName(" Section0" ));
22
+ static const auto Section1Key = FRealtimeMeshSectionKey::Create(SectionGroupKey, FName(" Section1" ));
23
+ static const auto Section2Key = FRealtimeMeshSectionKey::Create(SectionGroupKey, FName(" Section2" ));
24
+
21
25
void ARealtimeMeshStressTestActor::OnGenerateMesh_Implementation ()
22
26
{
23
27
Super::OnGenerateMesh_Implementation ();
24
28
25
29
// Initialize the simple mesh
26
30
URealtimeMeshSimple* RealtimeMesh = GetRealtimeMeshComponent ()->InitializeRealtimeMesh <URealtimeMeshSimple>();
27
-
31
+
28
32
// Setup the two material slots
29
33
RealtimeMesh->SetupMaterialSlot (0 , " PrimaryMaterial" , UMaterial::GetDefaultMaterial (EMaterialDomain::MD_Surface));
30
34
RealtimeMesh->SetupMaterialSlot (1 , " SecondaryMaterial" , UMaterial::GetDefaultMaterial (EMaterialDomain::MD_Surface));
31
35
32
- FRealtimeMeshStreamSet StreamSet;
33
- // Here we're using the builder just to initialize the stream set
34
- TRealtimeMeshBuilderLocal<uint16, FPackedNormal, FVector2DHalf, 2 > Builder (StreamSet);
35
- Builder.EnableTangents ();
36
- Builder.EnableTexCoords ();
37
- Builder.EnableColors ();
38
- Builder.EnablePolyGroups ();
39
-
40
- URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (100 .0f , 100 .0f , 200 .0f ), FTransform3f::Identity, 2 , FColor::White);
41
- URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (200 .0f , 100 .0f , 100 .0f ), FTransform3f::Identity, 1 , FColor::White);
42
- URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (100 .0f , 200 .0f , 100 .0f ), FTransform3f::Identity, 3 , FColor::White);
43
-
44
- RealtimeMesh->CreateSectionGroup (SectionGroupKey, StreamSet);
36
+ // Setup empty structure
37
+ RealtimeMesh->CreateSectionGroup (SectionGroupKey, false );
38
+ RealtimeMesh->CreateSection (Section0Key, FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Dynamic, 0 ), FRealtimeMeshStreamRange (), false );
39
+ RealtimeMesh->CreateSection (Section1Key, FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Dynamic, 1 ), FRealtimeMeshStreamRange (), false );
40
+ RealtimeMesh->CreateSection (Section2Key, FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Dynamic, 2 ), FRealtimeMeshStreamRange (), false );
45
41
46
- RealtimeMesh->UpdateSectionConfig (FRealtimeMeshSectionKey::CreateForPolyGroup (SectionGroupKey, 1 ), FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Static, 0 ));
47
- RealtimeMesh->UpdateSectionConfig (FRealtimeMeshSectionKey::CreateForPolyGroup (SectionGroupKey, 2 ), FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Dynamic, 0 ));
48
- RealtimeMesh->UpdateSectionConfig (FRealtimeMeshSectionKey::CreateForPolyGroup (SectionGroupKey, 3 ), FRealtimeMeshSectionConfig (ERealtimeMeshSectionDrawType::Static, 1 ));
49
-
50
42
}
51
43
52
44
void ARealtimeMeshStressTestActor::TickActor (float DeltaTime, ELevelTick TickType, FActorTickFunction& ThisTickFunction)
@@ -63,6 +55,7 @@ void ARealtimeMeshStressTestActor::TickActor(float DeltaTime, ELevelTick TickTyp
63
55
64
56
TPromise<TSharedPtr<TStrongObjectPtr<URealtimeMeshSimple>>> Promise;
65
57
PendingGeneration = Promise.GetFuture ();
58
+
66
59
AsyncTask (ENamedThreads::AnyThread, [RealtimeMeshRef, Promise = MoveTemp (Promise)]() mutable
67
60
{
68
61
FRealtimeMeshStreamSet StreamSet;
@@ -71,18 +64,38 @@ void ARealtimeMeshStressTestActor::TickActor(float DeltaTime, ELevelTick TickTyp
71
64
Builder.EnableTangents ();
72
65
Builder.EnableTexCoords ();
73
66
Builder.EnableColors ();
74
- Builder.EnablePolyGroups ();
75
67
76
68
const float Scale = (FMath::Cos (FPlatformTime::Seconds () * PI) * 0 .25f ) + 0 .5f ;
77
69
const FTransform3f Transform = FTransform3f (FQuat4f::Identity, FVector3f (0 , 0 , 0 ), FVector3f (Scale, Scale, Scale));
78
70
71
+
72
+ int32 Section0StartVertex = Builder.NumVertices ();
73
+ int32 Section0StartTriangle = Builder.NumTriangles ();
79
74
URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (100 .0f , 100 .0f , 200 .0f ), Transform, 2 , FColor::White);
75
+
76
+ int32 Section1StartVertex = Builder.NumVertices ();
77
+ int32 Section1StartTriangle = Builder.NumTriangles ();
80
78
URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (200 .0f , 100 .0f , 100 .0f ), Transform, 1 , FColor::White);
79
+
80
+ int32 Section2StartVertex = Builder.NumVertices ();
81
+ int32 Section2StartTriangle = Builder.NumTriangles ();
81
82
URealtimeMeshBasicShapeTools::AppendBoxMesh (StreamSet, FVector3f (100 .0f , 200 .0f , 100 .0f ), Transform, 3 , FColor::White);
82
-
83
- RealtimeMeshRef.Get ()->UpdateSectionGroup (SectionGroupKey, StreamSet);
84
- RealtimeMeshRef.Get ()->SetupMaterialSlot (0 , " PrimaryMaterial" , UMaterial::GetDefaultMaterial (EMaterialDomain::MD_Surface));
85
- RealtimeMeshRef.Get ()->SetupMaterialSlot (1 , " SecondaryMaterial" , UMaterial::GetDefaultMaterial (EMaterialDomain::MD_Surface));
83
+
84
+ int32 FinalNumVertices = Builder.NumVertices ();
85
+ int32 FinalNumTriangles = Builder.NumTriangles ();
86
+
87
+ FRealtimeMeshStreamRange Section0Range (Section0StartVertex, Section1StartVertex, Section0StartTriangle * 3 , Section1StartTriangle * 3 );
88
+ FRealtimeMeshStreamRange Section1Range (Section1StartVertex, Section2StartVertex, Section1StartTriangle * 3 , Section2StartTriangle * 3 );
89
+ FRealtimeMeshStreamRange Section2Range (Section2StartVertex, FinalNumVertices, Section2StartTriangle * 3 , FinalNumTriangles * 3 );
90
+
91
+
92
+ RealtimeMeshRef.Get ()->UpdateSectionGroup (SectionGroupKey, MoveTemp (StreamSet));
93
+
94
+ // Update the ranges for all the sections.
95
+ RealtimeMeshRef.Get ()->UpdateSectionRange (Section0Key, Section0Range);
96
+ RealtimeMeshRef.Get ()->UpdateSectionRange (Section1Key, Section1Range);
97
+ RealtimeMeshRef.Get ()->UpdateSectionRange (Section2Key, Section2Range);
98
+
86
99
Promise.EmplaceValue (RealtimeMeshRef);
87
100
});
88
101
0 commit comments