Skip to content

Commit f51ca5c

Browse files
committed
Added automatic 32-bit indices to sphere provider
1 parent 16de1cb commit f51ca5c

File tree

2 files changed

+10
-3
lines changed

2 files changed

+10
-3
lines changed

Source/RuntimeMeshComponent/Private/Providers/RuntimeMeshProviderSphere.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,9 @@ void FRuntimeMeshProviderSphereProxy::Initialize()
6565
Properties.bIsVisible = true;
6666
Properties.MaterialSlot = 0;
6767
Properties.UpdateFrequency = ERuntimeMeshUpdateFrequency::Infrequent;
68+
int32 LatSegments, LonSegments;
69+
GetSegmentsForLOD(LODIndex, LatSegments, LonSegments);
70+
Properties.bWants32BitIndices = (LatSegments + 1)*(LonSegments + 1) >= 1 << 16;
6871
CreateSection(LODIndex, 0, Properties);
6972
}
7073
}
@@ -123,7 +126,7 @@ bool FRuntimeMeshProviderSphereProxy::GetSphereMesh(int32 LatitudeSegments, int3
123126
FMath::SinCos(&y, &x, angle + PI / 2.f);
124127
TangentVerts[LatitudeIndex] = FVector(x, y, 0);
125128
}
126-
for (int32 LongitudeIndex = 0; LongitudeIndex < LongitudeSegments + 1; LongitudeIndex++)
129+
for (int32 LongitudeIndex = 0; LongitudeIndex < LongitudeSegments + 1; LongitudeIndex++) //There is one more vertex than technically needed but that allows to not have special wrap-around code.
127130
{
128131
float angle = LongitudeIndex * PI / LongitudeSegments;
129132
float z, r;
@@ -160,8 +163,8 @@ bool FRuntimeMeshProviderSphereProxy::GetSectionMeshForLOD(int32 LODIndex, int32
160163
// We should only ever be queried for section 0 and lod 0
161164
check(SectionId == 0 && LODIndex <= MaxLOD);
162165

163-
int32 LatSegments = FMath::Max(FMath::RoundToInt(MaxLatitudeSegments * FMath::Pow(LODMultiplier, LODIndex)), MinLatitudeSegments);
164-
int32 LonSegments = FMath::Max(FMath::RoundToInt(MaxLongitudeSegments * FMath::Pow(LODMultiplier, LODIndex)), MinLongitudeSegments);
166+
int32 LatSegments, LonSegments;
167+
GetSegmentsForLOD(LODIndex, LatSegments, LonSegments);
165168

166169
return GetSphereMesh(LatSegments, LonSegments, MeshData);
167170
}

Source/RuntimeMeshComponent/Public/Providers/RuntimeMeshProviderSphere.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,10 @@ class RUNTIMEMESHCOMPONENT_API FRuntimeMeshProviderSphereProxy : public FRuntime
2020

2121
int32 GetMaxNumberOfLODs();
2222
float CalculateScreenSize(int32 LODIndex);
23+
void GetSegmentsForLOD(int32 LODIndex, int32& LatitudeSegments, int32& LongitudeSegments) {
24+
LatitudeSegments = FMath::Max(FMath::RoundToInt(MaxLatitudeSegments * FMath::Pow(LODMultiplier, LODIndex)), MinLatitudeSegments);
25+
LongitudeSegments = FMath::Max(FMath::RoundToInt(MaxLongitudeSegments * FMath::Pow(LODMultiplier, LODIndex)), MinLongitudeSegments);
26+
}
2327

2428
bool GetSphereMesh(int32 LatitudeSegments, int32 LongitudeSegments, FRuntimeMeshRenderableMeshData& MeshData);
2529
public:

0 commit comments

Comments
 (0)