UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
StaticMeshResources.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3/*=============================================================================
4 StaticMesh.h: Static mesh class definition.
5=============================================================================*/
6
7#pragma once
8
9#include "CoreMinimal.h"
11#include "Containers/Set.h"
12#include "Misc/Guid.h"
13#include "Engine/EngineTypes.h"
16#include "RenderResource.h"
17#include "PackedNormal.h"
19#include "RawIndexBuffer.h"
20#include "Components.h"
21#include "LocalVertexFactory.h"
23#include "UObject/UObjectHash.h"
24#include "MeshBatch.h"
26#include "SceneManagement.h"
28#include "BodySetupEnums.h"
36#include "RenderTransform.h"
37#include "Templates/UniquePtr.h"
41#include "RayTracingGeometry.h"
42#if WITH_EDITORONLY_DATA
44#endif
45
47class UBodySetup;
49
50#if RHI_RAYTRACING
51namespace RayTracing
52{
54 using GeometryGroupHandle UE_DEPRECATED(5.6, "Use FGeometryGroupHandle instead.") = FGeometryGroupHandle;
55}
56#endif
57
59#define MAX_STATIC_MESH_LODS 8
60
61struct FStaticMaterial;
62
67{
68public:
71 : DefaultNumLODs(1)
72 , DefaultMaxNumStreamedLODs(0)
73 , DefaultMaxNumOptionalLODs(0)
74 , DefaultLightMapResolution(64)
75 , BasePercentTrianglesMult(1.0f)
76 , BasePercentVerticesMult(1.0f)
77 , bSupportLODStreaming(false)
78 , DisplayName( NSLOCTEXT( "UnrealEd", "None", "None" ) )
79 {
80 FMemory::Memzero(SettingsBias);
81 SettingsBias.PercentTriangles = 1.0f;
82 SettingsBias.PercentVertices = 1.0f;
83 }
84
87 {
88 return DefaultNumLODs;
89 }
90
93 {
94 return DefaultMaxNumStreamedLODs;
95 }
96
99 {
100 return DefaultMaxNumOptionalLODs;
101 }
102
105 {
106 return DefaultLightMapResolution;
107 }
108
111 {
112 return bSupportLODStreaming;
113 }
114
117 {
118 check(LODIndex >= 0 && LODIndex < MAX_STATIC_MESH_LODS);
119 return DefaultSettings[LODIndex];
120 }
121
124
125private:
129 int32 DefaultNumLODs;
131 int32 DefaultMaxNumStreamedLODs;
133 int32 DefaultMaxNumOptionalLODs;
135 int32 DefaultLightMapResolution;
137 float BasePercentTrianglesMult;
139 float BasePercentVerticesMult;
141 bool bSupportLODStreaming;
143 FText DisplayName;
147 FMeshReductionSettings SettingsBias;
148};
149
154{
155public:
156
161 ENGINE_API void Initialize(const ITargetPlatform* TargetPlatform);
162 ENGINE_API void Initialize(const class ITargetPlatformSettings* TargetPlatform);
163
165 const FStaticMeshLODGroup& GetLODGroup(FName LODGroup) const
166 {
167 const FStaticMeshLODGroup* Group = Groups.Find(LODGroup);
168 if (Group == NULL)
169 {
170 Group = Groups.Find(NAME_None);
171 }
172 check(Group);
173 return *Group;
174 }
175
176 int32 GetLODGroupIdx(FName GroupName) const
177 {
178 const int32* IdxPtr = GroupName2Index.Find(GroupName);
179 return IdxPtr ? *IdxPtr : INDEX_NONE;
180 }
181
184
187
188private:
190 void ReadEntry(FStaticMeshLODGroup& Group, FString Entry);
194 TMap<FName, int32> GroupName2Index;
195};
196
197
253
254
256
269
281
283
286{
287public:
288
291
293
294 // FRenderResource interface.
295 ENGINE_API virtual void InitRHI(FRHICommandListBase& RHICmdList) override;
296 ENGINE_API virtual void ReleaseRHI() override;
297 virtual FString GetFriendlyName() const override { return TEXT("FStaticMeshSectionAreaWeightedTriangleSamplerBuffer"); }
298
299 const FBufferRHIRef& GetBufferRHI() const { return BufferSectionTriangleRHI; }
300 const FShaderResourceViewRHIRef& GetBufferSRV() const { return BufferSectionTriangleSRV; }
301
302private:
303 struct SectionTriangleInfo
304 {
305 float Prob;
306 uint32 Alias;
307 };
308
309 FBufferRHIRef BufferSectionTriangleRHI = nullptr;
310 FShaderResourceViewRHIRef BufferSectionTriangleSRV = nullptr;
311
313};
314
315
316struct FDynamicMeshVertex;
317struct FModelVertex;
318
320{
323
326
329
330 void inline InitWithDummyData(FRHICommandListBase& RHICmdList, FLocalVertexFactory* VertexFactory, uint32 NumVertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
331 {
332 InitWithDummyData(&RHICmdList, nullptr, VertexFactory, NumVertices, NumTexCoords, LightMapIndex);
333 }
334
335 void inline InitWithDummyData(FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory, uint32 NumVertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
336 {
337 InitWithDummyData(nullptr, RenderCommandPipe, VertexFactory, NumVertices, NumTexCoords, LightMapIndex);
338 }
339
340 void inline InitWithDummyData(FLocalVertexFactory* VertexFactory, uint32 NumVertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
341 {
342 InitWithDummyData(nullptr, nullptr, VertexFactory, NumVertices, NumTexCoords, LightMapIndex);
343 }
344
345 inline void InitFromDynamicVertex(FRHICommandListBase& RHICmdList, FLocalVertexFactory* VertexFactory, TArray<FDynamicMeshVertex>& Vertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
346 {
347 InitFromDynamicVertex(&RHICmdList, nullptr, VertexFactory, Vertices, NumTexCoords, LightMapIndex);
348 }
349
350 inline void InitFromDynamicVertex(FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory, TArray<FDynamicMeshVertex>& Vertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
351 {
352 InitFromDynamicVertex(nullptr, RenderCommandPipe, VertexFactory, Vertices, NumTexCoords, LightMapIndex);
353 }
354
355 inline void InitFromDynamicVertex(FLocalVertexFactory* VertexFactory, TArray<FDynamicMeshVertex>& Vertices, uint32 NumTexCoords = 1, uint32 LightMapIndex = 0)
356 {
357 InitFromDynamicVertex(nullptr, nullptr, VertexFactory, Vertices, NumTexCoords, LightMapIndex);
358 }
359
362
363 inline void InitModelVF(FRHICommandListBase& RHICmdList, FLocalVertexFactory* VertexFactory)
364 {
365 InitModelVF(&RHICmdList, nullptr, VertexFactory);
366 }
367
368 inline void InitModelVF(FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory)
369 {
370 InitModelVF(nullptr, RenderCommandPipe, VertexFactory);
371 }
372
373 inline void InitModelVF(FLocalVertexFactory* VertexFactory)
374 {
375 InitModelVF(nullptr, nullptr, VertexFactory);
376 }
377
378 void SetOwnerName(FName OwnerName)
379 {
380#if RHI_ENABLE_RESOURCE_INFO
384#endif
385 }
386
387private:
388 void ENGINE_API InitWithDummyData(FRHICommandListBase* RHICmdList, FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory, uint32 NumVertices, uint32 NumTexCoords, uint32 LightMapIndex);
389 void ENGINE_API InitFromDynamicVertex(FRHICommandListBase* RHICmdList, FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory, TArray<FDynamicMeshVertex>& Vertices, uint32 NumTexCoords, uint32 LightMapIndex);
390 void ENGINE_API InitModelVF(FRHICommandListBase* RHICmdList, FRenderCommandPipe* RenderCommandPipe, FLocalVertexFactory* VertexFactory);
391};
392
402
403class FStaticMeshSectionArray : public TArray<FStaticMeshSection, TInlineAllocator<1>>
404{
406public:
407 using Super::Super;
408};
409
410template <>
411struct TIsZeroConstructType<FStaticMeshSectionArray> : TIsZeroConstructType<TArray<FStaticMeshSection, TInlineAllocator<1>>>
412{
413};
414template <>
415struct TIsContiguousContainer<FStaticMeshSectionArray> : TIsContiguousContainer<TArray<FStaticMeshSection, TInlineAllocator<1>>>
416{
417};
418//using FStaticMeshSectionArray = TArray<FStaticMeshSection, TInlineAllocator<1>>;
419
426{
427public:
428
431
434
437
440
443
446
449
452
455
457
459
462
465
467
470
472
473#if STATS
475#endif
476
477#if WITH_EDITOR
479
480 FString DerivedDataKey;
481
484#endif
485
487
490
493
495
502
505
507
508 template <typename TBatcher>
525
527 void InitResources(UStaticMesh* Parent, int32 LODIndex);
528
530 void ReleaseResources();
531
533 void Serialize(FArchive& Ar, UObject* Owner, int32 Idx);
534
536
537#if RHI_RAYTRACING
539#endif // RHI_RAYTRACING
540
543
546
549
551
552private:
553 enum EClassDataStripFlag : uint8
554 {
555 CDSF_AdjacencyData_DEPRECATED = 1,
556 CDSF_MinLodData = 2,
557 CDSF_ReversedIndexBuffer = 4,
558 CDSF_RayTracingResources = 8
559 };
560
566 struct FStaticMeshBuffersSize
567 {
568 uint32 SerializedBuffersSize = 0;
569 uint32 DepthOnlyIBSize = 0;
570 uint32 ReversedIBsSize = 0;
571
572 void Clear()
573 {
574 SerializedBuffersSize = 0;
575 DepthOnlyIBSize = 0;
576 ReversedIBsSize = 0;
577 }
578
579 uint32 CalcBuffersSize() const;
580
581 friend FArchive& operator<<(FArchive& Ar, FStaticMeshBuffersSize& Info)
582 {
583 Ar << Info.SerializedBuffersSize;
584 Ar << Info.DepthOnlyIBSize;
585 Ar << Info.ReversedIBsSize;
586 return Ar;
587 }
588 };
589
590 static int32 GetPlatformMinLODIdx(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMesh);
591
592 static uint8 GenerateClassStripFlags(FArchive& Ar, UStaticMesh* OwnerStaticMesh, int32 Index);
593
594 static bool IsLODCookedOut(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMesh, bool bIsBelowMinLOD);
595
596 static bool IsLODInlined(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMesh, int32 LODIdx, bool bIsBelowMinLOD);
597
598 static int32 GetNumOptionalLODsAllowed(const ITargetPlatform* TargetPlatform, UStaticMesh* StaticMesh);
599
601 static void AccumVertexBuffersSize(const FStaticMeshVertexBuffers& VertexBuffers, uint32& OutSize);
602
604 static void AccumIndexBufferSize(const FRawStaticIndexBuffer& IndexBuffer, uint32& OutSize);
605
607 static void AccumRayTracingGeometrySize(const FRayTracingGeometry& RayTracingGeometry, uint32& OutSize);
608
613 void SerializeBuffers(FArchive& Ar, UStaticMesh* OwnerStaticMesh, uint8 InStripFlags, FStaticMeshBuffersSize& OutBuffersSize);
614
619 void SerializeAvailabilityInfo(FArchive& Ar);
620
621 void ClearAvailabilityInfo();
622
623 template <bool bIncrement>
624 void UpdateIndexMemoryStats();
625
626 template <bool bIncrement>
627 void UpdateVertexMemoryStats() const;
628
629 void IncrementMemoryStats();
630
631 void DecrementMemoryStats();
632
634 void DiscardCPUData();
635
640};
641
643{
645 : VertexFactory(InFeatureLevel, "FStaticMeshVertexFactories")
646 , VertexFactoryOverrideColorVertexBuffer(InFeatureLevel, "FStaticMeshVertexFactories_Override")
647 , SplineVertexFactory(nullptr)
649 {
650 // FLocalVertexFactory::InitRHI requires valid current feature level to setup streams properly
652 }
653
655
658
661
663
665
674
675 UE_DEPRECATED(5.5, "Provide FStaticMeshVertexBuffers instead of FStaticMeshLODResources")
680
682 ENGINE_API void InitResources(const FStaticMeshVertexBuffers& VertexBuffers, uint32 LODIndex, const UStaticMesh* Parent);
683
684 UE_DEPRECATED(5.5, "Provide FStaticMeshVertexBuffers instead of FStaticMeshLODResources")
686 {
687 InitResources(LodResources.VertexBuffers, LODIndex, Parent);
688 }
689
692};
693
696
698{
700
702
705
710
711 bool bOwnsRayTracingGeometry : 1 = true;
712 bool bOwnsBuffers : 1 = true;
713 bool bBuffersInlined : 1 = false;
714
716 bool bBuffersStreamedIn : 1 = false;
717
719
720 void InitResources(UStaticMesh* Owner, int32 LODIndex);
721 void ReleaseResources();
722
724
727 void SerializeMetaData(FArchive& Ar);
728
730 void DiscardCPUData();
731
732#if RHI_RAYTRACING
734#endif // RHI_RAYTRACING
735
736 // FRayTracingStreamableAsset
737 ENGINE_API virtual uint32 GetRequestSize() const override;
738 ENGINE_API virtual uint32 GetRequestSizeBVH() const override;
739 ENGINE_API virtual uint32 GetRequestSizeBuffers() const override;
740 ENGINE_API virtual bool AreBuffersStreamedIn() const override;
741 ENGINE_API virtual bool IsBVHStreamedIn() const override;
742 ENGINE_API virtual void IssueRequest(FBulkDataBatchRequest& Request, FIoBuffer& RequestBuffer, bool bBuffersOnly = false) override;
743 ENGINE_API virtual void InitWithStreamedData(FRHICommandListBase& RHICmdList, FMemoryView StreamedData, bool bBuffersOnly = false) override;
747};
748
750
769
774{
775public:
776
780
787
790
792
795
798
799#if RHI_RAYTRACING
801#endif
802
803 bool IsInitialized() const
804 {
805 return bIsInitialized;
806 }
807
808 ENGINE_API bool HasValidNaniteData() const;
809
810 ENGINE_API bool HasNaniteFallbackMesh(EShaderPlatform ShaderPlatform) const;
811
814
816
819
821
823
825
826#if WITH_EDITORONLY_DATA
827
829 FString DerivedDataKey;
830
838
840 TArray<int32> MaterialIndexToImportIndex;
841
844
847
853
856
859
862
865
866 void SyncUVChannelData(const TArray<FStaticMaterial>& ObjectData);
867
872 ENGINE_API void Cache(const ITargetPlatform* TargetPlatform, UStaticMesh* Owner, const FStaticMeshLODSettings& LODSettings);
878#endif // #if WITH_EDITORONLY_DATA
879
884
886 void Serialize(FArchive& Ar, UStaticMesh* Owner, bool bCooked);
887
890
893
896
899
902
905
908
910
912
913#if WITH_EDITOR
916#endif // #if WITH_EDITORONLY_DATA
917
920
923 {
924 return GetFirstValidLODIdx(FMath::Max<int32>(CurrentFirstLODIdx, MinLODIdx));
925 }
926
933 {
934 const int32 LODIdx = GetCurrentFirstLODIdx(MinLODIdx);
935 return LODResources.IsValidIndex(LODIdx) ? &LODResources[LODIdx] : nullptr;
936 }
937
938private:
939#if WITH_EDITORONLY_DATA
941 friend class FLevelOfDetailSettingsLayout;
942#endif // #if WITH_EDITORONLY_DATA
943 bool bIsInitialized = false;
944};
945
952{
953public:
954
957
960
968
971
972private:
973 struct FData
974 {
975 TArray<UStaticMeshComponent*> UStaticMeshComponents;
976 TArray<IStaticMeshComponent*> IStaticMeshComponents;
977 };
978 TMap<void*, FData> StaticMeshComponents;
979 bool bUnbuildLighting;
980 bool bRefreshBounds;
981};
982
997{
998 Component, // Reregistering components
999 RenderState // Updating render state only -- limits reregistration to components with bRenderStateDirty set, and skips ReleasePrimitive
1000};
1001
1024
1025/*-----------------------------------------------------------------------------
1026 FStaticMeshInstanceData
1027-----------------------------------------------------------------------------*/
1028
1031{
1032 template<typename F>
1033 struct FInstanceTransformMatrix
1034 {
1035 F InstanceTransform1[4];
1036 F InstanceTransform2[4];
1037 F InstanceTransform3[4];
1038
1039 friend FArchive& operator<<(FArchive& Ar, FInstanceTransformMatrix& V)
1040 {
1041 return Ar
1042 << V.InstanceTransform1[0]
1043 << V.InstanceTransform1[1]
1044 << V.InstanceTransform1[2]
1045 << V.InstanceTransform1[3]
1046
1047 << V.InstanceTransform2[0]
1048 << V.InstanceTransform2[1]
1049 << V.InstanceTransform2[2]
1050 << V.InstanceTransform2[3]
1051
1052 << V.InstanceTransform3[0]
1053 << V.InstanceTransform3[1]
1054 << V.InstanceTransform3[2]
1055 << V.InstanceTransform3[3];
1056 }
1057
1058 };
1059
1060 struct FInstanceLightMapVector
1061 {
1062 int16 InstanceLightmapAndShadowMapUVBias[4];
1063
1064 friend FArchive& operator<<(FArchive& Ar, FInstanceLightMapVector& V)
1065 {
1066 return Ar
1067 << V.InstanceLightmapAndShadowMapUVBias[0]
1068 << V.InstanceLightmapAndShadowMapUVBias[1]
1069 << V.InstanceLightmapAndShadowMapUVBias[2]
1070 << V.InstanceLightmapAndShadowMapUVBias[3];
1071 }
1072 };
1073
1074public:
1078
1085 {
1086 AllocateBuffers(0);
1087 }
1088
1090 {
1091 delete InstanceOriginData;
1092 delete InstanceLightmapData;
1093 delete InstanceTransformData;
1094 delete InstanceCustomData;
1095 }
1096
1097 void Serialize(FArchive& Ar);
1098
1100 {
1101 NumInstances = InNumInstances;
1102 NumCustomDataFloats = InNumCustomDataFloats;
1103
1105 {
1106 InstanceOriginData->Empty(NumInstances);
1107 InstanceLightmapData->Empty(NumInstances);
1108 InstanceTransformData->Empty(NumInstances);
1109 InstanceCustomData->Empty(NumCustomDataFloats * NumInstances);
1110 }
1111
1112 // We cannot write directly to the data on all platforms,
1113 // so we make a TArray of the right type, then assign it
1114 InstanceOriginData->ResizeBuffer(NumInstances, BufferFlags);
1115 InstanceOriginDataPtr = InstanceOriginData->GetDataPointer();
1116
1117 InstanceLightmapData->ResizeBuffer(NumInstances, BufferFlags);
1118 InstanceLightmapDataPtr = InstanceLightmapData->GetDataPointer();
1119
1120 InstanceTransformData->ResizeBuffer(NumInstances, BufferFlags);
1121 InstanceTransformDataPtr = InstanceTransformData->GetDataPointer();
1122
1123 InstanceCustomData->ResizeBuffer(NumCustomDataFloats * NumInstances, BufferFlags);
1124 InstanceCustomDataPtr = InstanceCustomData->GetDataPointer();
1125 }
1126
1128 {
1129 return InstanceOriginData->IsValidIndex(Index);
1130 }
1131
1132 inline void GetInstanceTransform(int32 InstanceIndex, FRenderTransform& Transform) const
1133 {
1135 if (bUseHalfFloat)
1136 {
1138 }
1139 else
1140 {
1142 }
1143
1144 Transform.TransformRows[0] = FVector3f(TransformVec[0].X, TransformVec[0].Y, TransformVec[0].Z);
1145 Transform.TransformRows[1] = FVector3f(TransformVec[1].X, TransformVec[1].Y, TransformVec[1].Z);
1146 Transform.TransformRows[2] = FVector3f(TransformVec[2].X, TransformVec[2].Y, TransformVec[2].Z);
1147
1148 FVector4f Origin;
1149 GetInstanceOriginInternal(InstanceIndex, Origin);
1150 Transform.Origin = FVector3f(Origin.X, Origin.Y, Origin.Z);
1151 }
1152
1153 inline void GetInstanceRandomID(int32 InstanceIndex, float& RandomInstanceID) const
1154 {
1155 FVector4f Origin;
1156 GetInstanceOriginInternal(InstanceIndex, Origin);
1157 RandomInstanceID = Origin.W;
1158 }
1159
1160
1161#if WITH_EDITOR
1162 inline void GetInstanceEditorData(int32 InstanceIndex, FColor& HitProxyColorOut, bool & bSelectedOut) const
1163 {
1164 // TODO: put this into a sensible format
1165 FVector4f InstanceTransform[3];
1166 if (bUseHalfFloat)
1167 {
1168 GetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1169 }
1170 else
1171 {
1172 GetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1173 }
1174 bSelectedOut = InstanceTransform[0][3] > 255.0f;
1175 HitProxyColorOut.R = uint8(InstanceTransform[0][3] - (bSelectedOut ? 256.0f : 0.0f));
1176 HitProxyColorOut.G = uint8(InstanceTransform[1][3]);
1177 HitProxyColorOut.B = uint8(InstanceTransform[2][3]);
1178 }
1179#endif
1180
1181 inline void GetInstanceLightMapData(int32 InstanceIndex, FVector4f& InstanceLightmapAndShadowMapUVBias) const
1182 {
1183 GetInstanceLightMapDataInternal(InstanceIndex, InstanceLightmapAndShadowMapUVBias);
1184 }
1185
1187 {
1188 GetInstanceCustomDataInternal(InstanceIndex, OutCustomData);
1189 }
1190
1191 inline void SetInstance(int32 InstanceIndex, const FMatrix44f& Transform, float RandomInstanceID, const FVector2D& LightmapUVBias, const FVector2D& ShadowmapUVBias)
1192 {
1193 FVector4f Origin(Transform.M[3][0], Transform.M[3][1], Transform.M[3][2], RandomInstanceID);
1194 SetInstanceOriginInternal(InstanceIndex, Origin);
1195
1196 FVector4f InstanceTransform[3];
1197 InstanceTransform[0] = FVector4f(Transform.M[0][0], Transform.M[0][1], Transform.M[0][2], 0.0f);
1198 InstanceTransform[1] = FVector4f(Transform.M[1][0], Transform.M[1][1], Transform.M[1][2], 0.0f);
1199 InstanceTransform[2] = FVector4f(Transform.M[2][0], Transform.M[2][1], Transform.M[2][2], 0.0f);
1200
1201 if (bUseHalfFloat)
1202 {
1203 SetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1204 }
1205 else
1206 {
1207 SetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1208 }
1209
1210 SetInstanceLightMapDataInternal(InstanceIndex, FVector4f((float)LightmapUVBias.X, (float)LightmapUVBias.Y, (float)ShadowmapUVBias.X, (float)ShadowmapUVBias.Y));
1211
1212 for (int32 i = 0; i < NumCustomDataFloats; ++i)
1213 {
1214 SetInstanceCustomDataInternal(InstanceIndex, i, 0);
1215 }
1216 }
1217
1218 inline void SetInstance(int32 InstanceIndex, const FMatrix44f& Transform, float RandomInstanceID)
1219 {
1220 const FVector2D& LightmapUVBias = FVector2D::ZeroVector;
1221 const FVector2D& ShadowmapUVBias = FVector2D::ZeroVector;
1222 SetInstance(InstanceIndex, Transform, RandomInstanceID, LightmapUVBias, ShadowmapUVBias);
1223 }
1224
1225 inline void SetInstance(int32 InstanceIndex, const FMatrix44f& Transform, const FVector2D& LightmapUVBias, const FVector2D& ShadowmapUVBias)
1226 {
1227 float RandomInstanceID;
1228 GetInstanceRandomID(InstanceIndex, RandomInstanceID);
1229 SetInstance(InstanceIndex, Transform, RandomInstanceID, LightmapUVBias, ShadowmapUVBias);
1230 }
1231
1232 inline void SetInstance(int32 InstanceIndex, const FMatrix44f& Transform)
1233 {
1234 const FVector2D& LightmapUVBias = FVector2D::ZeroVector;
1235 const FVector2D& ShadowmapUVBias = FVector2D::ZeroVector;
1236 float RandomInstanceID;
1237 GetInstanceRandomID(InstanceIndex, RandomInstanceID);
1238 SetInstance(InstanceIndex, Transform, RandomInstanceID, LightmapUVBias, ShadowmapUVBias);
1239 }
1240
1241 inline void SetInstanceLightMapData(int32 InstanceIndex, const FVector2D& LightmapUVBias, const FVector2D& ShadowmapUVBias)
1242 {
1243 SetInstanceLightMapDataInternal(InstanceIndex, FVector4f((float)LightmapUVBias.X, (float)LightmapUVBias.Y, (float)ShadowmapUVBias.X, (float)ShadowmapUVBias.Y));
1244 }
1245
1246 inline void SetInstanceCustomData(int32 InstanceIndex, int32 Index, float CustomData)
1247 {
1248 SetInstanceCustomDataInternal(InstanceIndex, Index, CustomData);
1249 }
1250
1251 inline void NullifyInstance(int32 InstanceIndex)
1252 {
1253 SetInstanceOriginInternal(InstanceIndex, FVector4f(0, 0, 0, 0));
1254
1255 FVector4f InstanceTransform[3];
1256 InstanceTransform[0] = FVector4f(0, 0, 0, 0);
1257 InstanceTransform[1] = FVector4f(0, 0, 0, 0);
1258 InstanceTransform[2] = FVector4f(0, 0, 0, 0);
1259
1260 if (bUseHalfFloat)
1261 {
1262 SetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1263 }
1264 else
1265 {
1266 SetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1267 }
1268
1269 SetInstanceLightMapDataInternal(InstanceIndex, FVector4f(0, 0, 0, 0));
1270
1271 for (int32 i = 0; i < NumCustomDataFloats; ++i)
1272 {
1273 SetInstanceCustomDataInternal(InstanceIndex, i, 0);
1274 }
1275 }
1276
1277 inline void SetInstanceEditorData(int32 InstanceIndex, FColor HitProxyColor, bool bSelected)
1278 {
1279 FVector4f InstanceTransform[3];
1280 if (bUseHalfFloat)
1281 {
1282 GetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1283 InstanceTransform[0][3] = ((float)HitProxyColor.R) + (bSelected ? 256.f : 0.0f);
1284 InstanceTransform[1][3] = (float)HitProxyColor.G;
1285 InstanceTransform[2][3] = (float)HitProxyColor.B;
1286 SetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1287 }
1288 else
1289 {
1290 GetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1291 InstanceTransform[0][3] = ((float)HitProxyColor.R) + (bSelected ? 256.f : 0.0f);
1292 InstanceTransform[1][3] = (float)HitProxyColor.G;
1293 InstanceTransform[2][3] = (float)HitProxyColor.B;
1294 SetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1295 }
1296 }
1297
1298 inline void ClearInstanceEditorData(int32 InstanceIndex)
1299 {
1300 FVector4f InstanceTransform[3];
1301 if (bUseHalfFloat)
1302 {
1303 GetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1304 InstanceTransform[0][3] = 0.0f;
1305 InstanceTransform[1][3] = 0.0f;
1306 InstanceTransform[2][3] = 0.0f;
1307 SetInstanceTransformInternal<FFloat16>(InstanceIndex, InstanceTransform);
1308 }
1309 else
1310 {
1311 GetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1312 InstanceTransform[0][3] = 0.0f;
1313 InstanceTransform[1][3] = 0.0f;
1314 InstanceTransform[2][3] = 0.0f;
1315 SetInstanceTransformInternal<float>(InstanceIndex, InstanceTransform);
1316 }
1317 }
1318
1319 inline void SwapInstance(int32 Index1, int32 Index2)
1320 {
1321 if (bUseHalfFloat)
1322 {
1323 FInstanceTransformMatrix<FFloat16>* ElementData = reinterpret_cast<FInstanceTransformMatrix<FFloat16>*>(InstanceTransformDataPtr);
1324 uint32 CurrentSize = InstanceTransformData->Num() * InstanceTransformData->GetStride();
1325 check((void*)((&ElementData[Index1]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
1326 check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceTransformDataPtr));
1327 check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
1328 check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceTransformDataPtr));
1329
1330 FInstanceTransformMatrix<FFloat16> TempStore = ElementData[Index1];
1331 ElementData[Index1] = ElementData[Index2];
1332 ElementData[Index2] = TempStore;
1333 }
1334 else
1335 {
1336 FInstanceTransformMatrix<float>* ElementData = reinterpret_cast<FInstanceTransformMatrix<float>*>(InstanceTransformDataPtr);
1337 uint32 CurrentSize = InstanceTransformData->Num() * InstanceTransformData->GetStride();
1338 check((void*)((&ElementData[Index1]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
1339 check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceTransformDataPtr));
1340 check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize));
1341 check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceTransformDataPtr));
1342
1343 FInstanceTransformMatrix<float> TempStore = ElementData[Index1];
1344 ElementData[Index1] = ElementData[Index2];
1345 ElementData[Index2] = TempStore;
1346 }
1347 {
1348
1349 FVector4f* ElementData = reinterpret_cast<FVector4f*>(InstanceOriginDataPtr);
1350 uint32 CurrentSize = InstanceOriginData->Num() * InstanceOriginData->GetStride();
1351 check((void*)((&ElementData[Index1]) + 1) <= (void*)(InstanceOriginDataPtr + CurrentSize));
1352 check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceOriginDataPtr));
1353 check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceOriginDataPtr + CurrentSize));
1354 check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceOriginDataPtr));
1355
1356 FVector4f TempStore = ElementData[Index1];
1357 ElementData[Index1] = ElementData[Index2];
1358 ElementData[Index2] = TempStore;
1359 }
1360 {
1361 FInstanceLightMapVector* ElementData = reinterpret_cast<FInstanceLightMapVector*>(InstanceLightmapDataPtr);
1362 uint32 CurrentSize = InstanceLightmapData->Num() * InstanceLightmapData->GetStride();
1363 check((void*)((&ElementData[Index1]) + 1) <= (void*)(InstanceLightmapDataPtr + CurrentSize));
1364 check((void*)((&ElementData[Index1]) + 0) >= (void*)(InstanceLightmapDataPtr));
1365 check((void*)((&ElementData[Index2]) + 1) <= (void*)(InstanceLightmapDataPtr + CurrentSize));
1366 check((void*)((&ElementData[Index2]) + 0) >= (void*)(InstanceLightmapDataPtr));
1367
1368 FInstanceLightMapVector TempStore = ElementData[Index1];
1369 ElementData[Index1] = ElementData[Index2];
1370 ElementData[Index2] = TempStore;
1371 }
1372 {
1373 float* ElementData = reinterpret_cast<float*>(InstanceCustomDataPtr);
1374 const uint32 CurrentSize = InstanceCustomData->Num() * InstanceCustomData->GetStride();
1375
1376 for (int32 i = 0; i < NumCustomDataFloats; ++i)
1377 {
1378 const int32 CustomDataIndex1 = NumCustomDataFloats * Index1 + i;
1379 const int32 CustomDataIndex2 = NumCustomDataFloats * Index2 + i;
1380
1381 check((void*)((&ElementData[CustomDataIndex1]) + 1) <= (void*)(InstanceCustomDataPtr + CurrentSize));
1382 check((void*)((&ElementData[CustomDataIndex1]) + 0) >= (void*)(InstanceCustomDataPtr));
1383 check((void*)((&ElementData[CustomDataIndex2]) + 1) <= (void*)(InstanceCustomDataPtr + CurrentSize));
1384 check((void*)((&ElementData[CustomDataIndex2]) + 0) >= (void*)(InstanceCustomDataPtr));
1385
1386 float TempStore = ElementData[CustomDataIndex1];
1387 ElementData[CustomDataIndex1] = ElementData[CustomDataIndex2];
1388 ElementData[CustomDataIndex2] = TempStore;
1389 }
1390 }
1391 }
1392
1393 inline int32 GetNumInstances() const
1394 {
1395 return NumInstances;
1396 }
1397
1399 {
1400 return NumCustomDataFloats;
1401 }
1402
1404 {
1405 if (InstanceOriginData)
1406 {
1407 InstanceOriginData->GetResourceArray()->SetAllowCPUAccess(InNeedsCPUAccess);
1408 }
1409 if (InstanceLightmapData)
1410 {
1411 InstanceLightmapData->GetResourceArray()->SetAllowCPUAccess(InNeedsCPUAccess);
1412 }
1413 if (InstanceTransformData)
1414 {
1415 InstanceTransformData->GetResourceArray()->SetAllowCPUAccess(InNeedsCPUAccess);
1416 }
1417 if (InstanceCustomData)
1418 {
1419 InstanceCustomData->GetResourceArray()->SetAllowCPUAccess(InNeedsCPUAccess);
1420 }
1421 }
1422
1423 inline bool GetTranslationUsesHalfs() const
1424 {
1425 return bUseHalfFloat;
1426 }
1427
1429 {
1430 return InstanceOriginData->GetResourceArray();
1431 }
1432
1434 {
1435 return InstanceTransformData->GetResourceArray();
1436 }
1437
1439 {
1440 return InstanceLightmapData->GetResourceArray();
1441 }
1442
1444 {
1445 return InstanceCustomData->GetResourceArray();
1446 }
1447
1449 {
1450 return InstanceOriginData->GetStride();
1451 }
1452
1454 {
1455 return InstanceTransformData->GetStride();
1456 }
1457
1459 {
1460 return InstanceLightmapData->GetStride();
1461 }
1462
1464 {
1465 return InstanceCustomData->GetStride();
1466 }
1467
1469 {
1470 return InstanceOriginData->GetResourceSize() +
1471 InstanceTransformData->GetResourceSize() +
1472 InstanceLightmapData->GetResourceSize() +
1473 InstanceCustomData->GetResourceSize();
1474 }
1475
1476private:
1477 template<typename T>
1478 inline void GetInstanceTransformInternal(int32 InstanceIndex, FVector4f (&Transform)[3]) const
1479 {
1480 FInstanceTransformMatrix<T>* ElementData = reinterpret_cast<FInstanceTransformMatrix<T>*>(InstanceTransformDataPtr);
1481 uint32 CurrentSize = InstanceTransformData->Num() * InstanceTransformData->GetStride();
1482
1483 if (ensure((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize))
1484 && ensure((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceTransformDataPtr)))
1485 {
1486 Transform[0][0] = ElementData[InstanceIndex].InstanceTransform1[0];
1487 Transform[0][1] = ElementData[InstanceIndex].InstanceTransform1[1];
1488 Transform[0][2] = ElementData[InstanceIndex].InstanceTransform1[2];
1489 Transform[0][3] = ElementData[InstanceIndex].InstanceTransform1[3];
1490
1491 Transform[1][0] = ElementData[InstanceIndex].InstanceTransform2[0];
1492 Transform[1][1] = ElementData[InstanceIndex].InstanceTransform2[1];
1493 Transform[1][2] = ElementData[InstanceIndex].InstanceTransform2[2];
1494 Transform[1][3] = ElementData[InstanceIndex].InstanceTransform2[3];
1495
1496 Transform[2][0] = ElementData[InstanceIndex].InstanceTransform3[0];
1497 Transform[2][1] = ElementData[InstanceIndex].InstanceTransform3[1];
1498 Transform[2][2] = ElementData[InstanceIndex].InstanceTransform3[2];
1499 Transform[2][3] = ElementData[InstanceIndex].InstanceTransform3[3];
1500 }
1501 else
1502 {
1503 Transform[0] = FVector4f(1.0f, 0.0f, 0.0f, 0.0f);
1504 Transform[1] = FVector4f(0.0f, 1.0f, 0.0f, 0.0f);
1505 Transform[2] = FVector4f(0.0f, 0.0f, 1.0f, 0.0f);
1506 }
1507 }
1508
1509 inline void GetInstanceOriginInternal(int32 InstanceIndex, FVector4f &Origin) const
1510 {
1511 FVector4f* ElementData = reinterpret_cast<FVector4f*>(InstanceOriginDataPtr);
1512 uint32 CurrentSize = InstanceOriginData->Num() * InstanceOriginData->GetStride();
1513
1514 if (ensure((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceOriginDataPtr + CurrentSize))
1515 && ensure((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceOriginDataPtr)))
1516 {
1517 Origin = ElementData[InstanceIndex];
1518 }
1519 else
1520 {
1521 Origin = FVector4f(0.0f, 0.0f, 0.0f, 0.0f);
1522 }
1523 }
1524
1525 inline void GetInstanceLightMapDataInternal(int32 InstanceIndex, FVector4f &LightmapData) const
1526 {
1527 FInstanceLightMapVector* ElementData = reinterpret_cast<FInstanceLightMapVector*>(InstanceLightmapDataPtr);
1528 uint32 CurrentSize = InstanceLightmapData->Num() * InstanceLightmapData->GetStride();
1529
1530 if (ensure((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceLightmapDataPtr + CurrentSize))
1531 && ensure((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceLightmapDataPtr)))
1532 {
1534 (
1535 float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[0]) / 32767.0f,
1536 float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[1]) / 32767.0f,
1537 float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[2]) / 32767.0f,
1538 float(ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[3]) / 32767.0f
1539 );
1540 }
1541 else
1542 {
1543 LightmapData = FVector4f(0.0f, 0.0f, 0.0f, 0.0f);
1544 }
1545 }
1546
1547 inline void GetInstanceCustomDataInternal(int32 InstanceIndex, TArrayView<float> OutCustomData) const
1548 {
1549 check(OutCustomData.Num() == NumCustomDataFloats);
1550
1551 float* ElementData = reinterpret_cast<float*>(InstanceCustomDataPtr);
1552 const uint32 CurrentSize = InstanceCustomData->Num() * InstanceCustomData->GetStride();
1553
1554 for (int32 i = 0; i < NumCustomDataFloats; ++i)
1555 {
1556 int32 CustomDataIndex = NumCustomDataFloats * InstanceIndex + i;
1557
1558 if (ensure((void*)((&ElementData[CustomDataIndex]) + 1) <= (void*)(InstanceCustomDataPtr + CurrentSize))
1559 && ensure((void*)((&ElementData[CustomDataIndex]) + 0) >= (void*)(InstanceCustomDataPtr)))
1560 {
1561 OutCustomData[i] = ElementData[CustomDataIndex];
1562 }
1563 }
1564 }
1565
1566 template<typename T>
1567 inline void SetInstanceTransformInternal(int32 InstanceIndex, FVector4f(Transform)[3]) const
1568 {
1569 FInstanceTransformMatrix<T>* ElementData = reinterpret_cast<FInstanceTransformMatrix<T>*>(InstanceTransformDataPtr);
1570 uint32 CurrentSize = InstanceTransformData->Num() * InstanceTransformData->GetStride();
1571
1572 if (ensure((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceTransformDataPtr + CurrentSize))
1573 && ensure((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceTransformDataPtr)))
1574 {
1575 ElementData[InstanceIndex].InstanceTransform1[0] = Transform[0][0];
1576 ElementData[InstanceIndex].InstanceTransform1[1] = Transform[0][1];
1577 ElementData[InstanceIndex].InstanceTransform1[2] = Transform[0][2];
1578 ElementData[InstanceIndex].InstanceTransform1[3] = Transform[0][3];
1579
1580 ElementData[InstanceIndex].InstanceTransform2[0] = Transform[1][0];
1581 ElementData[InstanceIndex].InstanceTransform2[1] = Transform[1][1];
1582 ElementData[InstanceIndex].InstanceTransform2[2] = Transform[1][2];
1583 ElementData[InstanceIndex].InstanceTransform2[3] = Transform[1][3];
1584
1585 ElementData[InstanceIndex].InstanceTransform3[0] = Transform[2][0];
1586 ElementData[InstanceIndex].InstanceTransform3[1] = Transform[2][1];
1587 ElementData[InstanceIndex].InstanceTransform3[2] = Transform[2][2];
1588 ElementData[InstanceIndex].InstanceTransform3[3] = Transform[2][3];
1589 }
1590 }
1591
1592 inline void SetInstanceOriginInternal(int32 InstanceIndex, const FVector4f& Origin) const
1593 {
1594 FVector4f* ElementData = reinterpret_cast<FVector4f*>(InstanceOriginDataPtr);
1595 uint32 CurrentSize = InstanceOriginData->Num() * InstanceOriginData->GetStride();
1596
1597 if (ensureMsgf((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceOriginDataPtr + CurrentSize), TEXT("OOB Instance Set Under: %i, %u, %p, %p"), InstanceIndex, CurrentSize, &ElementData, InstanceOriginDataPtr)
1598 && ensureMsgf((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceOriginDataPtr), TEXT("OOB Instance Set: %i, %u, %p, %p"), InstanceIndex, CurrentSize, &ElementData, InstanceOriginDataPtr))
1599 {
1600 ElementData[InstanceIndex] = Origin;
1601 }
1602 }
1603
1604 inline void SetInstanceLightMapDataInternal(int32 InstanceIndex, const FVector4f& LightmapData) const
1605 {
1606 FInstanceLightMapVector* ElementData = reinterpret_cast<FInstanceLightMapVector*>(InstanceLightmapDataPtr);
1607 uint32 CurrentSize = InstanceLightmapData->Num() * InstanceLightmapData->GetStride();
1608
1609 if (ensure((void*)((&ElementData[InstanceIndex]) + 1) <= (void*)(InstanceLightmapDataPtr + CurrentSize))
1610 && ensure((void*)((&ElementData[InstanceIndex]) + 0) >= (void*)(InstanceLightmapDataPtr)))
1611 {
1612
1613 ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[0] = (int16)FMath::Clamp<int32>(FMath::TruncToInt(LightmapData.X * 32767.0f), MIN_int16, MAX_int16);
1614 ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[1] = (int16)FMath::Clamp<int32>(FMath::TruncToInt(LightmapData.Y * 32767.0f), MIN_int16, MAX_int16);
1615 ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[2] = (int16)FMath::Clamp<int32>(FMath::TruncToInt(LightmapData.Z * 32767.0f), MIN_int16, MAX_int16);
1616 ElementData[InstanceIndex].InstanceLightmapAndShadowMapUVBias[3] = (int16)FMath::Clamp<int32>(FMath::TruncToInt(LightmapData.W * 32767.0f), MIN_int16, MAX_int16);
1617 }
1618
1619 }
1620
1621 inline void SetInstanceCustomDataInternal(int32 InstanceIndex, int32 DataIndex, float CustomData)
1622 {
1623 if (DataIndex >= NumCustomDataFloats)
1624 {
1625 return;
1626 }
1627
1628 float* ElementData = reinterpret_cast<float*>(InstanceCustomDataPtr);
1629 const uint32 CurrentSize = InstanceCustomData->Num() * InstanceCustomData->GetStride();
1630
1631 const int32 CustomDataIndex = NumCustomDataFloats * InstanceIndex + DataIndex;
1632
1633 if (ensure((void*)((&ElementData[CustomDataIndex]) + 1) <= (void*)(InstanceCustomDataPtr + CurrentSize))
1634 && ensure((void*)((&ElementData[CustomDataIndex]) + 0) >= (void*)(InstanceCustomDataPtr)))
1635 {
1636 ElementData[CustomDataIndex] = CustomData;
1637 }
1638
1639 }
1640
1642 {
1643 delete InstanceOriginData;
1644 InstanceOriginDataPtr = nullptr;
1645
1646 delete InstanceTransformData;
1647 InstanceTransformDataPtr = nullptr;
1648
1649 delete InstanceLightmapData;
1650 InstanceLightmapDataPtr = nullptr;
1651
1652 delete InstanceCustomData;
1653 InstanceCustomData = nullptr;
1654
1655 InstanceOriginData = new TStaticMeshVertexData<FVector4f>();
1656 InstanceOriginData->ResizeBuffer(InNumInstances, BufferFlags);
1657 InstanceLightmapData = new TStaticMeshVertexData<FInstanceLightMapVector>();
1658 InstanceLightmapData->ResizeBuffer(InNumInstances, BufferFlags);
1659 if (bUseHalfFloat)
1660 {
1661 InstanceTransformData = new TStaticMeshVertexData<FInstanceTransformMatrix<FFloat16>>();
1662 }
1663 else
1664 {
1665 InstanceTransformData = new TStaticMeshVertexData<FInstanceTransformMatrix<float>>();
1666 }
1667 InstanceTransformData->ResizeBuffer(InNumInstances, BufferFlags);
1668
1669 InstanceCustomData = new TStaticMeshVertexData<float>();
1670 InstanceCustomData->ResizeBuffer(NumCustomDataFloats * InNumInstances, BufferFlags);
1671 }
1672
1673 FStaticMeshVertexDataInterface* InstanceOriginData = nullptr;
1674 uint8* InstanceOriginDataPtr = nullptr;
1675
1676 FStaticMeshVertexDataInterface* InstanceTransformData = nullptr;
1677 uint8* InstanceTransformDataPtr = nullptr;
1678
1679 FStaticMeshVertexDataInterface* InstanceLightmapData = nullptr;
1680 uint8* InstanceLightmapDataPtr = nullptr;
1681
1682 FStaticMeshVertexDataInterface* InstanceCustomData = nullptr;
1683 uint8* InstanceCustomDataPtr = nullptr;
1684
1685 int32 NumInstances = 0;
1686 int32 NumCustomDataFloats = 0;
1687 bool bUseHalfFloat = false;
1688};
1689
1690#if WITH_EDITOR
1702 const FPositionVertexBuffer& OldPositions,
1704 const FPositionVertexBuffer& NewPositions,
1707 );
1708#endif // #if WITH_EDITOR
1709
1710
1711#if UE_ENABLE_INCLUDE_ORDER_DEPRECATED_IN_5_5
1712#include "Engine/MeshMerging.h"
1713#endif
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
#define NULL
Definition oodle2base.h:134
#define PLATFORM_BUILTIN_VERTEX_HALF_FLOAT
Definition AndroidPlatform.h:50
#define check(expr)
Definition AssertionMacros.h:314
#define ensureMsgf( InExpression, InFormat,...)
Definition AssertionMacros.h:465
#define ensure( InExpression)
Definition AssertionMacros.h:464
@ MAX_STATIC_TEXCOORDS
Definition Components.h:22
@ INDEX_NONE
Definition CoreMiscDefines.h:150
@ ForceInit
Definition CoreMiscDefines.h:155
#define UE_DEPRECATED(Version, Message)
Definition CoreMiscDefines.h:302
FPlatformTypes::int16 int16
A 16-bit signed integer.
Definition Platform.h:1123
#define TEXT(x)
Definition Platform.h:1272
FPlatformTypes::SIZE_T SIZE_T
An unsigned integer the same size as a pointer, the same as UPTRINT.
Definition Platform.h:1150
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
FPlatformTypes::uint64 uint64
A 64-bit unsigned integer.
Definition Platform.h:1117
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
FArchive & operator<<(FArchive &Ar, FEnvQueryDebugProfileData::FStep &Data)
Definition EnvQueryTypes.cpp:489
return true
Definition ExternalRpcRegistry.cpp:601
#define X(Name, Desc)
Definition FormatStringSan.h:47
#define NSLOCTEXT(InNamespace, InKey, InTextLiteral)
Definition Internationalization.h:300
void Init()
Definition LockFreeList.h:4
UE::Math::TVector< float > FVector3f
Definition MathFwd.h:73
UE::Math::TVector4< float > FVector4f
Definition MathFwd.h:75
#define MIN_int16
Definition NumericLimits.h:15
#define MAX_int16
Definition NumericLimits.h:24
EShaderPlatform
Definition RHIShaderPlatform.h:11
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
#define MAX_STATIC_MESH_LODS
Definition StaticMeshResources.h:59
EBulkReregister
Definition StaticMeshResources.h:997
TArray< FStaticMeshSectionAreaWeightedTriangleSampler, FMemoryImageAllocator > FStaticMeshSectionAreaWeightedTriangleSamplerArray
Definition StaticMeshResources.h:282
EResizeBufferFlags
Definition StaticMeshVertexDataInterface.h:12
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition BulkData.h:1295
Definition MeshCardBuild.h:142
Definition ColorVertexBuffer.h:16
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition ColorVertexBuffer.cpp:413
Definition RHIDefinitions.h:95
Definition DistanceFieldAtlas.h:241
Definition IoBuffer.h:15
Definition LocalVertexFactory.h:51
Definition NameTypes.h:617
Definition PositionVertexBuffer.h:27
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition PositionVertexBuffer.cpp:228
Definition RHICommandList.h:455
Definition RHIResourceReplace.h:55
Definition RawIndexBuffer.h:130
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition RawIndexBuffer.cpp:385
Definition RayTracingGeometry.h:31
Definition RayTracingStreamableAsset.h:13
Definition RefCounting.h:213
Definition RenderingThread.h:652
Definition RenderResource.h:37
void SetOwnerName(FName InOwnerName)
Definition RenderResource.h:120
Definition ResourceArray.h:77
virtual void SetAllowCPUAccess(bool bInNeedsCPUAccess)=0
Definition SceneInterface.h:106
Definition StaticMeshResources.h:1003
void SanitizeMeshComponents()
Definition StaticMeshResources.cpp:228
ENGINE_API ~FStaticMeshComponentBulkReregisterContext()
Definition StaticMeshResources.cpp:190
ENGINE_API void AddSimpleConstructionScript(USimpleConstructionScript *SCS)
Definition StaticMeshResources.cpp:215
Definition StaticMeshResources.h:952
ENGINE_API const TArray< UStaticMeshComponent * > & GetComponentsUsingMesh(UStaticMesh *StaticMesh) const
Definition StaticMeshResources.cpp:70
ENGINE_API ~FStaticMeshComponentRecreateRenderStateContext()
Definition StaticMeshResources.cpp:75
Definition StaticMeshResources.h:1031
void SetInstance(int32 InstanceIndex, const FMatrix44f &Transform)
Definition StaticMeshResources.h:1232
void SetInstanceCustomData(int32 InstanceIndex, int32 Index, float CustomData)
Definition StaticMeshResources.h:1246
void NullifyInstance(int32 InstanceIndex)
Definition StaticMeshResources.h:1251
SIZE_T GetResourceSize() const
Definition StaticMeshResources.h:1468
void ClearInstanceEditorData(int32 InstanceIndex)
Definition StaticMeshResources.h:1298
uint32 GetOriginStride()
Definition StaticMeshResources.h:1448
void SetInstance(int32 InstanceIndex, const FMatrix44f &Transform, const FVector2D &LightmapUVBias, const FVector2D &ShadowmapUVBias)
Definition StaticMeshResources.h:1225
FResourceArrayInterface * GetCustomDataResourceArray()
Definition StaticMeshResources.h:1443
void SetAllowCPUAccess(bool InNeedsCPUAccess)
Definition StaticMeshResources.h:1403
void GetInstanceTransform(int32 InstanceIndex, FRenderTransform &Transform) const
Definition StaticMeshResources.h:1132
void SetInstanceLightMapData(int32 InstanceIndex, const FVector2D &LightmapUVBias, const FVector2D &ShadowmapUVBias)
Definition StaticMeshResources.h:1241
FResourceArrayInterface * GetOriginResourceArray()
Definition StaticMeshResources.h:1428
void GetInstanceCustomDataValues(int32 InstanceIndex, TArrayView< float > OutCustomData) const
Definition StaticMeshResources.h:1186
FStaticMeshInstanceData(bool bInUseHalfFloat)
Definition StaticMeshResources.h:1083
void SetInstance(int32 InstanceIndex, const FMatrix44f &Transform, float RandomInstanceID, const FVector2D &LightmapUVBias, const FVector2D &ShadowmapUVBias)
Definition StaticMeshResources.h:1191
uint32 GetTransformStride()
Definition StaticMeshResources.h:1453
void SwapInstance(int32 Index1, int32 Index2)
Definition StaticMeshResources.h:1319
void GetInstanceLightMapData(int32 InstanceIndex, FVector4f &InstanceLightmapAndShadowMapUVBias) const
Definition StaticMeshResources.h:1181
uint32 GetCustomDataStride()
Definition StaticMeshResources.h:1463
int32 GetNumCustomDataFloats() const
Definition StaticMeshResources.h:1398
FResourceArrayInterface * GetLightMapResourceArray()
Definition StaticMeshResources.h:1438
int32 GetNumInstances() const
Definition StaticMeshResources.h:1393
int32 IsValidIndex(int32 Index) const
Definition StaticMeshResources.h:1127
bool GetTranslationUsesHalfs() const
Definition StaticMeshResources.h:1423
uint32 GetLightMapStride()
Definition StaticMeshResources.h:1458
void SetInstance(int32 InstanceIndex, const FMatrix44f &Transform, float RandomInstanceID)
Definition StaticMeshResources.h:1218
~FStaticMeshInstanceData()
Definition StaticMeshResources.h:1089
FResourceArrayInterface * GetTransformResourceArray()
Definition StaticMeshResources.h:1433
void AllocateInstances(int32 InNumInstances, int32 InNumCustomDataFloats, EResizeBufferFlags BufferFlags, bool DestroyExistingInstances)
Definition StaticMeshResources.h:1099
void GetInstanceRandomID(int32 InstanceIndex, float &RandomInstanceID) const
Definition StaticMeshResources.h:1153
FStaticMeshInstanceData()
Definition StaticMeshResources.h:1075
void SetInstanceEditorData(int32 InstanceIndex, FColor HitProxyColor, bool bSelected)
Definition StaticMeshResources.h:1277
Definition StaticMeshResources.h:67
int32 GetDefaultLightMapResolution() const
Definition StaticMeshResources.h:104
FMeshReductionSettings GetDefaultSettings(int32 LODIndex) const
Definition StaticMeshResources.h:116
int32 GetDefaultMaxNumStreamedLODs() const
Definition StaticMeshResources.h:92
ENGINE_API FMeshReductionSettings GetSettings(const FMeshReductionSettings &InSettings, int32 LODIndex) const
int32 GetDefaultNumLODs() const
Definition StaticMeshResources.h:86
FStaticMeshLODGroup()
Definition StaticMeshResources.h:70
bool IsLODStreamingSupported() const
Definition StaticMeshResources.h:110
int32 GetDefaultMaxNumOptionalLODs() const
Definition StaticMeshResources.h:98
Definition StaticMeshResources.h:154
void GetLODGroupDisplayNames(TArray< FText > &OutDisplayNames) const
ENGINE_API void Initialize(const class ITargetPlatformSettings *TargetPlatform)
ENGINE_API void Initialize(const ITargetPlatform *TargetPlatform)
const FStaticMeshLODGroup & GetLODGroup(FName LODGroup) const
Definition StaticMeshResources.h:165
int32 GetLODGroupIdx(FName GroupName) const
Definition StaticMeshResources.h:176
void GetLODGroupNames(TArray< FName > &OutNames) const
Definition StaticMeshResources.h:774
ENGINE_API bool HasNaniteFallbackMesh(EShaderPlatform ShaderPlatform) const
Definition StaticMesh.cpp:3003
ENGINE_API void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize) const
Definition StaticMesh.cpp:4833
int32 GetCurrentFirstLODIdx(int32 MinLODIdx) const
Definition StaticMeshResources.h:922
bool bReadyForStreaming
Definition StaticMeshResources.h:818
bool IsInitialized() const
Definition StaticMeshResources.h:803
void InitResources(ERHIFeatureLevel::Type InFeatureLevel, UStaticMesh *Owner)
Definition StaticMesh.cpp:2756
ENGINE_API ~FStaticMeshRenderData()
Definition StaticMesh.cpp:2353
int32 GetNumNonOptionalLODs() const
Definition StaticMesh.cpp:2393
bool bLODsShareStaticLighting
Definition StaticMeshResources.h:813
ENGINE_API SIZE_T GetCPUAccessMemoryOverhead() const
Definition StaticMesh.cpp:4868
FStaticMeshLODResourcesArray LODResources
Definition StaticMeshResources.h:785
ENGINE_API FStaticMeshRenderData()
Definition StaticMesh.cpp:2337
uint8 CurrentFirstLODIdx
Definition StaticMeshResources.h:822
ENGINE_API void InitializeRayTracingRepresentationFromRenderingLODs()
Definition StaticMesh.cpp:2904
ENGINE_API bool HasValidNaniteData() const
Definition StaticMesh.cpp:2998
ENGINE_API void AllocateLODResources(int32 NumLODs)
Definition StaticMesh.cpp:2892
bool bHasNaniteFallbackMesh
Definition StaticMeshResources.h:815
void BuildAreaWeighedSamplingData()
uint8 LODBiasModifier
Definition StaticMeshResources.h:824
uint8 NumInlinedLODs
Definition StaticMeshResources.h:820
FPerPlatformFloat ScreenSize[MAX_STATIC_MESH_LODS]
Definition StaticMeshResources.h:789
void SerializeInlineDataRepresentations(FArchive &Ar, UStaticMesh *Owner)
Definition StaticMesh.cpp:2419
void ComputeUVDensities(UStaticMesh *Mesh)
int32 GetNumNonStreamingLODs() const
Definition StaticMesh.cpp:2371
FBoxSphereBounds Bounds
Definition StaticMeshResources.h:797
ENGINE_API int32 GetFirstValidLODIdx(int32 MinLODIdx) const
Definition StaticMesh.cpp:2949
TPimplPtr< Nanite::FResources > NaniteResourcesPtr
Definition StaticMeshResources.h:791
FStaticMeshRayTracingProxy * RayTracingProxy
Definition StaticMeshResources.h:794
ENGINE_API void ReleaseResources()
Definition StaticMesh.cpp:2853
FStaticMeshVertexFactoriesArray LODVertexFactories
Definition StaticMeshResources.h:786
const FStaticMeshLODResources * GetCurrentFirstLOD(int32 MinLODIdx) const
Definition StaticMeshResources.h:932
Definition StaticMeshResources.h:286
const FShaderResourceViewRHIRef & GetBufferSRV() const
Definition StaticMeshResources.h:300
virtual FString GetFriendlyName() const override
Definition StaticMeshResources.h:297
virtual ENGINE_API void ReleaseRHI() override
Definition StaticMesh.cpp:415
void Init(FStaticMeshSectionAreaWeightedTriangleSamplerArray *SamplerToUpload)
Definition StaticMeshResources.h:292
ENGINE_API ~FStaticMeshSectionAreaWeightedTriangleSamplerBuffer()
Definition StaticMesh.cpp:365
ENGINE_API FStaticMeshSectionAreaWeightedTriangleSamplerBuffer()
Definition StaticMesh.cpp:361
virtual ENGINE_API void InitRHI(FRHICommandListBase &RHICmdList) override
Definition StaticMesh.cpp:369
const FBufferRHIRef & GetBufferRHI() const
Definition StaticMeshResources.h:299
Definition StaticMeshResources.h:404
Definition StaticMeshUpdate.h:157
Definition StaticMeshUpdate.h:69
Definition StaticMeshUpdate.h:140
Definition StaticMeshVertexBuffer.h:150
void ReleaseRHIForStreaming(FRHIResourceReplaceBatcher &Batcher)
Definition StaticMeshVertexBuffer.cpp:306
Definition StaticMeshVertexDataInterface.h:22
virtual bool IsValidIndex(uint32 Index)=0
virtual FResourceArrayInterface * GetResourceArray()=0
virtual void Empty(uint32 NumVertices)=0
virtual uint8 * GetDataPointer()=0
virtual uint32 GetStride() const =0
virtual SIZE_T GetResourceSize() const =0
virtual int32 Num() const =0
virtual void ResizeBuffer(uint32 NumVertices, EResizeBufferFlags BufferFlags=EResizeBufferFlags::None)=0
Definition Text.h:385
Definition ArrayView.h:139
Definition Array.h:670
UE_FORCEINLINE_HINT bool IsValidIndex(int32 Index) const
Definition IndirectArray.h:408
Definition UnrealString.h.inl:34
Definition RefCounting.h:454
Definition StaticMeshVertexData.h:13
Definition UniquePtr.h:107
Definition BodySetup.h:128
Definition Object.h:95
Definition SCS_Node.h:21
Definition SimpleConstructionScript.h:18
Definition StaticMesh.h:593
Type
Definition RHIFeatureLevel.h:20
@ Num
Definition RHIFeatureLevel.h:54
Definition SceneManagement.h:73
int32 FGeometryGroupHandle
Definition SceneManagement.h:74
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition StaticMeshResources.h:394
FRawStaticIndexBuffer ReversedIndexBuffer
Definition StaticMeshResources.h:396
FRawStaticIndexBuffer WireframeIndexBuffer
Definition StaticMeshResources.h:400
FRawStaticIndexBuffer ReversedDepthOnlyIndexBuffer
Definition StaticMeshResources.h:398
Definition Color.h:486
uint8 G
Definition Color.h:492
uint8 R
Definition Color.h:492
uint8 B
Definition Color.h:492
Definition DynamicMeshBuilder.h:26
Definition LocalVertexFactory.h:60
static UE_FORCEINLINE_HINT void * Memzero(void *Dest, SIZE_T Count)
Definition UnrealMemory.h:131
Definition MeshReductionSettings.h:35
float PercentTriangles
Definition MeshReductionSettings.h:40
float PercentVertices
Definition MeshReductionSettings.h:48
Definition Model.h:279
Definition PerPlatformProperties.h:304
Definition RHIResources.h:3496
Definition RenderTransform.h:23
Definition ResourceSize.h:31
Definition SplineMeshSceneProxy.h:25
Definition StaticMesh.h:487
Definition StaticMeshResources.h:271
TRefCountPtr< const FStaticMeshLODResources > Owner
Definition StaticMeshResources.h:279
ENGINE_API FStaticMeshAreaWeightedSectionSampler()
Definition StaticMesh.cpp:1216
virtual ENGINE_API float GetWeights(TArray< float > &OutWeights) override
Definition StaticMesh.cpp:1227
Definition StaticMeshResources.h:426
SIZE_T GetCPUAccessMemoryOverhead() const
Definition StaticMesh.cpp:1039
uint32 bHasReversedDepthOnlyIndices
Definition StaticMeshResources.h:454
ENGINE_API int32 GetNumVertices() const
Definition StaticMesh.cpp:1065
FStaticMeshAreaWeightedSectionSampler AreaWeightedSampler
Definition StaticMeshResources.h:497
class FCardRepresentationData * CardRepresentationData
Definition StaticMeshResources.h:436
FBoxSphereBounds SourceMeshBounds
Definition StaticMeshResources.h:442
void InitResources(UStaticMesh *Parent, int32 LODIndex)
Definition StaticMesh.cpp:1515
uint32 BuffersSize
Definition StaticMeshResources.h:469
uint32 DepthOnlyNumTriangles
Definition StaticMeshResources.h:466
ENGINE_API void GetResourceSizeEx(FResourceSizeEx &CumulativeResourceSize) const
Definition StaticMesh.cpp:1019
ENGINE_API ~FStaticMeshLODResources()
Definition StaticMesh.cpp:1459
FRawStaticIndexBuffer DepthOnlyIndexBuffer
Definition StaticMeshResources.h:492
float MaxDeviation
Definition StaticMeshResources.h:445
uint32 bBuffersInlined
Definition StaticMeshResources.h:461
uint32 bHasDepthOnlyIndices
Definition StaticMeshResources.h:448
uint32 bHasColorVertexData
Definition StaticMeshResources.h:456
uint32 bHasReversedIndices
Definition StaticMeshResources.h:451
ENGINE_API int32 GetNumTexCoords() const
Definition StaticMesh.cpp:1070
void ReleaseResources()
Definition StaticMesh.cpp:1656
void ReleaseRHIForStreaming(TBatcher &Batcher)
Definition StaticMeshResources.h:509
FRayTracingGeometry * RayTracingGeometry
Definition StaticMeshResources.h:439
uint32 bIsOptionalLOD
Definition StaticMeshResources.h:464
FRawStaticIndexBuffer IndexBuffer
Definition StaticMeshResources.h:489
FStaticMeshVertexBuffers VertexBuffers
Definition StaticMeshResources.h:486
class FDistanceFieldVolumeData * DistanceFieldData
Definition StaticMeshResources.h:433
ENGINE_API int32 GetNumTriangles() const
Definition StaticMesh.cpp:1055
FStaticMeshSectionAreaWeightedTriangleSamplerBuffer AreaWeightedSectionSamplersBuffer
Definition StaticMeshResources.h:501
FStaticMeshSectionArray Sections
Definition StaticMeshResources.h:430
FAdditionalStaticMeshIndexBuffers * AdditionalIndexBuffers
Definition StaticMeshResources.h:494
FStaticMeshSectionAreaWeightedTriangleSamplerArray AreaWeightedSectionSamplers
Definition StaticMeshResources.h:499
uint32 bHasWireframeIndices
Definition StaticMeshResources.h:458
FByteBulkData StreamingBulkData
Definition StaticMeshResources.h:471
Definition StaticMeshResources.h:698
bool bBuffersInlined
Definition StaticMeshResources.h:713
virtual ENGINE_API bool AreBuffersStreamedIn() const override
Definition StaticMesh.cpp:2068
void SerializeRayTracingGeometry(FArchive &Ar, UStaticMesh *OwnerStaticMesh, uint8 InStripFlags)
Definition StaticMesh.cpp:1985
virtual ENGINE_API void ReleaseBVHForStreaming(FRHIResourceReplaceBatcher &Batcher) override
Definition StaticMesh.cpp:2196
virtual ENGINE_API uint32 GetRequestSizeBuffers() const override
Definition StaticMesh.cpp:2061
void DiscardCPUData()
Definition StaticMesh.cpp:1835
virtual ENGINE_API void InitWithStreamedData(FRHICommandListBase &RHICmdList, FMemoryView StreamedData, bool bBuffersOnly=false) override
Definition StaticMesh.cpp:2115
uint32 OfflineBVHSize
Definition StaticMeshResources.h:709
virtual ENGINE_API uint32 GetRequestSize() const override
Definition StaticMesh.cpp:2047
FStaticMeshSectionArray * Sections
Definition StaticMeshResources.h:701
uint32 OfflineBVHOffset
Definition StaticMeshResources.h:708
bool bRayTracingGeometryStreamedIn
Definition StaticMeshResources.h:715
FByteBulkData StreamableData
Definition StaticMeshResources.h:706
bool bBuffersStreamedIn
Definition StaticMeshResources.h:716
virtual ENGINE_API void ReleaseBuffersForStreaming(FRHIResourceReplaceBatcher &Batcher) override
Definition StaticMesh.cpp:2208
virtual ENGINE_API void ReleaseForStreaming(FRHIResourceReplaceBatcher &Batcher) override
Definition StaticMesh.cpp:2190
virtual ENGINE_API void IssueRequest(FBulkDataBatchRequest &Request, FIoBuffer &RequestBuffer, bool bBuffersOnly=false) override
Definition StaticMesh.cpp:2078
virtual ENGINE_API bool IsBVHStreamedIn() const override
Definition StaticMesh.cpp:2073
bool bOwnsBuffers
Definition StaticMeshResources.h:712
FRawStaticIndexBuffer * IndexBuffer
Definition StaticMeshResources.h:704
bool bOwnsRayTracingGeometry
Definition StaticMeshResources.h:711
virtual ENGINE_API ~FStaticMeshRayTracingProxyLOD()
Definition StaticMesh.cpp:1761
uint32 BuffersSize
Definition StaticMeshResources.h:707
FRayTracingGeometry * RayTracingGeometry
Definition StaticMeshResources.h:699
void InitResources(UStaticMesh *Owner, int32 LODIndex)
Definition StaticMesh.cpp:1776
void ReleaseResources()
Definition StaticMesh.cpp:1818
FStaticMeshVertexBuffers * VertexBuffers
Definition StaticMeshResources.h:703
virtual ENGINE_API uint32 GetRequestSizeBVH() const override
Definition StaticMesh.cpp:2054
void SerializeMetaData(FArchive &Ar)
Definition StaticMesh.cpp:2020
void SerializeBuffers(FArchive &Ar, UStaticMesh *OwnerStaticMesh, uint8 InStripFlags)
Definition StaticMesh.cpp:1964
Definition StaticMeshResources.h:752
FStaticMeshRayTracingProxyLODArray LODs
Definition StaticMeshResources.h:753
~FStaticMeshRayTracingProxy()
Definition StaticMesh.cpp:2226
bool bUsingRenderingLODs
Definition StaticMeshResources.h:756
void InitResources(UStaticMesh *Owner)
Definition StaticMesh.cpp:2234
void ReleaseResources()
Definition StaticMesh.cpp:2247
FStaticMeshVertexFactoriesArray * LODVertexFactories
Definition StaticMeshResources.h:754
Definition StaticMeshResources.h:259
int32 SectionIdx
Definition StaticMeshResources.h:267
virtual ENGINE_API float GetWeights(TArray< float > &OutWeights) override
Definition StaticMesh.cpp:1190
ENGINE_API FStaticMeshSectionAreaWeightedTriangleSampler()
Definition StaticMesh.cpp:1177
FStaticMeshLODResources * Owner
Definition StaticMeshResources.h:266
Definition StaticMeshResources.h:202
bool bVisibleInRayTracing
Definition StaticMeshResources.h:218
ENGINE_API friend FArchive & operator<<(FArchive &Ar, FStaticMeshSection &Section)
Definition StaticMesh.cpp:426
uint32 MinVertexIndex
Definition StaticMeshResources.h:209
bool bEnableCollision
Definition StaticMeshResources.h:213
FStaticMeshSection()
Definition StaticMeshResources.h:232
uint32 NumTriangles
Definition StaticMeshResources.h:208
bool bForceOpaque
Definition StaticMeshResources.h:222
bool bAffectDistanceFieldLighting
Definition StaticMeshResources.h:220
bool bCastShadow
Definition StaticMeshResources.h:216
int32 MaterialIndex
Definition StaticMeshResources.h:204
uint32 MaxVertexIndex
Definition StaticMeshResources.h:210
uint32 FirstIndex
Definition StaticMeshResources.h:207
Definition StaticMeshResources.h:320
void SetOwnerName(FName OwnerName)
Definition StaticMeshResources.h:378
void InitFromDynamicVertex(FRHICommandListBase &RHICmdList, FLocalVertexFactory *VertexFactory, TArray< FDynamicMeshVertex > &Vertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:345
void InitWithDummyData(FRenderCommandPipe *RenderCommandPipe, FLocalVertexFactory *VertexFactory, uint32 NumVertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:335
FColorVertexBuffer ColorVertexBuffer
Definition StaticMeshResources.h:328
void ENGINE_API InitModelBuffers(TArray< FModelVertex > &Vertices)
Definition StaticMesh.cpp:1277
void InitModelVF(FLocalVertexFactory *VertexFactory)
Definition StaticMeshResources.h:373
void InitFromDynamicVertex(FLocalVertexFactory *VertexFactory, TArray< FDynamicMeshVertex > &Vertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:355
void InitModelVF(FRHICommandListBase &RHICmdList, FLocalVertexFactory *VertexFactory)
Definition StaticMeshResources.h:363
void InitWithDummyData(FLocalVertexFactory *VertexFactory, uint32 NumVertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:340
void InitModelVF(FRenderCommandPipe *RenderCommandPipe, FLocalVertexFactory *VertexFactory)
Definition StaticMeshResources.h:368
void InitFromDynamicVertex(FRenderCommandPipe *RenderCommandPipe, FLocalVertexFactory *VertexFactory, TArray< FDynamicMeshVertex > &Vertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:350
void ENGINE_API InitComponentVF(FLocalVertexFactory *VertexFactory, int32 LightMapCoordinateIndex, bool bOverrideColorVertexBuffer, FLocalVertexFactory::FDataType &OutDat) const
Definition StaticMesh.cpp:1261
FStaticMeshVertexBuffer StaticMeshVertexBuffer
Definition StaticMeshResources.h:322
void InitWithDummyData(FRHICommandListBase &RHICmdList, FLocalVertexFactory *VertexFactory, uint32 NumVertices, uint32 NumTexCoords=1, uint32 LightMapIndex=0)
Definition StaticMeshResources.h:330
FPositionVertexBuffer PositionVertexBuffer
Definition StaticMeshResources.h:325
Definition StaticMeshResources.h:643
ENGINE_API void ReleaseResources()
Definition StaticMesh.cpp:1155
FLocalVertexFactory VertexFactory
Definition StaticMeshResources.h:657
ENGINE_API void InitVertexFactory(const FStaticMeshVertexBuffers &VertexBuffers, FLocalVertexFactory &InOutVertexFactory, uint32 LODIndex, const UStaticMesh *InParentMesh, bool bInOverrideColorVertexBuffer)
Definition StaticMesh.cpp:1075
ENGINE_API ~FStaticMeshVertexFactories()
Definition StaticMesh.cpp:1171
struct FSplineMeshVertexFactory * SplineVertexFactoryOverrideColorVertexBuffer
Definition StaticMeshResources.h:664
struct FSplineMeshVertexFactory * SplineVertexFactory
Definition StaticMeshResources.h:662
FStaticMeshVertexFactories(ERHIFeatureLevel::Type InFeatureLevel)
Definition StaticMeshResources.h:644
ENGINE_API void InitResources(const FStaticMeshVertexBuffers &VertexBuffers, uint32 LODIndex, const UStaticMesh *Parent)
Definition StaticMesh.cpp:1146
FLocalVertexFactory VertexFactoryOverrideColorVertexBuffer
Definition StaticMeshResources.h:660
Definition WeightedRandomSampler.h:30
Definition IsContiguousContainer.h:16
Definition UnrealTypeTraits.h:172
Definition PimplPtr.h:50
Definition BoxSphereBounds.h:25
T Y
Definition Vector2D.h:52
T X
Definition Vector2D.h:49
static CORE_API const TVector2< double > ZeroVector
Definition Vector2D.h:63
T Y
Definition Vector4.h:46
T Z
Definition Vector4.h:49
T W
Definition Vector4.h:52
T X
Definition Vector4.h:43