// Copyright Epic Games, Inc. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "MeshBuilder.h" DECLARE_LOG_CATEGORY_EXTERN(LogStaticMeshBuilder, Log, All); class ITargetPlatform; class UStaticMesh; class FStaticMeshRenderData; class FStaticMeshLODGroup; struct FOverlappingCorners; struct FMeshDescription; struct FMeshBuildSettings; class MESHBUILDER_API FStaticMeshBuilder : public FMeshBuilder { public: FStaticMeshBuilder(); virtual ~FStaticMeshBuilder() {} virtual bool Build(FStaticMeshRenderData& OutRenderData, const FStaticMeshBuildParameters& BuildParameters) override; //No support for skeletal mesh build in this class virtual bool Build(FSkeletalMeshRenderData& OutRenderData, const struct FSkeletalMeshBuildParameters& SkeletalMeshBuildParameters) override { bool No_Support_For_SkeletalMesh_Build_In_FStaticMeshBuilder_Class = false; check(No_Support_For_SkeletalMesh_Build_In_FStaticMeshBuilder_Class); return false; } virtual bool BuildMeshVertexPositions( UStaticMesh* StaticMesh, TArray& Indices, TArray& Vertices, FStaticMeshSectionArray& Sections) override; private: void OnBuildRenderMeshStart(class UStaticMesh* StaticMesh, const bool bInvalidateLighting); void OnBuildRenderMeshFinish(class UStaticMesh* StaticMesh, const bool bRebuildBoundsAndCollision); /** Used to refresh all components in the scene that may be using a mesh we're editing */ TSharedPtr RecreateRenderStateContext; }; namespace UE::Private::StaticMeshBuilder { MESHBUILDER_API void BuildVertexBuffer( UStaticMesh* StaticMesh, const FMeshDescription& MeshDescription, const FMeshBuildSettings& BuildSettings, TArray& OutWedgeMap, FStaticMeshSectionArray& OutSections, TArray>& OutPerSectionIndices, FMeshBuildVertexData& BuildVertexData, const FOverlappingCorners& OverlappingCorners, TArray& RemapVerts, FBoxSphereBounds& MeshBounds, bool bNeedTangents, bool bNeedWedgeMap ); MESHBUILDER_API void BuildCombinedSectionIndices( const TArray>& PerSectionIndices, FStaticMeshSectionArray& SectionsOut, TArray& CombinedIndicesOut, bool& bNeeds32BitIndicesOut); }