Files
UnrealEngineUWP/Engine/Source/Runtime/GeometryFramework/Private/DynamicMeshActor.cpp
ryan schmidt 8f95100e14 GeometryScripting: move in-editor generated-mesh functionality from DynamicMeshActor to a subclass GeneratedDynamicMeshActor in experimental GeometryScriptingEditor module. Add EditorGeometryGenerationSubsystem to provide tick for mesh regeneration, instead of relying on Actor tick-in-Editor, which can be throttled by slate interaction (and is generally problematic).
#rb none
#rnx
#jira none
#preflight 6156250b9dc4c500012f56eb

#ROBOMERGE-AUTHOR: ryan.schmidt
#ROBOMERGE-SOURCE: CL 17685256 in //UE5/Release-5.0/... via CL 17685594 via CL 17685601
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Test -> Main) (v875-17642767)

[CL 17685620 by ryan schmidt in ue5-main branch]
2021-09-30 20:09:07 -04:00

87 lines
1.9 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "DynamicMeshActor.h"
#include "Materials/Material.h"
#define LOCTEXT_NAMESPACE "ADynamicMeshActor"
ADynamicMeshActor::ADynamicMeshActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
DynamicMeshComponent = CreateDefaultSubobject<UDynamicMeshComponent>(TEXT("DynamicMeshComponent"));
DynamicMeshComponent->SetMobility(EComponentMobility::Movable);
DynamicMeshComponent->SetGenerateOverlapEvents(false);
DynamicMeshComponent->SetCollisionProfileName(UCollisionProfile::BlockAll_ProfileName);
DynamicMeshComponent->CollisionType = ECollisionTraceFlag::CTF_UseDefault;
DynamicMeshComponent->SetMaterial(0, UMaterial::GetDefaultMaterial(MD_Surface)); // is this necessary?
SetRootComponent(DynamicMeshComponent);
}
UDynamicMeshPool* ADynamicMeshActor::GetComputeMeshPool()
{
if (DynamicMeshPool == nullptr && bEnableComputeMeshPool)
{
DynamicMeshPool = NewObject<UDynamicMeshPool>();
}
return DynamicMeshPool;
}
UDynamicMesh* ADynamicMeshActor::AllocateComputeMesh()
{
if (bEnableComputeMeshPool)
{
UDynamicMeshPool* UsePool = GetComputeMeshPool();
if (UsePool)
{
return UsePool->RequestMesh();
}
}
// if we could not return a pool mesh, allocate a new mesh that isn't owned by the pool
return NewObject<UDynamicMesh>(this);
}
bool ADynamicMeshActor::ReleaseComputeMesh(UDynamicMesh* Mesh)
{
if (bEnableComputeMeshPool && Mesh)
{
UDynamicMeshPool* UsePool = GetComputeMeshPool();
if (UsePool != nullptr)
{
UsePool->ReturnMesh(Mesh);
return true;
}
}
return false;
}
void ADynamicMeshActor::ReleaseAllComputeMeshes()
{
UDynamicMeshPool* UsePool = GetComputeMeshPool();
if (UsePool)
{
UsePool->ReturnAllMeshes();
}
}
void ADynamicMeshActor::FreeAllComputeMeshes()
{
UDynamicMeshPool* UsePool = GetComputeMeshPool();
if (UsePool)
{
UsePool->FreeAllMeshes();
}
}
#undef LOCTEXT_NAMESPACE