You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
82 lines
2.9 KiB
C++
82 lines
2.9 KiB
C++
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "EditableMeshFactory.h"
|
|
#include "Features/IModularFeatures.h"
|
|
#include "IEditableMeshFormat.h"
|
|
|
|
|
|
FEditableMeshSubMeshAddress UEditableMeshFactory::MakeSubmeshAddress( UPrimitiveComponent* PrimitiveComponent, const int32 LODIndex )
|
|
{
|
|
check( PrimitiveComponent != nullptr );
|
|
|
|
FEditableMeshSubMeshAddress SubMeshAddress;
|
|
|
|
const int32 NumEditableMeshFormats = IModularFeatures::Get().GetModularFeatureImplementationCount( "EditableMeshFormat" );
|
|
for( int32 EditableMeshFormatIndex = 0; EditableMeshFormatIndex < NumEditableMeshFormats; ++EditableMeshFormatIndex )
|
|
{
|
|
IEditableMeshFormat& EditableMeshFormat = *static_cast<IEditableMeshFormat*>( IModularFeatures::Get().GetModularFeatureImplementation( "EditableMeshFormat", EditableMeshFormatIndex ) );
|
|
|
|
SubMeshAddress = FEditableMeshSubMeshAddress();
|
|
SubMeshAddress.MeshObjectPtr = nullptr; // This will be filled in below (FillMeshObjectPtr)
|
|
SubMeshAddress.EditableMeshFormat = &EditableMeshFormat;
|
|
SubMeshAddress.LODIndex = LODIndex;
|
|
EditableMeshFormat.FillMeshObjectPtr( *PrimitiveComponent, SubMeshAddress ); // @todo mesheditor: This stuff is a bit clunky, would like to refactor it
|
|
if( SubMeshAddress.MeshObjectPtr != nullptr )
|
|
{
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
SubMeshAddress = FEditableMeshSubMeshAddress();
|
|
}
|
|
}
|
|
|
|
return SubMeshAddress;
|
|
}
|
|
|
|
|
|
FEditableMeshSubMeshAddress UEditableMeshFactory::MakeSubmeshAddress( UStaticMesh& StaticMesh, const int32 LODIndex )
|
|
{
|
|
FEditableMeshSubMeshAddress SubMeshAddress;
|
|
|
|
const int32 NumEditableMeshFormats = IModularFeatures::Get().GetModularFeatureImplementationCount("EditableMeshFormat");
|
|
|
|
if(NumEditableMeshFormats > 0)
|
|
{
|
|
IEditableMeshFormat& EditableMeshFormat = *static_cast<IEditableMeshFormat*>(IModularFeatures::Get().GetModularFeatureImplementation("EditableMeshFormat", 0));
|
|
|
|
SubMeshAddress = FEditableMeshSubMeshAddress();
|
|
SubMeshAddress.MeshObjectPtr = &StaticMesh;
|
|
SubMeshAddress.EditableMeshFormat = &EditableMeshFormat;
|
|
SubMeshAddress.LODIndex = LODIndex;
|
|
}
|
|
|
|
return SubMeshAddress;
|
|
}
|
|
|
|
UEditableMesh* UEditableMeshFactory::MakeEditableMesh( UPrimitiveComponent* PrimitiveComponent, const int32 LODIndex )
|
|
{
|
|
check( PrimitiveComponent != nullptr );
|
|
|
|
FEditableMeshSubMeshAddress SubMeshAddress = MakeSubmeshAddress( PrimitiveComponent, LODIndex );
|
|
return MakeEditableMesh( PrimitiveComponent, SubMeshAddress );
|
|
}
|
|
|
|
|
|
UEditableMesh* UEditableMeshFactory::MakeEditableMesh( UPrimitiveComponent* PrimitiveComponent, const FEditableMeshSubMeshAddress& SubMeshAddress )
|
|
{
|
|
check( PrimitiveComponent != nullptr );
|
|
UEditableMesh* EditableMesh = nullptr;
|
|
|
|
if( SubMeshAddress.EditableMeshFormat != nullptr &&
|
|
SubMeshAddress.MeshObjectPtr != nullptr )
|
|
{
|
|
// @todo mesheditor perf: This is going to HITCH
|
|
EditableMesh = SubMeshAddress.EditableMeshFormat->MakeEditableMesh( *PrimitiveComponent, SubMeshAddress );
|
|
}
|
|
|
|
return EditableMesh;
|
|
}
|
|
|
|
|