Skip to content

Commit 5171ab1

Browse files
committed
Updating stress test actor to show how to use multiple sections without using polygroups.
1 parent 0665464 commit 5171ab1

File tree

1 file changed

+36
-23
lines changed

1 file changed

+36
-23
lines changed

Source/RealtimeMeshTests/Private/FunctionalTests/RealtimeMeshStressTestActor.cpp

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,27 @@ ARealtimeMeshStressTestActor::ARealtimeMeshStressTestActor()
1818

1919
static const auto SectionGroupKey = FRealtimeMeshSectionGroupKey::Create(0, FName("TestTripleBox"));
2020

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+
2125
void ARealtimeMeshStressTestActor::OnGenerateMesh_Implementation()
2226
{
2327
Super::OnGenerateMesh_Implementation();
2428

2529
// Initialize the simple mesh
2630
URealtimeMeshSimple* RealtimeMesh = GetRealtimeMeshComponent()->InitializeRealtimeMesh<URealtimeMeshSimple>();
27-
31+
2832
// Setup the two material slots
2933
RealtimeMesh->SetupMaterialSlot(0, "PrimaryMaterial", UMaterial::GetDefaultMaterial(EMaterialDomain::MD_Surface));
3034
RealtimeMesh->SetupMaterialSlot(1, "SecondaryMaterial", UMaterial::GetDefaultMaterial(EMaterialDomain::MD_Surface));
3135

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);
4541

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-
5042
}
5143

5244
void ARealtimeMeshStressTestActor::TickActor(float DeltaTime, ELevelTick TickType, FActorTickFunction& ThisTickFunction)
@@ -63,6 +55,7 @@ void ARealtimeMeshStressTestActor::TickActor(float DeltaTime, ELevelTick TickTyp
6355

6456
TPromise<TSharedPtr<TStrongObjectPtr<URealtimeMeshSimple>>> Promise;
6557
PendingGeneration = Promise.GetFuture();
58+
6659
AsyncTask(ENamedThreads::AnyThread, [RealtimeMeshRef, Promise = MoveTemp(Promise)]() mutable
6760
{
6861
FRealtimeMeshStreamSet StreamSet;
@@ -71,18 +64,38 @@ void ARealtimeMeshStressTestActor::TickActor(float DeltaTime, ELevelTick TickTyp
7164
Builder.EnableTangents();
7265
Builder.EnableTexCoords();
7366
Builder.EnableColors();
74-
Builder.EnablePolyGroups();
7567

7668
const float Scale = (FMath::Cos(FPlatformTime::Seconds() * PI) * 0.25f) + 0.5f;
7769
const FTransform3f Transform = FTransform3f(FQuat4f::Identity, FVector3f(0, 0, 0), FVector3f(Scale, Scale, Scale));
7870

71+
72+
int32 Section0StartVertex = Builder.NumVertices();
73+
int32 Section0StartTriangle = Builder.NumTriangles();
7974
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();
8078
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();
8182
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+
8699
Promise.EmplaceValue(RealtimeMeshRef);
87100
});
88101

0 commit comments

Comments
 (0)