Files
UnrealEngine/Engine/Plugins/Mutable/Source/CustomizableObject/Internal/MuCO/MutableMeshBufferUtils.h
2025-05-18 13:04:45 +08:00

86 lines
4.7 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "HAL/Platform.h"
#include "UObject/NameTypes.h"
#include "Containers/Map.h"
#include "Containers/Array.h"
#include "UObject/ObjectPtr.h"
#include "BoneIndices.h"
class USkeletalMesh;
namespace mu { class FMeshBufferSet; }
/** Publicly accessible methods designed to prepare the Mutable Mesh buffers with the internal structure required by Unreal and
* our systems to be able to work with the mesh owning those buffers.
*/
namespace MutableMeshBufferUtils
{
// VERTEX BUFFERS
/** Determines the max amount of channels that can inhabit a Texture Coordinate buffer. */
constexpr int32 MaxTexCordChannelCount = 4;
/**
* Sets up all the channels that ought to be part of the Vertex Position Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupVertexPositionsBuffer(const int32& InCurrentVertexBuffer, mu::FMeshBufferSet& OutTargetVertexBuffers);
/**
* Sets up all the channels that ought to be part of the Vertex Tangent Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupTangentBuffer(const int32& InCurrentVertexBuffer, mu::FMeshBufferSet& OutTargetVertexBuffers);
/**
* Sets up all the channels that ought to be part of the Vertex Texture Coordinates Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param InChannelCount Determines the amount of TexCord channels able to be added onto the buffer.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
* @param InTextureSemanticIndicesOverride (Optional) If you are certain of the texture semantic indices that should be used populate this argument, if not, leave it as null
*/
CUSTOMIZABLEOBJECT_API void SetupTexCoordinatesBuffer(const int32& InCurrentVertexBuffer,const int32& InChannelCount, bool bHighPrecision, mu::FMeshBufferSet& OutTargetVertexBuffers, const int32* InTextureSemanticIndicesOverride = nullptr);
/**
* Sets up all the channels that ought to be part of the Vertex Skin Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param MaxBoneIndexTypeSizeBytes Maximum size of the vertex bone index type.
* @param MaxNumBonesPerVertex Amount of bone influences a vertex can have.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupSkinBuffer(const int32& InCurrentVertexBuffer,const int32& MaxBoneIndexTypeSizeBytes, const int32& MaxBoneWeightTypeSizeBytes,
const int32& MaxNumBonesPerVertex, mu::FMeshBufferSet& OutTargetVertexBuffers);
/**
* Sets up all the channels that ought to be part of the Vertex Color Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupVertexColorBuffer(const int32& InCurrentVertexBuffer, mu::FMeshBufferSet& OutTargetVertexBuffers);
// INDEX BUFFERS
/**
* Sets up all the channels that ought to be part of the Index Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param OutTargetIndexBuffers Index buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupIndexBuffer(mu::FMeshBufferSet& OutTargetIndexBuffers);
/**
* Sets up all the channels that ought to be part of the Vertex SkinWeightProfile Buffer of the Mutable mesh owning the provided MeshBufferSet
* @param InCurrentVertexBuffer Index of the Vertex Buffer being set up inside the OutTargetVertexBuffers.
* @param MaxBoneIndexTypeSizeBytes Maximum size of the vertex bone index type.
* @param MaxBoneWeightTypeSizeBytes Maximum size of the vertex bone weight type.
* @param MaxNumBonesPerVertex Amount of bone influences a vertex can have.
* @param SemanticsIndex External Id that identifies a SkinWeightProfile.
* @param OutTargetVertexBuffers Mesh buffer to be set up.
*/
CUSTOMIZABLEOBJECT_API void SetupSkinWeightProfileBuffer(const int32& InCurrentVertexBuffer, const int32& MaxBoneIndexTypeSizeBytes,const int32& MaxBoneWeightTypeSizeBytes, const int32& MaxNumBonesPerVertex,
const int32 SemanticsIndex, mu::FMeshBufferSet& OutTargetVertexBuffers);
}