Fix Actor lod levels and material indexes uint32->size_t
Signed-off-by: Chris Burel <burelc@amazon.com>
This commit is contained in:
@@ -430,7 +430,7 @@ namespace ExporterLib
|
||||
MCore::LogInfo("============================================================");
|
||||
|
||||
// get all nodes that are affected by the skin
|
||||
AZStd::vector<uint32> bones;
|
||||
AZStd::vector<size_t> bones;
|
||||
if (actor)
|
||||
{
|
||||
actor->ExtractBoneList(0, &bones);
|
||||
|
||||
@@ -653,7 +653,7 @@ namespace MCommon
|
||||
|
||||
|
||||
// render the advanced skeleton
|
||||
void RenderUtil::RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<uint32>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices, const AZStd::unordered_set<AZ::u32>* selectedJointIndices, const MCore::RGBAColor& color, const MCore::RGBAColor& selectedColor)
|
||||
void RenderUtil::RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<size_t>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices, const AZStd::unordered_set<AZ::u32>* selectedJointIndices, const MCore::RGBAColor& color, const MCore::RGBAColor& selectedColor)
|
||||
{
|
||||
// check if our render util supports rendering meshes, if not render the fallback skeleton using lines only
|
||||
if (GetIsMeshRenderingSupported() == false)
|
||||
@@ -670,15 +670,15 @@ namespace MCommon
|
||||
|
||||
// iterate through all enabled nodes
|
||||
MCore::RGBAColor tempColor;
|
||||
const uint32 numEnabled = actorInstance->GetNumEnabledNodes();
|
||||
for (uint32 i = 0; i < numEnabled; ++i)
|
||||
const size_t numEnabled = actorInstance->GetNumEnabledNodes();
|
||||
for (size_t i = 0; i < numEnabled; ++i)
|
||||
{
|
||||
EMotionFX::Node* joint = skeleton->GetNode(actorInstance->GetEnabledNode(i));
|
||||
const AZ::u32 jointIndex = joint->GetNodeIndex();
|
||||
const AZ::u32 parentIndex = joint->GetParentIndex();
|
||||
const size_t jointIndex = joint->GetNodeIndex();
|
||||
const size_t parentIndex = joint->GetParentIndex();
|
||||
|
||||
// check if this node has a parent and is a bone, if not skip it
|
||||
if (parentIndex == MCORE_INVALIDINDEX32 || AZStd::find(begin(boneList), end(boneList), jointIndex) == end(boneList))
|
||||
if (parentIndex == InvalidIndex || AZStd::find(begin(boneList), end(boneList), jointIndex) == end(boneList))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -715,7 +715,7 @@ namespace MCommon
|
||||
|
||||
|
||||
// render node orientations
|
||||
void RenderUtil::RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<uint32>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices, const AZStd::unordered_set<AZ::u32>* selectedJointIndices, float scale, bool scaleBonesOnLength)
|
||||
void RenderUtil::RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<size_t>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices, const AZStd::unordered_set<AZ::u32>* selectedJointIndices, float scale, bool scaleBonesOnLength)
|
||||
{
|
||||
// get the actor and the transform data
|
||||
const float unitScale = 1.0f / (float)MCore::Distance::ConvertValue(1.0f, MCore::Distance::UNITTYPE_METERS, EMotionFX::GetEMotionFX().GetUnitType());
|
||||
@@ -726,18 +726,18 @@ namespace MCommon
|
||||
const float constPreScale = scale * unitScale * 3.0f;
|
||||
AxisRenderingSettings axisRenderingSettings;
|
||||
|
||||
const uint32 numEnabled = actorInstance->GetNumEnabledNodes();
|
||||
for (uint32 i = 0; i < numEnabled; ++i)
|
||||
const size_t numEnabled = actorInstance->GetNumEnabledNodes();
|
||||
for (size_t i = 0; i < numEnabled; ++i)
|
||||
{
|
||||
EMotionFX::Node* joint = skeleton->GetNode(actorInstance->GetEnabledNode(i));
|
||||
const AZ::u32 jointIndex = joint->GetNodeIndex();
|
||||
const AZ::u32 parentIndex = joint->GetParentIndex();
|
||||
const size_t jointIndex = joint->GetNodeIndex();
|
||||
const size_t parentIndex = joint->GetParentIndex();
|
||||
|
||||
if (!visibleJointIndices || visibleJointIndices->empty() ||
|
||||
(visibleJointIndices->find(jointIndex) != visibleJointIndices->end()))
|
||||
{
|
||||
// either scale the bones based on their length or use the normal size
|
||||
if (scaleBonesOnLength && parentIndex != MCORE_INVALIDINDEX32 && AZStd::find(begin(boneList), end(boneList), jointIndex) != end(boneList))
|
||||
if (scaleBonesOnLength && parentIndex != InvalidIndex && AZStd::find(begin(boneList), end(boneList), jointIndex) != end(boneList))
|
||||
{
|
||||
static const float axisBoneScale = 50.0f;
|
||||
axisRenderingSettings.mSize = GetBoneScale(actorInstance, joint) * constPreScale * axisBoneScale;
|
||||
|
||||
@@ -191,7 +191,7 @@ namespace MCommon
|
||||
* @param[in] color The desired skeleton color.
|
||||
* @param[in] selectedColor The color of the selected bones.
|
||||
*/
|
||||
void RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<uint32>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices = nullptr, const AZStd::unordered_set<AZ::u32>* selectedJointIndices = nullptr, const MCore::RGBAColor& color = MCore::RGBAColor(1.0f, 0.0f, 0.0f, 1.0f), const MCore::RGBAColor& selectedColor = MCore::RGBAColor(1.0f, 0.647f, 0.0f));
|
||||
void RenderSkeleton(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<size_t>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices = nullptr, const AZStd::unordered_set<AZ::u32>* selectedJointIndices = nullptr, const MCore::RGBAColor& color = MCore::RGBAColor(1.0f, 0.0f, 0.0f, 1.0f), const MCore::RGBAColor& selectedColor = MCore::RGBAColor(1.0f, 0.647f, 0.0f));
|
||||
|
||||
/**
|
||||
* Render node orientations.
|
||||
@@ -202,7 +202,7 @@ namespace MCommon
|
||||
* @param[in] scale The scaling value in units. Axes of normal nodes will use the scaling value as unit length, skinned bones will use the scaling value as multiplier.
|
||||
* @param[in] scaleBonesOnLength Automatically scales the bone orientations based on the bone length. This means finger node orientations will be rendered smaller than foot bones as the bone length is a lot smaller as well.
|
||||
*/
|
||||
void RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<uint32>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices = nullptr, const AZStd::unordered_set<AZ::u32>* selectedJointIndices = nullptr, float scale = 1.0f, bool scaleBonesOnLength = true);
|
||||
void RenderNodeOrientations(EMotionFX::ActorInstance* actorInstance, const AZStd::vector<size_t>& boneList, const AZStd::unordered_set<AZ::u32>* visibleJointIndices = nullptr, const AZStd::unordered_set<AZ::u32>* selectedJointIndices = nullptr, float scale = 1.0f, bool scaleBonesOnLength = true);
|
||||
|
||||
/**
|
||||
* Render the bind pose of the given actor.
|
||||
|
||||
@@ -79,7 +79,7 @@ namespace EMotionFX
|
||||
mRetargetRootNode = InvalidIndex;
|
||||
mThreadIndex = 0;
|
||||
mCustomData = nullptr;
|
||||
mID = MCore::GetIDGenerator().GenerateID();
|
||||
mID = aznumeric_caster(MCore::GetIDGenerator().GenerateID());
|
||||
mUnitType = GetEMotionFX().GetUnitType();
|
||||
mFileUnitType = mUnitType;
|
||||
m_staticAabb = AZ::Aabb::CreateNull();
|
||||
@@ -149,21 +149,13 @@ namespace EMotionFX
|
||||
|
||||
// clone the materials
|
||||
result->mMaterials.resize(mMaterials.size());
|
||||
for (uint32 i = 0; i < mMaterials.size(); ++i)
|
||||
for (size_t i = 0; i < mMaterials.size(); ++i)
|
||||
{
|
||||
// get the number of materials in the current LOD
|
||||
const uint32 numMaterials = mMaterials[i].size();
|
||||
result->mMaterials[i].reserve(numMaterials);
|
||||
for (uint32 m = 0; m < numMaterials; ++m)
|
||||
result->mMaterials[i].reserve(mMaterials[i].size());
|
||||
for (const Material* material : mMaterials[i])
|
||||
{
|
||||
// retrieve the current material
|
||||
Material* material = mMaterials[i][m];
|
||||
|
||||
// clone the material
|
||||
Material* clone = material->Clone();
|
||||
|
||||
// add the cloned material to the cloned actor
|
||||
result->AddMaterial(i, clone);
|
||||
result->AddMaterial(i, material->Clone());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -195,7 +187,7 @@ namespace EMotionFX
|
||||
|
||||
// clone the morph setups
|
||||
result->mMorphSetups.resize(mMorphSetups.size());
|
||||
for (uint32 i = 0; i < mMorphSetups.size(); ++i)
|
||||
for (size_t i = 0; i < mMorphSetups.size(); ++i)
|
||||
{
|
||||
if (mMorphSetups[i])
|
||||
{
|
||||
@@ -326,13 +318,13 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// insert a LOD level at a given position
|
||||
void Actor::InsertLODLevel(uint32 insertAt)
|
||||
void Actor::InsertLODLevel(size_t insertAt)
|
||||
{
|
||||
AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
|
||||
lodLevels.emplace(lodLevels.begin()+insertAt);
|
||||
LODLevel& newLOD = lodLevels[insertAt];
|
||||
const uint32 lodIndex = insertAt;
|
||||
const size_t lodIndex = insertAt;
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
newLOD.mNodeInfos.resize(numNodes);
|
||||
|
||||
@@ -352,7 +344,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// replace existing LOD level with the current actor
|
||||
void Actor::CopyLODLevel(Actor* copyActor, uint32 copyLODLevel, uint32 replaceLODLevel, bool copySkeletalLODFlags)
|
||||
void Actor::CopyLODLevel(Actor* copyActor, size_t copyLODLevel, size_t replaceLODLevel, bool copySkeletalLODFlags)
|
||||
{
|
||||
AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
AZStd::vector<LODLevel>& copyLodLevels = copyActor->m_meshLodData.m_lodLevels;
|
||||
@@ -433,7 +425,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// preallocate memory for all LOD levels
|
||||
void Actor::SetNumLODLevels(uint32 numLODs, bool adjustMorphSetup)
|
||||
void Actor::SetNumLODLevels(size_t numLODs, bool adjustMorphSetup)
|
||||
{
|
||||
m_meshLodData.m_lodLevels.resize(numLODs);
|
||||
|
||||
@@ -467,7 +459,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void Actor::CalcMeshTotals(uint32 lodLevel, uint32* outNumPolygons, uint32* outNumVertices, uint32* outNumIndices) const
|
||||
void Actor::CalcMeshTotals(size_t lodLevel, uint32* outNumPolygons, uint32* outNumVertices, uint32* outNumIndices) const
|
||||
{
|
||||
uint32 totalPolys = 0;
|
||||
uint32 totalVerts = 0;
|
||||
@@ -504,7 +496,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void Actor::CalcStaticMeshTotals(uint32 lodLevel, uint32* outNumVertices, uint32* outNumIndices)
|
||||
void Actor::CalcStaticMeshTotals(size_t lodLevel, uint32* outNumVertices, uint32* outNumIndices)
|
||||
{
|
||||
// the totals
|
||||
uint32 totalVerts = 0;
|
||||
@@ -548,7 +540,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void Actor::CalcDeformableMeshTotals(uint32 lodLevel, uint32* outNumVertices, uint32* outNumIndices)
|
||||
void Actor::CalcDeformableMeshTotals(size_t lodLevel, uint32* outNumVertices, uint32* outNumIndices)
|
||||
{
|
||||
// the totals
|
||||
uint32 totalVerts = 0;
|
||||
@@ -592,9 +584,9 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
uint32 Actor::CalcMaxNumInfluences(uint32 lodLevel) const
|
||||
size_t Actor::CalcMaxNumInfluences(size_t lodLevel) const
|
||||
{
|
||||
uint32 maxInfluences = 0;
|
||||
size_t maxInfluences = 0;
|
||||
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
@@ -605,7 +597,7 @@ namespace EMotionFX
|
||||
continue;
|
||||
}
|
||||
|
||||
maxInfluences = MCore::Max<uint32>(maxInfluences, mesh->CalcMaxNumInfluences());
|
||||
maxInfluences = AZStd::max(maxInfluences, mesh->CalcMaxNumInfluences());
|
||||
}
|
||||
|
||||
return maxInfluences;
|
||||
@@ -613,10 +605,8 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// verify if the skinning will look correctly in the given geometry LOD for a given skeletal LOD level
|
||||
void Actor::VerifySkinning(AZStd::vector<uint8>& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel)
|
||||
void Actor::VerifySkinning(AZStd::vector<uint8>& conflictNodeFlags, size_t skeletalLODLevel, size_t geometryLODLevel)
|
||||
{
|
||||
uint32 n;
|
||||
|
||||
// get the number of nodes
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
|
||||
@@ -630,7 +620,7 @@ namespace EMotionFX
|
||||
MCore::MemSet(conflictNodeFlags.data(), 0, numNodes * sizeof(int8));
|
||||
|
||||
// iterate over the all nodes in the actor
|
||||
for (n = 0; n < numNodes; ++n)
|
||||
for (size_t n = 0; n < numNodes; ++n)
|
||||
{
|
||||
// get the current node and the pointer to the mesh for the given lod level
|
||||
Node* node = mSkeleton->GetNode(n);
|
||||
@@ -672,19 +662,15 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
uint32 Actor::CalcMaxNumInfluences(uint32 lodLevel, AZStd::vector<uint32>& outVertexCounts) const
|
||||
size_t Actor::CalcMaxNumInfluences(size_t lodLevel, AZStd::vector<size_t>& outVertexCounts) const
|
||||
{
|
||||
uint32 maxInfluences = 0;
|
||||
|
||||
// Reset the values.
|
||||
outVertexCounts.resize(CalcMaxNumInfluences(lodLevel) + 1);
|
||||
for (size_t k = 0; k < outVertexCounts.size(); ++k)
|
||||
{
|
||||
outVertexCounts[k] = 0;
|
||||
}
|
||||
AZStd::fill(begin(outVertexCounts), end(outVertexCounts), 0);
|
||||
|
||||
// Get the vertex counts for the influences. (e.g. 500 vertices have 1 skinning influence, 300 vertices have 2 skinning influences etc.)
|
||||
AZStd::vector<uint32> meshVertexCounts;
|
||||
size_t maxInfluences = 0;
|
||||
AZStd::vector<size_t> meshVertexCounts;
|
||||
const size_t numNodes = GetNumNodes();
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
@@ -694,8 +680,8 @@ namespace EMotionFX
|
||||
continue;
|
||||
}
|
||||
|
||||
const uint32 meshMaxInfluences = mesh->CalcMaxNumInfluences(meshVertexCounts);
|
||||
maxInfluences = MCore::Max<uint32>(maxInfluences, meshMaxInfluences);
|
||||
const size_t meshMaxInfluences = mesh->CalcMaxNumInfluences(meshVertexCounts);
|
||||
maxInfluences = AZStd::max(maxInfluences, meshMaxInfluences);
|
||||
|
||||
for (size_t j = 0; j < meshVertexCounts.size(); ++j)
|
||||
{
|
||||
@@ -724,7 +710,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
bool Actor::CheckIfHasSkinnedMeshes(AZ::u32 lodLevel) const
|
||||
bool Actor::CheckIfHasSkinnedMeshes(size_t lodLevel) const
|
||||
{
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
@@ -763,14 +749,14 @@ namespace EMotionFX
|
||||
const size_t numLODs = GetNumLODLevels();
|
||||
|
||||
// for all LODs, get rid of all the morph setups for each geometry LOD
|
||||
for (uint32 i = 0; i < mMorphSetups.size(); ++i)
|
||||
for (MorphSetup* mMorphSetup : mMorphSetups)
|
||||
{
|
||||
if (mMorphSetups[i])
|
||||
if (mMorphSetup)
|
||||
{
|
||||
mMorphSetups[i]->Destroy();
|
||||
mMorphSetup->Destroy();
|
||||
}
|
||||
|
||||
mMorphSetups[i] = nullptr;
|
||||
mMorphSetup = nullptr;
|
||||
}
|
||||
|
||||
// remove all modifiers from the stacks for each lod in all nodes
|
||||
@@ -781,7 +767,7 @@ namespace EMotionFX
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
// process all LOD levels
|
||||
for (uint32 lod = 0; lod < numLODs; ++lod)
|
||||
for (size_t lod = 0; lod < numLODs; ++lod)
|
||||
{
|
||||
// if we have a modifier stack
|
||||
MeshDeformerStack* stack = GetMeshDeformerStack(lod, i);
|
||||
@@ -805,7 +791,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// check if the material is used by the given mesh
|
||||
bool Actor::CheckIfIsMaterialUsed(Mesh* mesh, uint32 materialIndex) const
|
||||
bool Actor::CheckIfIsMaterialUsed(Mesh* mesh, size_t materialIndex) const
|
||||
{
|
||||
// check if the mesh is valid
|
||||
if (mesh == nullptr)
|
||||
@@ -829,7 +815,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// check if the material is used by a mesh of this actor
|
||||
bool Actor::CheckIfIsMaterialUsed(uint32 lodLevel, uint32 index) const
|
||||
bool Actor::CheckIfIsMaterialUsed(size_t lodLevel, size_t index) const
|
||||
{
|
||||
// iterate through all nodes of the actor and check its meshes
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
@@ -848,7 +834,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// remove the given material and reassign all material numbers of the submeshes
|
||||
void Actor::RemoveMaterial(uint32 lodLevel, uint32 index)
|
||||
void Actor::RemoveMaterial(size_t lodLevel, size_t index)
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
|
||||
@@ -865,7 +851,7 @@ namespace EMotionFX
|
||||
|
||||
// the maximum number of children of a root node, the node with the most children
|
||||
// will become our repositioning node
|
||||
uint32 maxNumChilds = 0;
|
||||
size_t maxNumChilds = 0;
|
||||
|
||||
// traverse through all root nodes
|
||||
const size_t numRootNodes = mSkeleton->GetNumRootNodes();
|
||||
@@ -898,7 +884,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// extract a bone list
|
||||
void Actor::ExtractBoneList(uint32 lodLevel, AZStd::vector<uint32>* outBoneList) const
|
||||
void Actor::ExtractBoneList(size_t lodLevel, AZStd::vector<size_t>* outBoneList) const
|
||||
{
|
||||
// clear the existing items
|
||||
outBoneList->clear();
|
||||
@@ -927,8 +913,8 @@ namespace EMotionFX
|
||||
for (uint32 v = 0; v < numOrgVerts; ++v)
|
||||
{
|
||||
// for all influences for this vertex
|
||||
const uint32 numInfluences = aznumeric_cast<uint32>(skinningLayer->GetNumInfluences(v));
|
||||
for (uint32 i = 0; i < numInfluences; ++i)
|
||||
const size_t numInfluences = skinningLayer->GetNumInfluences(v);
|
||||
for (size_t i = 0; i < numInfluences; ++i)
|
||||
{
|
||||
// get the node number of the bone
|
||||
uint16 nodeNr = skinningLayer->GetInfluence(v, i)->GetNodeNr();
|
||||
@@ -1122,7 +1108,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// find the first active parent node in a given skeletal LOD
|
||||
size_t Actor::FindFirstActiveParentBone(uint32 skeletalLOD, size_t startNodeIndex) const
|
||||
size_t Actor::FindFirstActiveParentBone(size_t skeletalLOD, size_t startNodeIndex) const
|
||||
{
|
||||
size_t curNodeIndex = startNodeIndex;
|
||||
|
||||
@@ -1290,7 +1276,7 @@ namespace EMotionFX
|
||||
Node* node = mSkeleton->GetNode(i);
|
||||
|
||||
// iterate through all LOD levels
|
||||
for (uint32 lodLevel = 0; lodLevel < numLODLevels; ++lodLevel)
|
||||
for (size_t lodLevel = 0; lodLevel < numLODLevels; ++lodLevel)
|
||||
{
|
||||
// reinit the mesh deformer stacks
|
||||
MeshDeformerStack* stack = GetMeshDeformerStack(lodLevel, i);
|
||||
@@ -1493,10 +1479,10 @@ namespace EMotionFX
|
||||
{
|
||||
outPoints.clear();
|
||||
|
||||
const uint32 geomLODLevel = 0;
|
||||
const size_t geomLODLevel = 0;
|
||||
const size_t numNodes = mSkeleton->GetNumNodes();
|
||||
|
||||
for (int nodeIndex = 0; nodeIndex < numNodes; nodeIndex++)
|
||||
for (size_t nodeIndex = 0; nodeIndex < numNodes; nodeIndex++)
|
||||
{
|
||||
// check if this node has a mesh, if not we can skip it
|
||||
Mesh* mesh = GetMesh(geomLODLevel, nodeIndex);
|
||||
@@ -1744,7 +1730,7 @@ namespace EMotionFX
|
||||
const Transform nodeTransform = pose.GetModelSpaceTransform(nodeIndex);
|
||||
const Transform mirroredTransform = nodeTransform.Mirrored(AZ::Vector3(1.0f, 0.0f, 0.0f));
|
||||
|
||||
uint32 numMatches = 0;
|
||||
size_t numMatches = 0;
|
||||
uint16 result = MCORE_INVALIDINDEX16;
|
||||
|
||||
// find nodes that have the mirrored transform
|
||||
@@ -1793,8 +1779,8 @@ namespace EMotionFX
|
||||
Pose& bindPose = *mSkeleton->GetBindPose();
|
||||
bindPose.LinkToActor(this, Pose::FLAG_LOCALTRANSFORMREADY, false);
|
||||
|
||||
const AZ::u32 numMorphs = bindPose.GetNumMorphWeights();
|
||||
for (AZ::u32 i = 0; i < numMorphs; ++i)
|
||||
const size_t numMorphs = bindPose.GetNumMorphWeights();
|
||||
for (size_t i = 0; i < numMorphs; ++i)
|
||||
{
|
||||
bindPose.SetMorphWeight(i, 0.0f);
|
||||
}
|
||||
@@ -1889,13 +1875,13 @@ namespace EMotionFX
|
||||
}
|
||||
}
|
||||
|
||||
void Actor::ReserveMaterials(uint32 lodLevel, uint32 numMaterials)
|
||||
void Actor::ReserveMaterials(size_t lodLevel, size_t numMaterials)
|
||||
{
|
||||
mMaterials[lodLevel].reserve(numMaterials);
|
||||
}
|
||||
|
||||
// get a material
|
||||
Material* Actor::GetMaterial(uint32 lodLevel, uint32 nr) const
|
||||
Material* Actor::GetMaterial(size_t lodLevel, size_t nr) const
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
MCORE_ASSERT(nr < mMaterials[lodLevel].size());
|
||||
@@ -1904,41 +1890,29 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// get a material by name
|
||||
uint32 Actor::FindMaterialIndexByName(uint32 lodLevel, const char* name) const
|
||||
size_t Actor::FindMaterialIndexByName(size_t lodLevel, const char* name) const
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
|
||||
// search through all materials
|
||||
const uint32 numMaterials = mMaterials[lodLevel].size();
|
||||
for (uint32 i = 0; i < numMaterials; ++i)
|
||||
const auto foundMaterial = AZStd::find_if(mMaterials[lodLevel].begin(), mMaterials[lodLevel].end(), [name](const Material* material)
|
||||
{
|
||||
if (mMaterials[lodLevel][i]->GetNameString() == name)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
// no material found
|
||||
return MCORE_INVALIDINDEX32;
|
||||
return material->GetNameString() == name;
|
||||
});
|
||||
return foundMaterial != mMaterials[lodLevel].end() ? AZStd::distance(mMaterials[lodLevel].begin(), foundMaterial) : InvalidIndex;
|
||||
}
|
||||
|
||||
// set a material
|
||||
void Actor::SetMaterial(uint32 lodLevel, uint32 nr, Material* mat)
|
||||
void Actor::SetMaterial(size_t lodLevel, size_t nr, Material* mat)
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
MCORE_ASSERT(nr < mMaterials[lodLevel].size());
|
||||
mMaterials[lodLevel][nr] = mat;
|
||||
}
|
||||
|
||||
void Actor::AddMaterial(uint32 lodLevel, Material* mat)
|
||||
void Actor::AddMaterial(size_t lodLevel, Material* mat)
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
mMaterials[lodLevel].emplace_back(mat);
|
||||
}
|
||||
|
||||
size_t Actor::GetNumMaterials(uint32 lodLevel) const
|
||||
size_t Actor::GetNumMaterials(size_t lodLevel) const
|
||||
{
|
||||
MCORE_ASSERT(lodLevel < mMaterials.size());
|
||||
return mMaterials[lodLevel].size();
|
||||
}
|
||||
|
||||
@@ -1990,7 +1964,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void Actor::SetMorphSetup(uint32 lodLevel, MorphSetup* setup)
|
||||
void Actor::SetMorphSetup(size_t lodLevel, MorphSetup* setup)
|
||||
{
|
||||
mMorphSetups[lodLevel] = setup;
|
||||
}
|
||||
@@ -2157,14 +2131,14 @@ namespace EMotionFX
|
||||
return lodLevels[lodLevel].mNodeInfos[nodeIndex].mMesh;
|
||||
}
|
||||
|
||||
MeshDeformerStack* Actor::GetMeshDeformerStack(uint32 lodLevel, size_t nodeIndex) const
|
||||
MeshDeformerStack* Actor::GetMeshDeformerStack(size_t lodLevel, size_t nodeIndex) const
|
||||
{
|
||||
const AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
return lodLevels[lodLevel].mNodeInfos[nodeIndex].mStack;
|
||||
}
|
||||
|
||||
// set the mesh for a given node in a given LOD
|
||||
void Actor::SetMesh(uint32 lodLevel, size_t nodeIndex, Mesh* mesh)
|
||||
void Actor::SetMesh(size_t lodLevel, size_t nodeIndex, Mesh* mesh)
|
||||
{
|
||||
AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
lodLevels[lodLevel].mNodeInfos[nodeIndex].mMesh = mesh;
|
||||
@@ -2172,14 +2146,14 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// set the mesh deformer stack for a given node in a given LOD
|
||||
void Actor::SetMeshDeformerStack(uint32 lodLevel, size_t nodeIndex, MeshDeformerStack* stack)
|
||||
void Actor::SetMeshDeformerStack(size_t lodLevel, size_t nodeIndex, MeshDeformerStack* stack)
|
||||
{
|
||||
AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
lodLevels[lodLevel].mNodeInfos[nodeIndex].mStack = stack;
|
||||
}
|
||||
|
||||
// check if the mesh has a skinning deformer (either linear or dual quat)
|
||||
bool Actor::CheckIfHasSkinningDeformer(uint32 lodLevel, size_t nodeIndex) const
|
||||
bool Actor::CheckIfHasSkinningDeformer(size_t lodLevel, size_t nodeIndex) const
|
||||
{
|
||||
// check if there is a mesh
|
||||
Mesh* mesh = GetMesh(lodLevel, nodeIndex);
|
||||
@@ -2199,7 +2173,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// remove the mesh for a given node in a given LOD
|
||||
void Actor::RemoveNodeMeshForLOD(uint32 lodLevel, size_t nodeIndex, bool destroyMesh)
|
||||
void Actor::RemoveNodeMeshForLOD(size_t lodLevel, size_t nodeIndex, bool destroyMesh)
|
||||
{
|
||||
AZStd::vector<LODLevel>& lodLevels = m_meshLodData.m_lodLevels;
|
||||
|
||||
@@ -2289,7 +2263,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// scale morph target data
|
||||
for (uint32 lod = 0; lod < numLODs; ++lod)
|
||||
for (size_t lod = 0; lod < numLODs; ++lod)
|
||||
{
|
||||
MorphSetup* morphSetup = GetMorphSetup(lod);
|
||||
if (morphSetup)
|
||||
@@ -2819,8 +2793,8 @@ namespace EMotionFX
|
||||
AZ_Assert(morphTargetDeltaView.data(), "Unable to find MORPHTARGET_VERTEXDELTAS buffer");
|
||||
const AZ::RPI::PackedCompressedMorphTargetDelta* vertexDeltas = reinterpret_cast<const AZ::RPI::PackedCompressedMorphTargetDelta*>(morphTargetDeltaView.data());
|
||||
|
||||
const AZ::u32 numMorphTargets = morphSetup->GetNumMorphTargets();
|
||||
for (AZ::u32 mtIndex = 0; mtIndex < numMorphTargets; ++mtIndex)
|
||||
const size_t numMorphTargets = morphSetup->GetNumMorphTargets();
|
||||
for (size_t mtIndex = 0; mtIndex < numMorphTargets; ++mtIndex)
|
||||
{
|
||||
MorphTargetStandard* morphTarget = static_cast<MorphTargetStandard*>(morphSetup->GetMorphTarget(mtIndex));
|
||||
|
||||
|
||||
@@ -234,7 +234,7 @@ namespace EMotionFX
|
||||
* @param lodLevel The LOD level to check for.
|
||||
* @result Returns true when skinned meshes are present in the specified LOD level, otherwise false is returned.
|
||||
*/
|
||||
bool CheckIfHasSkinnedMeshes(AZ::u32 lodLevel) const;
|
||||
bool CheckIfHasSkinnedMeshes(size_t lodLevel) const;
|
||||
|
||||
/**
|
||||
* Extract a list with nodes that represent bones.
|
||||
@@ -245,7 +245,7 @@ namespace EMotionFX
|
||||
* @param outBoneList The array of indices to nodes that will be filled with the nodes that are bones. When the outBoneList array
|
||||
* already contains items, the array will first be cleared, so all existing contents will be lost.
|
||||
*/
|
||||
void ExtractBoneList(uint32 lodLevel, AZStd::vector<uint32>* outBoneList) const;
|
||||
void ExtractBoneList(size_t lodLevel, AZStd::vector<size_t>* outBoneList) const;
|
||||
|
||||
//------------------------------------------------
|
||||
void SetPhysicsSetup(const AZStd::shared_ptr<PhysicsSetup>& physicsSetup);
|
||||
@@ -261,7 +261,7 @@ namespace EMotionFX
|
||||
* @param lodLevel The geometry LOD level to work on.
|
||||
* @param numMaterials The amount of materials to pre-allocate space for.
|
||||
*/
|
||||
void ReserveMaterials(uint32 lodLevel, uint32 numMaterials);
|
||||
void ReserveMaterials(size_t lodLevel, size_t numMaterials);
|
||||
|
||||
/**
|
||||
* Get a given material.
|
||||
@@ -269,7 +269,7 @@ namespace EMotionFX
|
||||
* @param nr The material number to get.
|
||||
* @result A pointer to the material.
|
||||
*/
|
||||
Material* GetMaterial(uint32 lodLevel, uint32 nr) const;
|
||||
Material* GetMaterial(size_t lodLevel, size_t nr) const;
|
||||
|
||||
/**
|
||||
* Find the material number/index of the material with the specified name.
|
||||
@@ -279,7 +279,7 @@ namespace EMotionFX
|
||||
* @result Returns the material number/index, which you can use to GetMaterial. When no material with the given name
|
||||
* can be found, a value of MCORE_INVALIDINDEX32 is returned.
|
||||
*/
|
||||
uint32 FindMaterialIndexByName(uint32 lodLevel, const char* name) const;
|
||||
size_t FindMaterialIndexByName(size_t lodLevel, const char* name) const;
|
||||
|
||||
/**
|
||||
* Set a given material.
|
||||
@@ -287,14 +287,14 @@ namespace EMotionFX
|
||||
* @param nr The material number to set.
|
||||
* @param mat The material to set at this index.
|
||||
*/
|
||||
void SetMaterial(uint32 lodLevel, uint32 nr, Material* mat);
|
||||
void SetMaterial(size_t lodLevel, size_t nr, Material* mat);
|
||||
|
||||
/**
|
||||
* Add a material to the back of the material list.
|
||||
* @param lodLevel The LOD level add the material to.
|
||||
* @param mat The material to add to the back of the list.
|
||||
*/
|
||||
void AddMaterial(uint32 lodLevel, Material* mat);
|
||||
void AddMaterial(size_t lodLevel, Material* mat);
|
||||
|
||||
/**
|
||||
* Remove the given material from the material list and reassign all material numbers of the sub meshes
|
||||
@@ -306,14 +306,14 @@ namespace EMotionFX
|
||||
* @param lodLevel The LOD level add the material to.
|
||||
* @param index The material index of the material to remove.
|
||||
*/
|
||||
void RemoveMaterial(uint32 lodLevel, uint32 index);
|
||||
void RemoveMaterial(size_t lodLevel, size_t index);
|
||||
|
||||
/**
|
||||
* Get the number of materials.
|
||||
* @param lodLevel The LOD level to get the number of material from.
|
||||
* @result The number of materials this actor has/uses.
|
||||
*/
|
||||
size_t GetNumMaterials(uint32 lodLevel) const;
|
||||
size_t GetNumMaterials(size_t lodLevel) const;
|
||||
|
||||
/**
|
||||
* Removes all materials from this actor.
|
||||
@@ -329,7 +329,7 @@ namespace EMotionFX
|
||||
* @param index The material number to check.
|
||||
* @result Returns true when there are meshes using the material, otherwise false is returned.
|
||||
*/
|
||||
bool CheckIfIsMaterialUsed(uint32 lodLevel, uint32 index) const;
|
||||
bool CheckIfIsMaterialUsed(size_t lodLevel, size_t index) const;
|
||||
|
||||
//------------------------------------------------
|
||||
|
||||
@@ -348,20 +348,20 @@ namespace EMotionFX
|
||||
* @param[in] copySkeletalLODFlags Copy over the skeletal LOD flags in case of true, skip them in case of false.
|
||||
* @param[in] delLODActorFromMem When set to true, the method will automatically delete the given copyActor from memory.
|
||||
*/
|
||||
void CopyLODLevel(Actor* copyActor, uint32 copyLODLevel, uint32 replaceLODLevel, bool copySkeletalLODFlags);
|
||||
void CopyLODLevel(Actor* copyActor, size_t copyLODLevel, size_t replaceLODLevel, bool copySkeletalLODFlags);
|
||||
|
||||
/**
|
||||
* Insert LOD level at the given position.
|
||||
* This function will not copy any meshes, deformer, morph targets or materials but just insert an empty LOD level.
|
||||
* @param[in] insertAt The position to insert the new LOD level.
|
||||
*/
|
||||
void InsertLODLevel(uint32 insertAt);
|
||||
void InsertLODLevel(size_t insertAt);
|
||||
|
||||
/**
|
||||
* Set the number of LOD levels.
|
||||
* This will be called by the importer. Do not use manually.
|
||||
*/
|
||||
void SetNumLODLevels(uint32 numLODs, bool adjustMorphSetup = true);
|
||||
void SetNumLODLevels(size_t numLODs, bool adjustMorphSetup = true);
|
||||
|
||||
/**
|
||||
* Get the number of LOD levels inside this actor.
|
||||
@@ -385,7 +385,7 @@ namespace EMotionFX
|
||||
* @param outNumVertices The integer to write the number of vertices in.
|
||||
* @param outNumIndices The integer to write the number of indices in.
|
||||
*/
|
||||
void CalcMeshTotals(uint32 lodLevel, uint32* outNumPolygons, uint32* outNumVertices, uint32* outNumIndices) const;
|
||||
void CalcMeshTotals(size_t lodLevel, uint32* outNumPolygons, uint32* outNumVertices, uint32* outNumIndices) const;
|
||||
|
||||
/**
|
||||
* Calculates the total number of vertices and indices of all STATIC node meshes for the given LOD.
|
||||
@@ -394,7 +394,7 @@ namespace EMotionFX
|
||||
* @param outNumVertices The integer to write the number of vertices in.
|
||||
* @param outNumIndices The integer to write the number of indices in.
|
||||
*/
|
||||
void CalcStaticMeshTotals(uint32 lodLevel, uint32* outNumVertices, uint32* outNumIndices);
|
||||
void CalcStaticMeshTotals(size_t lodLevel, uint32* outNumVertices, uint32* outNumIndices);
|
||||
|
||||
/**
|
||||
* Calculates the total number of vertices and indices of all DEFORMABLE node meshes for the given LOD.
|
||||
@@ -404,7 +404,7 @@ namespace EMotionFX
|
||||
* @param outNumVertices The integer to write the number of vertices in.
|
||||
* @param outNumIndices The integer to write the number of indices in.
|
||||
*/
|
||||
void CalcDeformableMeshTotals(uint32 lodLevel, uint32* outNumVertices, uint32* outNumIndices);
|
||||
void CalcDeformableMeshTotals(size_t lodLevel, uint32* outNumVertices, uint32* outNumIndices);
|
||||
|
||||
/**
|
||||
* Calculates the maximum number of bone influences.
|
||||
@@ -412,7 +412,7 @@ namespace EMotionFX
|
||||
* @param lodLevel The LOD level, where 0 is the highest detail LOD level. This value must be in range of [0..GetNumLODLevels()-1].
|
||||
* @result The maximum number of influences. This will be 0 for non-softskinned objects.
|
||||
*/
|
||||
uint32 CalcMaxNumInfluences(uint32 lodLevel) const;
|
||||
size_t CalcMaxNumInfluences(size_t lodLevel) const;
|
||||
|
||||
/**
|
||||
* Calculates the maximum number of bone influences.
|
||||
@@ -424,7 +424,7 @@ namespace EMotionFX
|
||||
* @param lodLevel The detail level to calculate the results for. A value of 0 is the highest detail.
|
||||
* @result The maximum number of vertex/bone influences. This will be 0 for rigid, non-skinned objects.
|
||||
*/
|
||||
uint32 CalcMaxNumInfluences(uint32 lodLevel, AZStd::vector<uint32>& outVertexCounts) const;
|
||||
size_t CalcMaxNumInfluences(size_t lodLevel, AZStd::vector<size_t>& outVertexCounts) const;
|
||||
|
||||
/**
|
||||
* Verify if the skinning will look correctly in the given geometry LOD for a given skeletal LOD level.
|
||||
@@ -438,7 +438,7 @@ namespace EMotionFX
|
||||
* disabled nodes from the given skeletal LOD level.
|
||||
* @param geometryLODLevel The geometry LOD level to test the skeletal LOD against with.
|
||||
*/
|
||||
void VerifySkinning(AZStd::vector<uint8>& conflictNodeFlags, uint32 skeletalLODLevel, uint32 geometryLODLevel);
|
||||
void VerifySkinning(AZStd::vector<uint8>& conflictNodeFlags, size_t skeletalLODLevel, size_t geometryLODLevel);
|
||||
|
||||
/**
|
||||
* Checks if the given material is used by a given mesh.
|
||||
@@ -446,7 +446,7 @@ namespace EMotionFX
|
||||
* @param materialIndex The index of the material to check.
|
||||
* @return True if one of the submeshes of the given mesh uses the given material, false if not.
|
||||
*/
|
||||
bool CheckIfIsMaterialUsed(Mesh* mesh, uint32 materialIndex) const;
|
||||
bool CheckIfIsMaterialUsed(Mesh* mesh, size_t materialIndex) const;
|
||||
|
||||
//------------------
|
||||
|
||||
@@ -546,7 +546,7 @@ namespace EMotionFX
|
||||
* @result A smart pointer object to the morph setup. Use the MCore::Pointer<MorphSetup>::GetPointer() to get the actual pointer.
|
||||
* That GetPointer() method will return nullptr when there is no morph setup for the given LOD level.
|
||||
*/
|
||||
MCORE_INLINE MorphSetup* GetMorphSetup(uint32 geomLODLevel) const { return mMorphSetups[geomLODLevel]; }
|
||||
MCORE_INLINE MorphSetup* GetMorphSetup(size_t geomLODLevel) const { return mMorphSetups[geomLODLevel]; }
|
||||
|
||||
/**
|
||||
* Remove all morph setups. Morph setups contain all morph targtets.
|
||||
@@ -561,7 +561,7 @@ namespace EMotionFX
|
||||
* @param lodLevel The LOD level, which must be in range of [0..GetNumLODLevels()-1].
|
||||
* @param setup The morph setup for this LOD.
|
||||
*/
|
||||
void SetMorphSetup(uint32 lodLevel, MorphSetup* setup);
|
||||
void SetMorphSetup(size_t lodLevel, MorphSetup* setup);
|
||||
|
||||
/**
|
||||
* Get the number of node groups inside this actor object.
|
||||
@@ -735,7 +735,7 @@ namespace EMotionFX
|
||||
* @param startNodeIndex The node to start looking at, for example the node index of the finger bone.
|
||||
* @result Returns the index of the first active node, when moving up the hierarchy towards the root node. Returns MCORE_INVALIDINDEX32 when not found.
|
||||
*/
|
||||
size_t FindFirstActiveParentBone(uint32 skeletalLOD, size_t startNodeIndex) const;
|
||||
size_t FindFirstActiveParentBone(size_t skeletalLOD, size_t startNodeIndex) const;
|
||||
|
||||
/**
|
||||
* Make the geometry LOD levels compatible with the skinning LOD levels.
|
||||
@@ -777,7 +777,7 @@ namespace EMotionFX
|
||||
uint32 GetThreadIndex() const { return mThreadIndex; }
|
||||
|
||||
Mesh* GetMesh(size_t lodLevel, size_t nodeIndex) const;
|
||||
MeshDeformerStack* GetMeshDeformerStack(uint32 lodLevel, size_t nodeIndex) const;
|
||||
MeshDeformerStack* GetMeshDeformerStack(size_t lodLevel, size_t nodeIndex) const;
|
||||
|
||||
/** Finds the mesh points for which the specified node is the node with the highest influence.
|
||||
* This is a pretty expensive function which is only intended for use in the editor.
|
||||
@@ -790,13 +790,13 @@ namespace EMotionFX
|
||||
MCORE_INLINE Skeleton* GetSkeleton() const { return mSkeleton; }
|
||||
MCORE_INLINE size_t GetNumNodes() const { return mSkeleton->GetNumNodes(); }
|
||||
|
||||
void SetMesh(uint32 lodLevel, size_t nodeIndex, Mesh* mesh);
|
||||
void SetMeshDeformerStack(uint32 lodLevel, size_t nodeIndex, MeshDeformerStack* stack);
|
||||
void SetMesh(size_t lodLevel, size_t nodeIndex, Mesh* mesh);
|
||||
void SetMeshDeformerStack(size_t lodLevel, size_t nodeIndex, MeshDeformerStack* stack);
|
||||
|
||||
bool CheckIfHasMorphDeformer(uint32 lodLevel, size_t nodeIndex) const;
|
||||
bool CheckIfHasSkinningDeformer(uint32 lodLevel, size_t nodeIndex) const;
|
||||
bool CheckIfHasMorphDeformer(size_t lodLevel, size_t nodeIndex) const;
|
||||
bool CheckIfHasSkinningDeformer(size_t lodLevel, size_t nodeIndex) const;
|
||||
|
||||
void RemoveNodeMeshForLOD(uint32 lodLevel, size_t nodeIndex, bool destroyMesh = true);
|
||||
void RemoveNodeMeshForLOD(size_t lodLevel, size_t nodeIndex, bool destroyMesh = true);
|
||||
|
||||
void SetNumNodes(size_t numNodes);
|
||||
|
||||
|
||||
@@ -801,7 +801,7 @@ namespace EMotionFX
|
||||
* @param index An index in the array of enabled nodes. This must be in range of [0..GetNumEnabledNodes()-1].
|
||||
* @result The node number, which relates to Actor::GetNode( returnValue ).
|
||||
*/
|
||||
MCORE_INLINE uint16 GetEnabledNode(uint32 index) const { return mEnabledNodes[index]; }
|
||||
MCORE_INLINE uint16 GetEnabledNode(size_t index) const { return mEnabledNodes[index]; }
|
||||
|
||||
/**
|
||||
* Enable all nodes inside the actor instance.
|
||||
|
||||
@@ -294,7 +294,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// initialize the mesh deformer
|
||||
void DualQuatSkinDeformer::Reinitialize(Actor* actor, Node* node, uint32 lodLevel)
|
||||
void DualQuatSkinDeformer::Reinitialize(Actor* actor, Node* node, size_t lodLevel)
|
||||
{
|
||||
MCORE_UNUSED(actor);
|
||||
MCORE_UNUSED(node);
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace EMotionFX
|
||||
* @param node The node where the mesh belongs to during this initialization.
|
||||
* @param lodLevel The LOD level of the mesh the mesh deformer works on.
|
||||
*/
|
||||
void Reinitialize(Actor* actor, Node* node, uint32 lodLevel) override;
|
||||
void Reinitialize(Actor* actor, Node* node, size_t lodLevel) override;
|
||||
|
||||
/**
|
||||
* Creates an exact clone (copy) of this deformer, and returns a pointer to it.
|
||||
|
||||
@@ -740,7 +740,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// returns the maximum number of weights/influences for this mesh
|
||||
uint32 Mesh::CalcMaxNumInfluences() const
|
||||
size_t Mesh::CalcMaxNumInfluences() const
|
||||
{
|
||||
// try to locate the skinning attribute information
|
||||
SkinningInfoVertexAttributeLayer* skinningLayer = (SkinningInfoVertexAttributeLayer*)FindSharedVertexAttributeLayer(SkinningInfoVertexAttributeLayer::TYPE_ID);
|
||||
@@ -760,37 +760,33 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// return the maximum number of influences
|
||||
return aznumeric_cast<uint32>(maxInfluences);
|
||||
return maxInfluences;
|
||||
}
|
||||
|
||||
|
||||
// returns the maximum number of weights/influences for this mesh plus some extra information
|
||||
uint32 Mesh::CalcMaxNumInfluences(AZStd::vector<uint32>& outVertexCounts) const
|
||||
size_t Mesh::CalcMaxNumInfluences(AZStd::vector<size_t>& outVertexCounts) const
|
||||
{
|
||||
size_t maxInfluences = 0;
|
||||
|
||||
// Reset values.
|
||||
outVertexCounts.resize(CalcMaxNumInfluences() + 1);
|
||||
for (size_t j = 0; j < outVertexCounts.size(); ++j)
|
||||
{
|
||||
outVertexCounts[j] = 0;
|
||||
}
|
||||
AZStd::fill(begin(outVertexCounts), end(outVertexCounts), 0);
|
||||
|
||||
// Does the mesh have a skinning layer? If no we can quit directly as this means there are only unskinned vertices.
|
||||
SkinningInfoVertexAttributeLayer* skinningLayer = (SkinningInfoVertexAttributeLayer*)FindSharedVertexAttributeLayer(SkinningInfoVertexAttributeLayer::TYPE_ID);
|
||||
if (!skinningLayer)
|
||||
{
|
||||
outVertexCounts[0] = GetNumVertices();
|
||||
return aznumeric_cast<uint32>(maxInfluences);
|
||||
return 0;
|
||||
}
|
||||
|
||||
uint32* orgVerts = (uint32*)FindVertexData(Mesh::ATTRIB_ORGVTXNUMBERS);
|
||||
const uint32* orgVerts = (uint32*)FindVertexData(Mesh::ATTRIB_ORGVTXNUMBERS);
|
||||
|
||||
// Get the vertex counts for the influences.
|
||||
size_t maxInfluences = 0;
|
||||
const uint32 numVerts = GetNumVertices();
|
||||
for (uint32 i = 0; i < numVerts; ++i)
|
||||
{
|
||||
uint32 orgVertex = orgVerts[i];
|
||||
const uint32 orgVertex = orgVerts[i];
|
||||
|
||||
// Increase the number of vertices for the given influence value.
|
||||
const size_t numInfluences = skinningLayer->GetNumInfluences(orgVertex);
|
||||
@@ -800,7 +796,7 @@ namespace EMotionFX
|
||||
maxInfluences = AZStd::max(maxInfluences, numInfluences);
|
||||
}
|
||||
|
||||
return aznumeric_cast<uint32>(maxInfluences);
|
||||
return maxInfluences;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -462,7 +462,7 @@ namespace EMotionFX
|
||||
* This is calculated by for each vertex checking the number of bone influences, and take the maximum of that amount.
|
||||
* @result The maximum number of influences. This will be 0 for non-softskinned objects.
|
||||
*/
|
||||
uint32 CalcMaxNumInfluences() const;
|
||||
size_t CalcMaxNumInfluences() const;
|
||||
|
||||
/**
|
||||
* Calculates the maximum number of bone influences.
|
||||
@@ -472,7 +472,7 @@ namespace EMotionFX
|
||||
* which are effected by 4 bones.
|
||||
* @result The maximum number of influences. This will be 0 for non-softskinned objects.
|
||||
*/
|
||||
uint32 CalcMaxNumInfluences(AZStd::vector<uint32>& outVertexCounts) const;
|
||||
size_t CalcMaxNumInfluences(AZStd::vector<size_t>& outVertexCounts) const;
|
||||
|
||||
/**
|
||||
* Extract a list of positions of the original vertices.
|
||||
|
||||
@@ -45,7 +45,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// reinitialize the mesh deformer
|
||||
void MeshDeformer::Reinitialize(Actor* actor, Node* node, uint32 lodLevel)
|
||||
void MeshDeformer::Reinitialize(Actor* actor, Node* node, size_t lodLevel)
|
||||
{
|
||||
MCORE_UNUSED(actor);
|
||||
MCORE_UNUSED(node);
|
||||
|
||||
@@ -49,7 +49,7 @@ namespace EMotionFX
|
||||
* @param node The node where the mesh belongs to during this initialization.
|
||||
* @param lodLevel The LOD level of the mesh the mesh deformer works on.
|
||||
*/
|
||||
virtual void Reinitialize(Actor* actor, Node* node, uint32 lodLevel);
|
||||
virtual void Reinitialize(Actor* actor, Node* node, size_t lodLevel);
|
||||
|
||||
/**
|
||||
* Creates an exact clone (copy) of this deformer, and returns a pointer to it.
|
||||
|
||||
@@ -114,13 +114,13 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// reinitialize mesh deformers
|
||||
void MeshDeformerStack::ReinitializeDeformers(Actor* actor, Node* node, uint32 lodLevel)
|
||||
void MeshDeformerStack::ReinitializeDeformers(Actor* actor, Node* node, size_t lodLevel)
|
||||
{
|
||||
// if we have deformers in the stack
|
||||
const uint32 numDeformers = mDeformers.size();
|
||||
const size_t numDeformers = mDeformers.size();
|
||||
|
||||
// iterate through the deformers and reinitialize them
|
||||
for (uint32 i = 0; i < numDeformers; ++i)
|
||||
for (size_t i = 0; i < numDeformers; ++i)
|
||||
{
|
||||
mDeformers[i]->Reinitialize(actor, node, lodLevel);
|
||||
}
|
||||
|
||||
@@ -74,7 +74,7 @@ namespace EMotionFX
|
||||
* @param node The node to use for the reinitialize, so the node where the mesh belongs to during this initialization.
|
||||
* @param lodLevel The LOD level the mesh deformers work on.
|
||||
*/
|
||||
void ReinitializeDeformers(Actor* actor, Node* node, uint32 lodLevel);
|
||||
void ReinitializeDeformers(Actor* actor, Node* node, size_t lodLevel);
|
||||
|
||||
/**
|
||||
* Add a given deformer to the back of the stack.
|
||||
|
||||
@@ -194,7 +194,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// initialize the mesh deformer
|
||||
void MorphMeshDeformer::Reinitialize(Actor* actor, Node* node, uint32 lodLevel)
|
||||
void MorphMeshDeformer::Reinitialize(Actor* actor, Node* node, size_t lodLevel)
|
||||
{
|
||||
// clear the deform passes, but don't free the currently allocated/reserved memory
|
||||
mDeformPasses.clear();
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace EMotionFX
|
||||
* @param node The node where the mesh belongs to during this initialization.
|
||||
* @param lodLevel The LOD level of the mesh the mesh deformer works on.
|
||||
*/
|
||||
void Reinitialize(Actor* actor, Node* node, uint32 lodLevel) override;
|
||||
void Reinitialize(Actor* actor, Node* node, size_t lodLevel) override;
|
||||
|
||||
/**
|
||||
* Creates an exact clone (copy) of this deformer, and returns a pointer to it.
|
||||
|
||||
@@ -196,7 +196,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void MorphSetup::ReserveMorphTargets(uint32 numMorphTargets)
|
||||
void MorphSetup::ReserveMorphTargets(size_t numMorphTargets)
|
||||
{
|
||||
mMorphTargets.reserve(numMorphTargets);
|
||||
}
|
||||
|
||||
@@ -34,7 +34,7 @@ namespace EMotionFX
|
||||
* This does not influence the return value of GetNumMorphTargets().
|
||||
* @param numMorphTargets The number of morph targets to pre-allocate space for.
|
||||
*/
|
||||
void ReserveMorphTargets(uint32 numMorphTargets);
|
||||
void ReserveMorphTargets(size_t numMorphTargets);
|
||||
|
||||
/**
|
||||
* Get the number of morph targets inside this morph setup.
|
||||
@@ -47,7 +47,7 @@ namespace EMotionFX
|
||||
* @param nr The morph target number, must be in range of [0..GetNumMorphTargets()-1].
|
||||
* @result A pointer to the morph target.
|
||||
*/
|
||||
MCORE_INLINE MorphTarget* GetMorphTarget(uint32 nr) const { return mMorphTargets[nr]; }
|
||||
MCORE_INLINE MorphTarget* GetMorphTarget(size_t nr) const { return mMorphTargets[nr]; }
|
||||
|
||||
/**
|
||||
* Add a morph target to this morph setup.
|
||||
|
||||
@@ -68,7 +68,7 @@ namespace EMotionFX
|
||||
* @param scale This must contain the initial scale, and will be modified inside this method as well.
|
||||
* @param weight The absolute weight value.
|
||||
*/
|
||||
virtual void ApplyTransformation(ActorInstance* actorInstance, uint32 nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight) = 0;
|
||||
virtual void ApplyTransformation(ActorInstance* actorInstance, size_t nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight) = 0;
|
||||
|
||||
/**
|
||||
* Get the unique ID of this morph target.
|
||||
@@ -212,7 +212,7 @@ namespace EMotionFX
|
||||
* @param nodeIndex The node number to perform the check on.
|
||||
* @result Returns true if the given node will be modified by this morph target, otherwise false is returned.
|
||||
*/
|
||||
virtual bool Influences(uint32 nodeIndex) const = 0;
|
||||
virtual bool Influences(size_t nodeIndex) const = 0;
|
||||
|
||||
/**
|
||||
* Calculate the range based weight value from a normalized weight value given by a facial animation key frame.
|
||||
|
||||
@@ -170,7 +170,7 @@ namespace EMotionFX
|
||||
|
||||
// apply the relative transformation to the specified node
|
||||
// store the result in the position, rotation and scale parameters
|
||||
void MorphTargetStandard::ApplyTransformation(ActorInstance* actorInstance, uint32 nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight)
|
||||
void MorphTargetStandard::ApplyTransformation(ActorInstance* actorInstance, size_t nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight)
|
||||
{
|
||||
// calculate the normalized weight (in range of 0..1)
|
||||
const float newWeight = MCore::Clamp<float>(weight, mRangeMin, mRangeMax); // make sure its within the range
|
||||
@@ -202,7 +202,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// check if this morph target influences the specified node or not
|
||||
bool MorphTargetStandard::Influences(uint32 nodeIndex) const
|
||||
bool MorphTargetStandard::Influences(size_t nodeIndex) const
|
||||
{
|
||||
// check if there is a deform data object, which works on the specified node
|
||||
for (const DeformData* deformData : mDeformDatas)
|
||||
@@ -338,7 +338,7 @@ namespace EMotionFX
|
||||
//---------------------------------------------------
|
||||
|
||||
// constructor
|
||||
MorphTargetStandard::DeformData::DeformData(uint32 nodeIndex, uint32 numVerts)
|
||||
MorphTargetStandard::DeformData::DeformData(size_t nodeIndex, uint32 numVerts)
|
||||
{
|
||||
mNodeIndex = nodeIndex;
|
||||
mNumVerts = numVerts;
|
||||
@@ -356,7 +356,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// create
|
||||
MorphTargetStandard::DeformData* MorphTargetStandard::DeformData::Create(uint32 nodeIndex, uint32 numVerts)
|
||||
MorphTargetStandard::DeformData* MorphTargetStandard::DeformData::Create(size_t nodeIndex, uint32 numVerts)
|
||||
{
|
||||
return aznew MorphTargetStandard::DeformData(nodeIndex, numVerts);
|
||||
}
|
||||
|
||||
@@ -66,7 +66,7 @@ namespace EMotionFX
|
||||
uint32 mVertexNr; /**< The vertex number inside the mesh to apply this to. */
|
||||
};
|
||||
|
||||
static DeformData* Create(uint32 nodeIndex, uint32 numVerts);
|
||||
static DeformData* Create(size_t nodeIndex, uint32 numVerts);
|
||||
|
||||
// creates a clone
|
||||
DeformData* Clone();
|
||||
@@ -74,7 +74,7 @@ namespace EMotionFX
|
||||
public:
|
||||
VertexDelta* mDeltas; /**< The delta values. */
|
||||
uint32 mNumVerts; /**< The number of vertices in the mDeltas and mVertexNumbers arrays. */
|
||||
uint32 mNodeIndex; /**< The node which this data works on. */
|
||||
size_t mNodeIndex; /**< The node which this data works on. */
|
||||
float mMinValue; /**< The compression/decompression minimum value for the delta positions. */
|
||||
float mMaxValue; /**< The compression/decompression maximum value for the delta positions. */
|
||||
|
||||
@@ -83,7 +83,7 @@ namespace EMotionFX
|
||||
* @param nodeIndex The node number on which the deformations should work.
|
||||
* @param numVerts The number of vertices modified by this deform.
|
||||
*/
|
||||
DeformData(uint32 nodeIndex, uint32 numVerts);
|
||||
DeformData(size_t nodeIndex, uint32 numVerts);
|
||||
|
||||
/**
|
||||
* The destructor.
|
||||
@@ -155,14 +155,14 @@ namespace EMotionFX
|
||||
* @param scale The input scale to which relative adjustments will be applied.
|
||||
* @param weight The absolute weight value.
|
||||
*/
|
||||
void ApplyTransformation(ActorInstance* actorInstance, uint32 nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight) override;
|
||||
void ApplyTransformation(ActorInstance* actorInstance, size_t nodeIndex, AZ::Vector3& position, AZ::Quaternion& rotation, AZ::Vector3& scale, float weight) override;
|
||||
|
||||
/**
|
||||
* Checks if this morph target would influence the given node.
|
||||
* @param nodeIndex The node to perform the check with.
|
||||
* @result Returns true if the given node will be modified by this morph target, otherwise false is returned.
|
||||
*/
|
||||
bool Influences(uint32 nodeIndex) const override;
|
||||
bool Influences(size_t nodeIndex) const override;
|
||||
|
||||
/**
|
||||
* Apply the relative deformations for this morph target to the given actor instance.
|
||||
|
||||
@@ -400,22 +400,22 @@ namespace EMotionFX
|
||||
|
||||
|
||||
|
||||
void Node::SetSkeletalLODLevelBits(uint32 bitValues)
|
||||
void Node::SetSkeletalLODLevelBits(size_t bitValues)
|
||||
{
|
||||
mSkeletalLODs = bitValues;
|
||||
}
|
||||
|
||||
|
||||
void Node::SetSkeletalLODStatus(uint32 lodLevel, bool enabled)
|
||||
void Node::SetSkeletalLODStatus(size_t lodLevel, bool enabled)
|
||||
{
|
||||
MCORE_ASSERT(lodLevel <= 31);
|
||||
MCORE_ASSERT(lodLevel <= 63);
|
||||
if (enabled)
|
||||
{
|
||||
mSkeletalLODs |= (1 << lodLevel);
|
||||
mSkeletalLODs |= (1ull << lodLevel);
|
||||
}
|
||||
else
|
||||
{
|
||||
mSkeletalLODs &= ~(1 << lodLevel);
|
||||
mSkeletalLODs &= ~(1ull << lodLevel);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -346,7 +346,7 @@ namespace EMotionFX
|
||||
* Bit 0 represents LOD 0, bit 1 represents LOD 1, etc.
|
||||
* @param bitValues The unsigned 32-bits integer that contains the settings for each LOD.
|
||||
*/
|
||||
void SetSkeletalLODLevelBits(uint32 bitValues);
|
||||
void SetSkeletalLODLevelBits(size_t bitValues);
|
||||
|
||||
/**
|
||||
* Set the skeletal LOD status for a given LOD level.
|
||||
@@ -357,14 +357,14 @@ namespace EMotionFX
|
||||
* @param lodLevel The skeletal LOD level to change the settings for. This must be in range of [0..31].
|
||||
* @param enabled Set to true when you wish the node to be enabled in the given LOD, or false when you wish to disable it in the given LOD.
|
||||
*/
|
||||
void SetSkeletalLODStatus(uint32 lodLevel, bool enabled);
|
||||
void SetSkeletalLODStatus(size_t lodLevel, bool enabled);
|
||||
|
||||
/**
|
||||
* Get the skeletal LOD status for this node at a given skeletal LOD.
|
||||
* @param lodLevel The skeletal LOD level to check.
|
||||
* @result Returns true when this node is enabled in the specified LOD level. Otherwise false is returned.
|
||||
*/
|
||||
MCORE_INLINE bool GetSkeletalLODStatus(size_t lodLevel) const { return (mSkeletalLODs & (1 << lodLevel)) != 0; }
|
||||
MCORE_INLINE bool GetSkeletalLODStatus(size_t lodLevel) const { return (mSkeletalLODs & (1ull << lodLevel)) != 0; }
|
||||
|
||||
//--------------------------------------------
|
||||
|
||||
@@ -417,7 +417,7 @@ namespace EMotionFX
|
||||
private:
|
||||
size_t mNodeIndex; /**< The node index, which is the index into the array of nodes inside the Skeleton class. */
|
||||
size_t mParentIndex; /**< The parent node index, or MCORE_INVALIDINDEX32 when there is no parent. */
|
||||
uint32 mSkeletalLODs; /**< The skeletal LOD status values. Each bit represents if this node is enabled or disabled in the given LOD. */
|
||||
size_t mSkeletalLODs; /**< The skeletal LOD status values. Each bit represents if this node is enabled or disabled in the given LOD. */
|
||||
size_t mNameID; /**< The ID, which is generated from the name. You can use this for fast compares between nodes. */
|
||||
size_t mSemanticNameID; /**< The semantic name ID, for example "LeftHand" or "RightFoot" or so, this can be used for retargeting. */
|
||||
Skeleton* mSkeleton; /**< The skeleton where this node belongs to. */
|
||||
|
||||
@@ -39,35 +39,35 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// preallocate space
|
||||
void NodeMap::Reserve(uint32 numEntries)
|
||||
void NodeMap::Reserve(size_t numEntries)
|
||||
{
|
||||
mEntries.reserve(numEntries);
|
||||
}
|
||||
|
||||
|
||||
// resize the entries array
|
||||
void NodeMap::Resize(uint32 numEntries)
|
||||
void NodeMap::Resize(size_t numEntries)
|
||||
{
|
||||
mEntries.resize(numEntries);
|
||||
}
|
||||
|
||||
|
||||
// modify the first name of a given entry
|
||||
void NodeMap::SetFirstName(uint32 entryIndex, const char* name)
|
||||
void NodeMap::SetFirstName(size_t entryIndex, const char* name)
|
||||
{
|
||||
mEntries[entryIndex].mFirstNameID = MCore::GetStringIdPool().GenerateIdForString(name);
|
||||
}
|
||||
|
||||
|
||||
// modify the second name
|
||||
void NodeMap::SetSecondName(uint32 entryIndex, const char* name)
|
||||
void NodeMap::SetSecondName(size_t entryIndex, const char* name)
|
||||
{
|
||||
mEntries[entryIndex].mSecondNameID = MCore::GetStringIdPool().GenerateIdForString(name);
|
||||
}
|
||||
|
||||
|
||||
// modify a given entry
|
||||
void NodeMap::SetEntry(uint32 entryIndex, const char* firstName, const char* secondName)
|
||||
void NodeMap::SetEntry(size_t entryIndex, const char* firstName, const char* secondName)
|
||||
{
|
||||
mEntries[entryIndex].mFirstNameID = MCore::GetStringIdPool().GenerateIdForString(firstName);
|
||||
mEntries[entryIndex].mSecondNameID = MCore::GetStringIdPool().GenerateIdForString(secondName);
|
||||
@@ -78,8 +78,8 @@ namespace EMotionFX
|
||||
void NodeMap::SetEntry(const char* firstName, const char* secondName, bool addIfNotExists)
|
||||
{
|
||||
// check if there is already an entry for this name
|
||||
const uint32 entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == MCORE_INVALIDINDEX32)
|
||||
const size_t entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == InvalidIndex)
|
||||
{
|
||||
// if there is no such entry yet, and we also don't want to add a new one, then there is nothing to do
|
||||
if (addIfNotExists == false)
|
||||
@@ -107,7 +107,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// remove a given entry by its index
|
||||
void NodeMap::RemoveEntryByIndex(uint32 entryIndex)
|
||||
void NodeMap::RemoveEntryByIndex(size_t entryIndex)
|
||||
{
|
||||
mEntries.erase(AZStd::next(begin(mEntries), entryIndex));
|
||||
}
|
||||
@@ -116,8 +116,8 @@ namespace EMotionFX
|
||||
// remove a given entry by its name
|
||||
void NodeMap::RemoveEntryByName(const char* firstName)
|
||||
{
|
||||
const uint32 entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == MCORE_INVALIDINDEX32)
|
||||
const size_t entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == InvalidIndex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -127,10 +127,10 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// remove a given entry by its name ID
|
||||
void NodeMap::RemoveEntryByNameID(uint32 firstNameID)
|
||||
void NodeMap::RemoveEntryByNameID(size_t firstNameID)
|
||||
{
|
||||
const uint32 entryIndex = FindEntryIndexByNameID(firstNameID);
|
||||
if (entryIndex == MCORE_INVALIDINDEX32)
|
||||
const size_t entryIndex = FindEntryIndexByNameID(firstNameID);
|
||||
if (entryIndex == InvalidIndex)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -208,18 +208,18 @@ namespace EMotionFX
|
||||
uint32 NodeMap::CalcFileChunkSize() const
|
||||
{
|
||||
// add the node map info header
|
||||
uint32 numBytes = sizeof(FileFormat::NodeMapChunk);
|
||||
size_t numBytes = sizeof(FileFormat::NodeMapChunk);
|
||||
|
||||
// for all entries
|
||||
const uint32 numEntries = mEntries.size();
|
||||
for (uint32 i = 0; i < numEntries; ++i)
|
||||
const size_t numEntries = mEntries.size();
|
||||
for (size_t i = 0; i < numEntries; ++i)
|
||||
{
|
||||
numBytes += CalcFileStringSize(GetFirstNameString(i));
|
||||
numBytes += CalcFileStringSize(GetSecondNameString(i));
|
||||
}
|
||||
|
||||
// return the number of bytes
|
||||
return numBytes;
|
||||
return aznumeric_caster(numBytes);
|
||||
}
|
||||
|
||||
|
||||
@@ -265,7 +265,7 @@ namespace EMotionFX
|
||||
|
||||
// the main info
|
||||
FileFormat::NodeMapChunk nodeMapChunk{};
|
||||
nodeMapChunk.mNumEntries = mEntries.size();
|
||||
nodeMapChunk.mNumEntries = aznumeric_caster(mEntries.size());
|
||||
MCore::Endian::ConvertUnsignedInt32To(&nodeMapChunk.mNumEntries, targetEndianType);
|
||||
if (f.Write(&nodeMapChunk, sizeof(FileFormat::NodeMapChunk)) == 0)
|
||||
{
|
||||
@@ -282,7 +282,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
// for all entries
|
||||
const uint32 numEntries = mEntries.size();
|
||||
const uint32 numEntries = aznumeric_caster(mEntries.size());
|
||||
for (uint32 i = 0; i < numEntries; ++i)
|
||||
{
|
||||
if (WriteFileString(&f, GetFirstNameString(i), targetEndianType) == false)
|
||||
@@ -327,28 +327,28 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// get the first name as char pointer
|
||||
const char* NodeMap::GetFirstName(uint32 entryIndex) const
|
||||
const char* NodeMap::GetFirstName(size_t entryIndex) const
|
||||
{
|
||||
return MCore::GetStringIdPool().GetName(mEntries[entryIndex].mFirstNameID).c_str();
|
||||
}
|
||||
|
||||
|
||||
// get the second node name as char pointer
|
||||
const char* NodeMap::GetSecondName(uint32 entryIndex) const
|
||||
const char* NodeMap::GetSecondName(size_t entryIndex) const
|
||||
{
|
||||
return MCore::GetStringIdPool().GetName(mEntries[entryIndex].mSecondNameID).c_str();
|
||||
}
|
||||
|
||||
|
||||
// get the first node name as string
|
||||
const AZStd::string& NodeMap::GetFirstNameString(uint32 entryIndex) const
|
||||
const AZStd::string& NodeMap::GetFirstNameString(size_t entryIndex) const
|
||||
{
|
||||
return MCore::GetStringIdPool().GetName(mEntries[entryIndex].mFirstNameID);
|
||||
}
|
||||
|
||||
|
||||
// get the second node name as string
|
||||
const AZStd::string& NodeMap::GetSecondNameString(uint32 entryIndex) const
|
||||
const AZStd::string& NodeMap::GetSecondNameString(size_t entryIndex) const
|
||||
{
|
||||
return MCore::GetStringIdPool().GetName(mEntries[entryIndex].mSecondNameID);
|
||||
}
|
||||
@@ -357,48 +357,37 @@ namespace EMotionFX
|
||||
// check if we already have an entry for this name
|
||||
bool NodeMap::GetHasEntry(const char* firstName) const
|
||||
{
|
||||
return (FindEntryIndexByName(firstName) != MCORE_INVALIDINDEX32);
|
||||
return (FindEntryIndexByName(firstName) != InvalidIndex);
|
||||
}
|
||||
|
||||
|
||||
// find an entry index by its name
|
||||
uint32 NodeMap::FindEntryIndexByName(const char* firstName) const
|
||||
size_t NodeMap::FindEntryIndexByName(const char* firstName) const
|
||||
{
|
||||
const uint32 numEntries = mEntries.size();
|
||||
for (uint32 i = 0; i < numEntries; ++i)
|
||||
const auto foundEntry = AZStd::find_if(begin(mEntries), end(mEntries), [firstName](const MapEntry& entry)
|
||||
{
|
||||
const AZStd::string& firstNameEntry = GetFirstName(i);
|
||||
if (firstNameEntry == firstName)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return MCORE_INVALIDINDEX32;
|
||||
return MCore::GetStringIdPool().GetName(entry.mFirstNameID) == firstName;
|
||||
});
|
||||
return foundEntry != end(mEntries) ? AZStd::distance(begin(mEntries), foundEntry) : InvalidIndex;
|
||||
}
|
||||
|
||||
|
||||
// find an entry index by its name ID
|
||||
uint32 NodeMap::FindEntryIndexByNameID(uint32 firstNameID) const
|
||||
size_t NodeMap::FindEntryIndexByNameID(size_t firstNameID) const
|
||||
{
|
||||
const uint32 numEntries = mEntries.size();
|
||||
for (uint32 i = 0; i < numEntries; ++i)
|
||||
const auto foundEntry = AZStd::find_if(begin(mEntries), end(mEntries), [firstNameID](const MapEntry& entry)
|
||||
{
|
||||
if (mEntries[i].mFirstNameID == firstNameID)
|
||||
{
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
return MCORE_INVALIDINDEX32;
|
||||
return entry.mFirstNameID == firstNameID;
|
||||
});
|
||||
return foundEntry != end(mEntries) ? AZStd::distance(begin(mEntries), foundEntry) : InvalidIndex;
|
||||
}
|
||||
|
||||
|
||||
// find the second name for a given first name
|
||||
const char* NodeMap::FindSecondName(const char* firstName) const
|
||||
{
|
||||
const uint32 entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == MCORE_INVALIDINDEX32)
|
||||
const size_t entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == InvalidIndex)
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
@@ -410,8 +399,8 @@ namespace EMotionFX
|
||||
// find the second name based on a first given name
|
||||
void NodeMap::FindSecondName(const char* firstName, AZStd::string* outString)
|
||||
{
|
||||
const uint32 entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == MCORE_INVALIDINDEX32)
|
||||
const size_t entryIndex = FindEntryIndexByName(firstName);
|
||||
if (entryIndex == InvalidIndex)
|
||||
{
|
||||
outString->clear();
|
||||
return;
|
||||
|
||||
@@ -39,41 +39,37 @@ namespace EMotionFX
|
||||
public:
|
||||
struct MapEntry
|
||||
{
|
||||
uint32 mFirstNameID; /**< The first name ID, which is the primary key in the map. */
|
||||
uint32 mSecondNameID; /**< The second name ID. */
|
||||
|
||||
MapEntry()
|
||||
: mFirstNameID(MCORE_INVALIDINDEX32)
|
||||
, mSecondNameID(MCORE_INVALIDINDEX32) {}
|
||||
size_t mFirstNameID = InvalidIndex; /**< The first name ID, which is the primary key in the map. */
|
||||
size_t mSecondNameID = InvalidIndex; /**< The second name ID. */
|
||||
};
|
||||
|
||||
static NodeMap* Create();
|
||||
|
||||
// prealloc space in the map
|
||||
void Reserve(uint32 numEntries);
|
||||
void Resize(uint32 numEntries);
|
||||
void Reserve(size_t numEntries);
|
||||
void Resize(size_t numEntries);
|
||||
|
||||
// get data
|
||||
size_t GetNumEntries() const;
|
||||
const char* GetFirstName(uint32 entryIndex) const;
|
||||
const char* GetSecondName(uint32 entryIndex) const;
|
||||
const AZStd::string& GetFirstNameString(uint32 entryIndex) const;
|
||||
const AZStd::string& GetSecondNameString(uint32 entryIndex) const;
|
||||
const char* GetFirstName(size_t entryIndex) const;
|
||||
const char* GetSecondName(size_t entryIndex) const;
|
||||
const AZStd::string& GetFirstNameString(size_t entryIndex) const;
|
||||
const AZStd::string& GetSecondNameString(size_t entryIndex) const;
|
||||
bool GetHasEntry(const char* firstName) const;
|
||||
uint32 FindEntryIndexByName(const char* firstName) const;
|
||||
uint32 FindEntryIndexByNameID(uint32 firstNameID) const;
|
||||
size_t FindEntryIndexByName(const char* firstName) const;
|
||||
size_t FindEntryIndexByNameID(size_t firstNameID) const;
|
||||
const char* FindSecondName(const char* firstName) const;
|
||||
void FindSecondName(const char* firstName, AZStd::string* outString);
|
||||
|
||||
// set/modify
|
||||
void SetFirstName(uint32 entryIndex, const char* name);
|
||||
void SetSecondName(uint32 entryIndex, const char* name);
|
||||
void SetEntry(uint32 entryIndex, const char* firstName, const char* secondName);
|
||||
void SetFirstName(size_t entryIndex, const char* name);
|
||||
void SetSecondName(size_t entryIndex, const char* name);
|
||||
void SetEntry(size_t entryIndex, const char* firstName, const char* secondName);
|
||||
void AddEntry(const char* firstName, const char* secondName);
|
||||
void SetEntry(const char* firstName, const char* secondName, bool addIfNotExists);
|
||||
void RemoveEntryByIndex(uint32 entryIndex);
|
||||
void RemoveEntryByIndex(size_t entryIndex);
|
||||
void RemoveEntryByName(const char* firstName);
|
||||
void RemoveEntryByNameID(uint32 firstNameID);
|
||||
void RemoveEntryByNameID(size_t firstNameID);
|
||||
|
||||
// filename
|
||||
void SetFileName(const char* fileName);
|
||||
|
||||
@@ -1334,7 +1334,7 @@ namespace EMotionFX
|
||||
}
|
||||
|
||||
|
||||
void Pose::ResizeNumMorphs(uint32 numMorphTargets)
|
||||
void Pose::ResizeNumMorphs(size_t numMorphTargets)
|
||||
{
|
||||
mMorphWeights.Resize(numMorphTargets);
|
||||
}
|
||||
|
||||
@@ -100,24 +100,24 @@ namespace EMotionFX
|
||||
|
||||
MCORE_INLINE const Transform* GetLocalSpaceTransforms() const { return mLocalSpaceTransforms.GetReadPtr(); }
|
||||
MCORE_INLINE const Transform* GetModelSpaceTransforms() const { return mModelSpaceTransforms.GetReadPtr(); }
|
||||
MCORE_INLINE uint32 GetNumTransforms() const { return mLocalSpaceTransforms.GetLength(); }
|
||||
MCORE_INLINE size_t GetNumTransforms() const { return mLocalSpaceTransforms.GetLength(); }
|
||||
MCORE_INLINE const ActorInstance* GetActorInstance() const { return mActorInstance; }
|
||||
MCORE_INLINE const Actor* GetActor() const { return mActor; }
|
||||
MCORE_INLINE const Skeleton* GetSkeleton() const { return mSkeleton; }
|
||||
|
||||
MCORE_INLINE Transform& GetLocalSpaceTransformDirect(uint32 nodeIndex) { return mLocalSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE Transform& GetModelSpaceTransformDirect(uint32 nodeIndex) { return mModelSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE const Transform& GetLocalSpaceTransformDirect(uint32 nodeIndex) const { return mLocalSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE const Transform& GetModelSpaceTransformDirect(uint32 nodeIndex) const { return mModelSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE void SetLocalSpaceTransformDirect(uint32 nodeIndex, const Transform& transform){ mLocalSpaceTransforms[nodeIndex] = transform; mFlags[nodeIndex] |= FLAG_LOCALTRANSFORMREADY; }
|
||||
MCORE_INLINE void SetModelSpaceTransformDirect(uint32 nodeIndex, const Transform& transform){ mModelSpaceTransforms[nodeIndex] = transform; mFlags[nodeIndex] |= FLAG_MODELTRANSFORMREADY; }
|
||||
MCORE_INLINE void InvalidateLocalSpaceTransform(uint32 nodeIndex) { mFlags[nodeIndex] &= ~FLAG_LOCALTRANSFORMREADY; }
|
||||
MCORE_INLINE void InvalidateModelSpaceTransform(uint32 nodeIndex) { mFlags[nodeIndex] &= ~FLAG_MODELTRANSFORMREADY; }
|
||||
MCORE_INLINE Transform& GetLocalSpaceTransformDirect(size_t nodeIndex) { return mLocalSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE Transform& GetModelSpaceTransformDirect(size_t nodeIndex) { return mModelSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE const Transform& GetLocalSpaceTransformDirect(size_t nodeIndex) const { return mLocalSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE const Transform& GetModelSpaceTransformDirect(size_t nodeIndex) const { return mModelSpaceTransforms[nodeIndex]; }
|
||||
MCORE_INLINE void SetLocalSpaceTransformDirect(size_t nodeIndex, const Transform& transform){ mLocalSpaceTransforms[nodeIndex] = transform; mFlags[nodeIndex] |= FLAG_LOCALTRANSFORMREADY; }
|
||||
MCORE_INLINE void SetModelSpaceTransformDirect(size_t nodeIndex, const Transform& transform){ mModelSpaceTransforms[nodeIndex] = transform; mFlags[nodeIndex] |= FLAG_MODELTRANSFORMREADY; }
|
||||
MCORE_INLINE void InvalidateLocalSpaceTransform(size_t nodeIndex) { mFlags[nodeIndex] &= ~FLAG_LOCALTRANSFORMREADY; }
|
||||
MCORE_INLINE void InvalidateModelSpaceTransform(size_t nodeIndex) { mFlags[nodeIndex] &= ~FLAG_MODELTRANSFORMREADY; }
|
||||
|
||||
MCORE_INLINE void SetMorphWeight(uint32 index, float weight) { mMorphWeights[index] = weight; }
|
||||
MCORE_INLINE float GetMorphWeight(uint32 index) const { return mMorphWeights[index]; }
|
||||
MCORE_INLINE uint32 GetNumMorphWeights() const { return mMorphWeights.GetLength(); }
|
||||
void ResizeNumMorphs(uint32 numMorphTargets);
|
||||
MCORE_INLINE void SetMorphWeight(size_t index, float weight) { mMorphWeights[index] = weight; }
|
||||
MCORE_INLINE float GetMorphWeight(size_t index) const { return mMorphWeights[index]; }
|
||||
MCORE_INLINE size_t GetNumMorphWeights() const { return mMorphWeights.GetLength(); }
|
||||
void ResizeNumMorphs(size_t numMorphTargets);
|
||||
|
||||
/**
|
||||
* Blend this pose into a specified destination pose.
|
||||
@@ -168,8 +168,8 @@ namespace EMotionFX
|
||||
|
||||
Pose& operator=(const Pose& other);
|
||||
|
||||
MCORE_INLINE uint8 GetFlags(uint32 nodeIndex) const { return mFlags[nodeIndex]; }
|
||||
MCORE_INLINE void SetFlags(uint32 nodeIndex, uint8 flags) { mFlags[nodeIndex] = flags; }
|
||||
MCORE_INLINE uint8 GetFlags(size_t nodeIndex) const { return mFlags[nodeIndex]; }
|
||||
MCORE_INLINE void SetFlags(size_t nodeIndex, uint8 flags) { mFlags[nodeIndex] = flags; }
|
||||
|
||||
bool HasPoseData(const AZ::TypeId& typeId) const;
|
||||
PoseData* GetPoseDataByType(const AZ::TypeId& typeId) const;
|
||||
|
||||
@@ -202,7 +202,7 @@ namespace EMotionFX
|
||||
|
||||
|
||||
// initialize the mesh deformer
|
||||
void SoftSkinDeformer::Reinitialize(Actor* actor, Node* node, uint32 lodLevel)
|
||||
void SoftSkinDeformer::Reinitialize(Actor* actor, Node* node, size_t lodLevel)
|
||||
{
|
||||
MCORE_UNUSED(actor);
|
||||
MCORE_UNUSED(node);
|
||||
|
||||
@@ -71,7 +71,7 @@ namespace EMotionFX
|
||||
* @param node The node where the mesh belongs to during this initialization.
|
||||
* @param lodLevel The LOD level of the mesh the mesh deformer works on.
|
||||
*/
|
||||
void Reinitialize(Actor* actor, Node* node, uint32 lodLevel) override;
|
||||
void Reinitialize(Actor* actor, Node* node, size_t lodLevel) override;
|
||||
|
||||
/**
|
||||
* Creates an exact clone (copy) of this deformer, and returns a pointer to it.
|
||||
|
||||
+8
-8
@@ -210,7 +210,7 @@ namespace EMStudio
|
||||
EMotionFX::Actor* actor = actorInstance->GetActor();
|
||||
AZStd::string actorName;
|
||||
AzFramework::StringFunc::Path::GetFileName(actor->GetFileNameString().c_str(), actorName);
|
||||
const uint32 numNodes = actor->GetNumNodes();
|
||||
const size_t numNodes = actor->GetNumNodes();
|
||||
|
||||
// extract the bones from the actor
|
||||
actor->ExtractBoneList(actorInstance->GetLODLevel(), &mBoneList);
|
||||
@@ -240,11 +240,11 @@ namespace EMStudio
|
||||
mHierarchy->addTopLevelItem(rootItem);
|
||||
|
||||
// get the number of root nodes and iterate through them
|
||||
const uint32 numRootNodes = actor->GetSkeleton()->GetNumRootNodes();
|
||||
const size_t numRootNodes = actor->GetSkeleton()->GetNumRootNodes();
|
||||
for (uint32 i = 0; i < numRootNodes; ++i)
|
||||
{
|
||||
// get the root node index and the corresponding node
|
||||
const uint32 rootNodeIndex = actor->GetSkeleton()->GetRootNodeIndex(i);
|
||||
const size_t rootNodeIndex = actor->GetSkeleton()->GetRootNodeIndex(i);
|
||||
EMotionFX::Node* rootNode = actor->GetSkeleton()->GetNode(rootNodeIndex);
|
||||
|
||||
// recursively add all the nodes to the hierarchy
|
||||
@@ -260,7 +260,7 @@ namespace EMStudio
|
||||
return false;
|
||||
}
|
||||
|
||||
const uint32 nodeIndex = node->GetNodeIndex();
|
||||
const size_t nodeIndex = node->GetNodeIndex();
|
||||
AZStd::string nodeName = node->GetNameString();
|
||||
AZStd::to_lower(nodeName.begin(), nodeName.end());
|
||||
EMotionFX::Mesh* mesh = actorInstance->GetActor()->GetMesh(actorInstance->GetLODLevel(), nodeIndex);
|
||||
@@ -288,10 +288,10 @@ namespace EMStudio
|
||||
|
||||
void NodeHierarchyWidget::RecursivelyAddChilds(QTreeWidgetItem* parent, EMotionFX::Actor* actor, EMotionFX::ActorInstance* actorInstance, EMotionFX::Node* node)
|
||||
{
|
||||
const uint32 nodeIndex = node->GetNodeIndex();
|
||||
const size_t nodeIndex = node->GetNodeIndex();
|
||||
AZStd::string nodeName = node->GetNameString();
|
||||
AZStd::to_lower(nodeName.begin(), nodeName.end());
|
||||
const uint32 numChildren = node->GetNumChildNodes();
|
||||
const size_t numChildren = node->GetNumChildNodes();
|
||||
EMotionFX::Mesh* mesh = actor->GetMesh(actorInstance->GetLODLevel(), nodeIndex);
|
||||
const bool isMeshNode = (mesh);
|
||||
const bool isBone = (AZStd::find(begin(mBoneList), end(mBoneList), nodeIndex) != end(mBoneList));
|
||||
@@ -352,7 +352,7 @@ namespace EMStudio
|
||||
for (uint32 i = 0; i < numChildren; ++i)
|
||||
{
|
||||
// get the node index and the corresponding node
|
||||
const uint32 childIndex = node->GetChildIndex(i);
|
||||
const size_t childIndex = node->GetChildIndex(i);
|
||||
EMotionFX::Node* child = actor->GetSkeleton()->GetNode(childIndex);
|
||||
|
||||
// recursively add all the nodes to the hierarchy
|
||||
@@ -365,7 +365,7 @@ namespace EMStudio
|
||||
for (uint32 i = 0; i < numChildren; ++i)
|
||||
{
|
||||
// get the node index and the corresponding node
|
||||
const uint32 childIndex = node->GetChildIndex(i);
|
||||
const size_t childIndex = node->GetChildIndex(i);
|
||||
EMotionFX::Node* child = actor->GetSkeleton()->GetNode(childIndex);
|
||||
|
||||
// recursively add all the nodes to the hierarchy
|
||||
|
||||
+1
-1
@@ -133,7 +133,7 @@ namespace EMStudio
|
||||
QIcon* mNodeIcon;
|
||||
QIcon* mMeshIcon;
|
||||
QIcon* mCharacterIcon;
|
||||
AZStd::vector<uint32> mBoneList;
|
||||
AZStd::vector<size_t> mBoneList;
|
||||
AZStd::vector<uint32> mActorInstanceIDs;
|
||||
AZStd::string mItemName;
|
||||
AZStd::string mActorInstanceIDString;
|
||||
|
||||
+1
-1
@@ -53,7 +53,7 @@ namespace EMStudio
|
||||
MCORE_MEMORYOBJECTCATEGORY(RenderPlugin::EMStudioRenderActor, MCore::MCORE_DEFAULT_ALIGNMENT, MEMCATEGORY_EMSTUDIOSDK_RENDERPLUGINBASE);
|
||||
|
||||
EMotionFX::Actor* mActor;
|
||||
AZStd::vector<uint32> mBoneList;
|
||||
AZStd::vector<size_t> mBoneList;
|
||||
RenderGL::GLActor* mRenderActor;
|
||||
AZStd::vector<EMotionFX::ActorInstance*> mActorInstances;
|
||||
float mNormalsScaleMultiplier;
|
||||
|
||||
+8
-8
@@ -33,7 +33,7 @@ namespace EMStudio
|
||||
|
||||
if (m_orgVerticesCount)
|
||||
{
|
||||
m_vertexDupeRatio = mesh->GetNumVertices() / (float)mesh->GetNumOrgVertices();
|
||||
m_vertexDupeRatio = (float)mesh->GetNumVertices() / (float)mesh->GetNumOrgVertices();
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -44,15 +44,15 @@ namespace EMStudio
|
||||
mesh->CalcMaxNumInfluences(m_verticesByInfluences);
|
||||
|
||||
// sub meshes
|
||||
const uint32 numSubMeshes = mesh->GetNumSubMeshes();
|
||||
for (uint32 i = 0; i < numSubMeshes; ++i)
|
||||
const size_t numSubMeshes = mesh->GetNumSubMeshes();
|
||||
for (size_t i = 0; i < numSubMeshes; ++i)
|
||||
{
|
||||
EMotionFX::SubMesh* subMesh = mesh->GetSubMesh(i);
|
||||
m_submeshes.emplace_back(actor, lodLevel, subMesh);
|
||||
}
|
||||
|
||||
// vertex attribute layers
|
||||
const uint32 numVertexAttributeLayers = mesh->GetNumVertexAttributeLayers();
|
||||
const size_t numVertexAttributeLayers = mesh->GetNumVertexAttributeLayers();
|
||||
AZStd::string tmpString;
|
||||
for (uint32 i = 0; i < numVertexAttributeLayers; ++i)
|
||||
{
|
||||
@@ -89,7 +89,7 @@ namespace EMStudio
|
||||
tmpString = AZStd::string::format("Unknown data (TypeID=%d)", attributeLayerType);
|
||||
}
|
||||
|
||||
if (attributeLayer->GetNameString().size() > 0)
|
||||
if (!attributeLayer->GetNameString().empty())
|
||||
{
|
||||
tmpString += AZStd::string::format(" [%s]", attributeLayer->GetName());
|
||||
}
|
||||
@@ -99,8 +99,8 @@ namespace EMStudio
|
||||
|
||||
|
||||
// shared vertex attribute layers
|
||||
const uint32 numSharedVertexAttributeLayers = mesh->GetNumSharedVertexAttributeLayers();
|
||||
for (uint32 i = 0; i < numSharedVertexAttributeLayers; ++i)
|
||||
const size_t numSharedVertexAttributeLayers = mesh->GetNumSharedVertexAttributeLayers();
|
||||
for (size_t i = 0; i < numSharedVertexAttributeLayers; ++i)
|
||||
{
|
||||
EMotionFX::VertexAttributeLayer* attributeLayer = mesh->GetSharedVertexAttributeLayer(i);
|
||||
|
||||
@@ -114,7 +114,7 @@ namespace EMStudio
|
||||
tmpString = AZStd::string::format("Unknown data (TypeID=%d)", attributeLayerType);
|
||||
}
|
||||
|
||||
if (attributeLayer->GetNameString().size() > 0)
|
||||
if (!attributeLayer->GetNameString().empty())
|
||||
{
|
||||
tmpString += AZStd::string::format(" [%s]", attributeLayer->GetName());
|
||||
}
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ namespace EMStudio
|
||||
bool m_isQuadMesh;
|
||||
unsigned int m_orgVerticesCount;
|
||||
float m_vertexDupeRatio;
|
||||
AZStd::vector<uint32> m_verticesByInfluences;
|
||||
AZStd::vector<size_t> m_verticesByInfluences;
|
||||
AZStd::vector<SubMeshInfo> m_submeshes;
|
||||
AZStd::vector<NamedPropertyStringValue> m_attributeLayers;
|
||||
AZStd::vector<NamedPropertyStringValue> m_sharedAttributeLayers;
|
||||
|
||||
+4
-4
@@ -286,18 +286,18 @@ namespace EMStudio
|
||||
|
||||
// get access to the actor and the number of nodes
|
||||
EMotionFX::Actor* actor = actorInstance->GetActor();
|
||||
const uint32 numNodes = actor->GetNumNodes();
|
||||
const size_t numNodes = actor->GetNumNodes();
|
||||
|
||||
// reserve memory for the visible node indices
|
||||
m_visibleNodeIndices.reserve(numNodes);
|
||||
|
||||
// extract the bones from the actor
|
||||
AZStd::vector<uint32> boneList;
|
||||
AZStd::vector<size_t> boneList;
|
||||
actor->ExtractBoneList(actorInstance->GetLODLevel(), &boneList);
|
||||
|
||||
// iterate through all nodes and check if the node is visible
|
||||
AZStd::string nodeName;
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
EMotionFX::Node* node = actor->GetSkeleton()->GetNode(i);
|
||||
|
||||
@@ -305,7 +305,7 @@ namespace EMStudio
|
||||
nodeName = node->GetNameString();
|
||||
AZStd::to_lower(nodeName.begin(), nodeName.end());
|
||||
|
||||
const uint32 nodeIndex = node->GetNodeIndex();
|
||||
const size_t nodeIndex = node->GetNodeIndex();
|
||||
EMotionFX::Mesh* mesh = actor->GetMesh(actorInstance->GetLODLevel(), nodeIndex);
|
||||
const bool isMeshNode = (mesh);
|
||||
const bool isBone = (AZStd::find(begin(boneList), end(boneList), nodeIndex) != end(boneList));
|
||||
|
||||
+1
-1
@@ -19,7 +19,7 @@ namespace EMStudio
|
||||
{
|
||||
AZ_CLASS_ALLOCATOR_IMPL(SubMeshInfo, EMStudio::UIAllocator, 0)
|
||||
|
||||
SubMeshInfo::SubMeshInfo(EMotionFX::Actor* actor, unsigned int lodLevel, EMotionFX::SubMesh* subMesh)
|
||||
SubMeshInfo::SubMeshInfo(EMotionFX::Actor* actor, size_t lodLevel, EMotionFX::SubMesh* subMesh)
|
||||
{
|
||||
// In EMFX studio, we are not using the subMesh index - they all uses the default material.
|
||||
m_materialName = actor->GetMaterial(lodLevel, 0)->GetNameString();
|
||||
|
||||
+2
-2
@@ -26,7 +26,7 @@ namespace EMStudio
|
||||
AZ_CLASS_ALLOCATOR_DECL
|
||||
|
||||
SubMeshInfo() {}
|
||||
SubMeshInfo(EMotionFX::Actor* actor, unsigned int lodLevel, EMotionFX::SubMesh* subMesh);
|
||||
SubMeshInfo(EMotionFX::Actor* actor, size_t lodLevel, EMotionFX::SubMesh* subMesh);
|
||||
~SubMeshInfo() = default;
|
||||
|
||||
static void Reflect(AZ::ReflectContext* context);
|
||||
@@ -36,7 +36,7 @@ namespace EMStudio
|
||||
unsigned int m_verticesCount;
|
||||
unsigned int m_indicesCount;
|
||||
unsigned int m_polygonsCount;
|
||||
unsigned int m_bonesCount;
|
||||
size_t m_bonesCount;
|
||||
|
||||
};
|
||||
} // namespace EMStudio
|
||||
|
||||
+51
-111
@@ -329,7 +329,7 @@ namespace EMStudio
|
||||
MCORE_ASSERT(node);
|
||||
|
||||
// remove the mapping for this node
|
||||
PerformMapping(node->GetNodeIndex(), MCORE_INVALIDINDEX32);
|
||||
PerformMapping(node->GetNodeIndex(), InvalidIndex);
|
||||
}
|
||||
|
||||
|
||||
@@ -443,10 +443,7 @@ namespace EMStudio
|
||||
{
|
||||
const size_t numNodes = aznumeric_caster(currentActor->GetNumNodes());
|
||||
mMap.resize(numNodes);
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
{
|
||||
mMap[i] = MCORE_INVALIDINDEX32;
|
||||
}
|
||||
AZStd::fill(mMap.begin(), mMap.end(), InvalidIndex);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -490,11 +487,11 @@ namespace EMStudio
|
||||
|
||||
// fill the left list widget
|
||||
QString currentName;
|
||||
const uint32 numNodes = actor->GetNumNodes();
|
||||
const size_t numNodes = actor->GetNumNodes();
|
||||
|
||||
// count the number of rows
|
||||
uint32 numRows = 0;
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
int numRows = 0;
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
currentName = actor->GetSkeleton()->GetNode(i)->GetName();
|
||||
if (currentName.contains(filterString, Qt::CaseInsensitive) || filterString.isEmpty())
|
||||
@@ -505,15 +502,15 @@ namespace EMStudio
|
||||
mCurrentList->setRowCount(numRows);
|
||||
|
||||
// fill the rows
|
||||
uint32 rowIndex = 0;
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
int rowIndex = 0;
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
EMotionFX::Node* node = actor->GetSkeleton()->GetNode(i);
|
||||
currentName = node->GetName();
|
||||
if (currentName.contains(filterString, Qt::CaseInsensitive) || filterString.isEmpty())
|
||||
{
|
||||
// mark if there is a mapping or not
|
||||
const bool mapped = (mMap[node->GetNodeIndex()] != MCORE_INVALIDINDEX32);
|
||||
const bool mapped = (mMap[node->GetNodeIndex()] != InvalidIndex);
|
||||
QTableWidgetItem* mappedItem = new QTableWidgetItem();
|
||||
mappedItem->setIcon(mapped ? *mMappedIcon : QIcon());
|
||||
mCurrentList->setItem(rowIndex, 0, mappedItem);
|
||||
@@ -524,8 +521,7 @@ namespace EMStudio
|
||||
{
|
||||
typeItem->setIcon(*mMeshIcon);
|
||||
}
|
||||
else
|
||||
if (AZStd::find(begin(mCurrentBoneList), end(mCurrentBoneList), node->GetNodeIndex()) != end(mCurrentBoneList))
|
||||
else if (AZStd::find(begin(mCurrentBoneList), end(mCurrentBoneList), node->GetNodeIndex()) != end(mCurrentBoneList))
|
||||
{
|
||||
typeItem->setIcon(*mBoneIcon);
|
||||
}
|
||||
@@ -559,11 +555,11 @@ namespace EMStudio
|
||||
|
||||
// fill the left list widget
|
||||
QString name;
|
||||
const uint32 numNodes = actor->GetNumNodes();
|
||||
const size_t numNodes = actor->GetNumNodes();
|
||||
|
||||
// count the number of rows
|
||||
uint32 numRows = 0;
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
int numRows = 0;
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
name = actor->GetSkeleton()->GetNode(i)->GetName();
|
||||
if (name.contains(filterString, Qt::CaseInsensitive) || filterString.isEmpty())
|
||||
@@ -574,8 +570,8 @@ namespace EMStudio
|
||||
mSourceList->setRowCount(numRows);
|
||||
|
||||
// fill the rows
|
||||
uint32 rowIndex = 0;
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
int rowIndex = 0;
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
EMotionFX::Node* node = actor->GetSkeleton()->GetNode(i);
|
||||
name = node->GetName();
|
||||
@@ -593,8 +589,7 @@ namespace EMStudio
|
||||
{
|
||||
typeItem->setIcon(*mMeshIcon);
|
||||
}
|
||||
else
|
||||
if (AZStd::find(mSourceBoneList.begin(), mSourceBoneList.end(), node->GetNodeIndex()) != mSourceBoneList.end())
|
||||
else if (AZStd::find(mSourceBoneList.begin(), mSourceBoneList.end(), node->GetNodeIndex()) != mSourceBoneList.end())
|
||||
{
|
||||
typeItem->setIcon(*mBoneIcon);
|
||||
}
|
||||
@@ -629,9 +624,9 @@ namespace EMStudio
|
||||
// fill the table
|
||||
QString currentName;
|
||||
QString sourceName;
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
const int numNodes = aznumeric_caster(currentActor->GetNumNodes());
|
||||
mMappingTable->setRowCount(numNodes);
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
for (int i = 0; i < numNodes; ++i)
|
||||
{
|
||||
currentName = currentActor->GetSkeleton()->GetNode(i)->GetName();
|
||||
|
||||
@@ -639,7 +634,7 @@ namespace EMStudio
|
||||
mMappingTable->setItem(i, 0, currentTableItem);
|
||||
mMappingTable->setRowHeight(i, 21);
|
||||
|
||||
if (mMap[i] != MCORE_INVALIDINDEX32)
|
||||
if (mMap[i] != InvalidIndex)
|
||||
{
|
||||
sourceName = sourceActor->GetSkeleton()->GetNode(mMap[i])->GetName();
|
||||
currentTableItem = new QTableWidgetItem(sourceName);
|
||||
@@ -650,8 +645,6 @@ namespace EMStudio
|
||||
mMappingTable->setItem(i, 1, new QTableWidgetItem());
|
||||
}
|
||||
}
|
||||
//mMappingTable->resizeColumnsToContents();
|
||||
//mMappingTable->setColumnWidth(0, mMappingTable->columnWidth(0) + 25);
|
||||
}
|
||||
|
||||
|
||||
@@ -694,12 +687,12 @@ namespace EMStudio
|
||||
|
||||
|
||||
// perform the mapping
|
||||
void MirrorSetupWindow::PerformMapping(uint32 currentNodeIndex, uint32 sourceNodeIndex)
|
||||
void MirrorSetupWindow::PerformMapping(size_t currentNodeIndex, size_t sourceNodeIndex)
|
||||
{
|
||||
EMotionFX::Actor* currentActor = GetSelectedActor();
|
||||
|
||||
// update the map
|
||||
const uint32 oldSourceIndex = mMap[currentNodeIndex];
|
||||
const size_t oldSourceIndex = mMap[currentNodeIndex];
|
||||
mMap[currentNodeIndex] = sourceNodeIndex;
|
||||
|
||||
// update the current table
|
||||
@@ -707,9 +700,7 @@ namespace EMStudio
|
||||
const QList<QTableWidgetItem*> currentListItems = mCurrentList->findItems(curName, Qt::MatchExactly);
|
||||
for (int32 i = 0; i < currentListItems.count(); ++i)
|
||||
{
|
||||
const uint32 rowIndex = currentListItems[i]->row();
|
||||
//if (rowIndex != mCurrentList->currentRow())
|
||||
// continue;
|
||||
const int rowIndex = currentListItems[i]->row();
|
||||
|
||||
QTableWidgetItem* mappedItem = mCurrentList->item(rowIndex, 0);
|
||||
if (!mappedItem)
|
||||
@@ -718,7 +709,7 @@ namespace EMStudio
|
||||
mCurrentList->setItem(rowIndex, 0, mappedItem);
|
||||
}
|
||||
|
||||
if (sourceNodeIndex == MCORE_INVALIDINDEX32)
|
||||
if (sourceNodeIndex == InvalidIndex)
|
||||
{
|
||||
mappedItem->setIcon(QIcon());
|
||||
}
|
||||
@@ -729,16 +720,14 @@ namespace EMStudio
|
||||
}
|
||||
|
||||
// update source table
|
||||
if (sourceNodeIndex != MCORE_INVALIDINDEX32)
|
||||
if (sourceNodeIndex != InvalidIndex)
|
||||
{
|
||||
const bool stillUsed = AZStd::find(mMap.begin(), mMap.end(), sourceNodeIndex) != mMap.end();
|
||||
const QString sourceName = currentActor->GetSkeleton()->GetNode(sourceNodeIndex)->GetName();
|
||||
const QList<QTableWidgetItem*> sourceListItems = mSourceList->findItems(sourceName, Qt::MatchExactly);
|
||||
for (int32 i = 0; i < sourceListItems.count(); ++i)
|
||||
{
|
||||
const uint32 rowIndex = sourceListItems[i]->row();
|
||||
//if (rowIndex != mSourceList->currentRow())
|
||||
// continue;
|
||||
const int rowIndex = sourceListItems[i]->row();
|
||||
|
||||
QTableWidgetItem* mappedItem = mSourceList->item(rowIndex, 0);
|
||||
if (!mappedItem)
|
||||
@@ -759,16 +748,14 @@ namespace EMStudio
|
||||
}
|
||||
else // we're clearing it
|
||||
{
|
||||
if (oldSourceIndex != MCORE_INVALIDINDEX32)
|
||||
if (oldSourceIndex != InvalidIndex)
|
||||
{
|
||||
const bool stillUsed = AZStd::find(mMap.begin(), mMap.end(), sourceNodeIndex) != mMap.end();
|
||||
const QString sourceName = currentActor->GetSkeleton()->GetNode(oldSourceIndex)->GetName();
|
||||
const QList<QTableWidgetItem*> sourceListItems = mSourceList->findItems(sourceName, Qt::MatchExactly);
|
||||
for (int32 i = 0; i < sourceListItems.count(); ++i)
|
||||
{
|
||||
const uint32 rowIndex = sourceListItems[i]->row();
|
||||
//if (rowIndex != mSourceList->currentRow())
|
||||
// continue;
|
||||
const int rowIndex = sourceListItems[i]->row();
|
||||
|
||||
QTableWidgetItem* mappedItem = mSourceList->item(rowIndex, 0);
|
||||
if (!mappedItem)
|
||||
@@ -790,14 +777,14 @@ namespace EMStudio
|
||||
}
|
||||
|
||||
// update the mapping table
|
||||
QTableWidgetItem* item = mMappingTable->item(currentNodeIndex, 1);
|
||||
if (!item && sourceNodeIndex != MCORE_INVALIDINDEX32)
|
||||
QTableWidgetItem* item = mMappingTable->item(aznumeric_caster(currentNodeIndex), 1);
|
||||
if (!item && sourceNodeIndex != InvalidIndex)
|
||||
{
|
||||
item = new QTableWidgetItem();
|
||||
mMappingTable->setItem(currentNodeIndex, 1, item);
|
||||
mMappingTable->setItem(aznumeric_caster(currentNodeIndex), 1, item);
|
||||
}
|
||||
|
||||
if (sourceNodeIndex == MCORE_INVALIDINDEX32)
|
||||
if (sourceNodeIndex == InvalidIndex)
|
||||
{
|
||||
if (item)
|
||||
{
|
||||
@@ -893,15 +880,12 @@ namespace EMStudio
|
||||
}
|
||||
|
||||
// now update our mapping data
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
{
|
||||
mMap[i] = MCORE_INVALIDINDEX32;
|
||||
}
|
||||
const size_t numNodes = currentActor->GetNumNodes();
|
||||
AZStd::fill(mMap.begin(), AZStd::next(mMap.begin(), numNodes), InvalidIndex);
|
||||
|
||||
// now apply the map we loaded to the data we have here
|
||||
const uint32 numEntries = nodeMap->GetNumEntries();
|
||||
for (uint32 i = 0; i < numEntries; ++i)
|
||||
const size_t numEntries = nodeMap->GetNumEntries();
|
||||
for (size_t i = 0; i < numEntries; ++i)
|
||||
{
|
||||
// find the current node
|
||||
EMotionFX::Node* currentNode = currentActor->GetSkeleton()->FindNodeByName(nodeMap->GetFirstName(i));
|
||||
@@ -963,12 +947,12 @@ namespace EMStudio
|
||||
|
||||
// create an emfx node map object
|
||||
EMotionFX::NodeMap* map = EMotionFX::NodeMap::Create();
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
const size_t numNodes = currentActor->GetNumNodes();
|
||||
map->Reserve(numNodes);
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
// skip unmapped entries
|
||||
if (mMap[i] == MCORE_INVALIDINDEX32)
|
||||
if (mMap[i] == InvalidIndex)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1033,16 +1017,11 @@ namespace EMStudio
|
||||
return true;
|
||||
}
|
||||
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
const size_t numNodes = currentActor->GetNumNodes();
|
||||
return AZStd::all_of(mMap.begin(), AZStd::next(mMap.begin(), numNodes), [](const size_t nodeIndex)
|
||||
{
|
||||
if (mMap[i] != MCORE_INVALIDINDEX32)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
return nodeIndex != InvalidIndex;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1081,20 +1060,13 @@ namespace EMStudio
|
||||
return;
|
||||
}
|
||||
|
||||
// show a warning that we will overwrite the table entries
|
||||
//if (QMessageBox::warning(this, "Overwrite Mapping?", "Are you sure you want to possibly overwrite items in the mapping?\nAll or some existing mapping information might be lost.", QMessageBox::Cancel|QMessageBox::Yes) != QMessageBox::Yes)
|
||||
//return;
|
||||
|
||||
//
|
||||
// currentActor->MatchNodeMotionSources( FromQtString(mLeftEdit->text()), FromQtString(mRightEdit->text()) );
|
||||
|
||||
// update the table and map
|
||||
uint32 numGuessed = 0;
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
const size_t numNodes = currentActor->GetNumNodes();
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
// skip already setup mappings
|
||||
if (mMap[i] != MCORE_INVALIDINDEX32)
|
||||
if (mMap[i] != InvalidIndex)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
@@ -1110,28 +1082,6 @@ namespace EMStudio
|
||||
// update the actor
|
||||
UpdateActorMotionSources();
|
||||
|
||||
/*
|
||||
// try a geometrical mapping
|
||||
EMotionFX::Pose pose;
|
||||
pose.InitFromLocalBindSpaceTransforms( currentActor );
|
||||
|
||||
// for all nodes in the current actor
|
||||
uint32 numGuessed = 0;
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
for (uint32 i=0; i<numNodes; ++i)
|
||||
{
|
||||
// skip already setup mappings
|
||||
if (mMap[i] != MCORE_INVALIDINDEX32)
|
||||
continue;
|
||||
|
||||
const uint16 matchIndex = currentActor->FindBestMirrorMatchForNode( static_cast<uint16>(i), pose );
|
||||
if (matchIndex != MCORE_INVALIDINDEX16)
|
||||
{
|
||||
mMap[i] = matchIndex;
|
||||
numGuessed++;
|
||||
}
|
||||
}
|
||||
*/
|
||||
Reinit(false);
|
||||
|
||||
// show some results
|
||||
@@ -1148,17 +1098,7 @@ namespace EMStudio
|
||||
{
|
||||
return;
|
||||
}
|
||||
/*
|
||||
const uint32 numNodes = currentActor->GetNumNodes();
|
||||
for (uint32 i=0; i<numNodes; ++i)
|
||||
{
|
||||
uint16 motionSource = i;
|
||||
|
||||
// get the motion source from the map
|
||||
if (mMap[i] != MCORE_INVALIDINDEX32)
|
||||
motionSource = static_cast<uint16>( mMap[i] );
|
||||
}
|
||||
*/
|
||||
// apply the current map as command
|
||||
ApplyCurrentMapAsCommand();
|
||||
}
|
||||
@@ -1172,8 +1112,8 @@ namespace EMStudio
|
||||
return;
|
||||
}
|
||||
|
||||
const uint32 numNodes = actor->GetNumNodes();
|
||||
for (uint32 i = 0; i < numNodes; ++i)
|
||||
const size_t numNodes = actor->GetNumNodes();
|
||||
for (size_t i = 0; i < numNodes; ++i)
|
||||
{
|
||||
if (actor->GetHasMirrorInfo())
|
||||
{
|
||||
@@ -1184,12 +1124,12 @@ namespace EMStudio
|
||||
}
|
||||
else
|
||||
{
|
||||
mMap[i] = MCORE_INVALIDINDEX32;
|
||||
mMap[i] = InvalidIndex;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mMap[i] = MCORE_INVALIDINDEX32;
|
||||
mMap[i] = InvalidIndex;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1207,10 +1147,10 @@ namespace EMStudio
|
||||
|
||||
// apply mirror changes
|
||||
AZStd::string commandString = AZStd::string::format("AdjustActor -actorID %d -mirrorSetup \"", currentActor->GetID());
|
||||
for (uint32 i = 0; i < currentActor->GetNumNodes(); ++i)
|
||||
for (size_t i = 0; i < currentActor->GetNumNodes(); ++i)
|
||||
{
|
||||
uint32 sourceNode = mMap[i];
|
||||
if (sourceNode != MCORE_INVALIDINDEX32 && sourceNode != i)
|
||||
size_t sourceNode = mMap[i];
|
||||
if (sourceNode != InvalidIndex && sourceNode != i)
|
||||
{
|
||||
commandString += currentActor->GetSkeleton()->GetNode(i)->GetName();
|
||||
commandString += ",";
|
||||
|
||||
+4
-4
@@ -79,14 +79,14 @@ namespace EMStudio
|
||||
QIcon* mNodeIcon;
|
||||
QIcon* mMeshIcon;
|
||||
QIcon* mMappedIcon;
|
||||
AZStd::vector<uint32> mCurrentBoneList;
|
||||
AZStd::vector<uint32> mSourceBoneList;
|
||||
AZStd::vector<uint32> mMap;
|
||||
AZStd::vector<size_t> mCurrentBoneList;
|
||||
AZStd::vector<size_t> mSourceBoneList;
|
||||
AZStd::vector<size_t> mMap;
|
||||
|
||||
void FillCurrentListWidget(EMotionFX::Actor* actor, const QString& filterString);
|
||||
void FillSourceListWidget(EMotionFX::Actor* actor, const QString& filterString);
|
||||
void FillMappingTable(EMotionFX::Actor* currentActor, EMotionFX::Actor* sourceActor);
|
||||
void PerformMapping(uint32 currentNodeIndex, uint32 sourceNodeIndex);
|
||||
void PerformMapping(size_t currentNodeIndex, size_t sourceNodeIndex);
|
||||
void RemoveCurrentSelectedMapping();
|
||||
void keyPressEvent(QKeyEvent* event);
|
||||
void keyReleaseEvent(QKeyEvent* event);
|
||||
|
||||
@@ -615,31 +615,31 @@ namespace EMotionFX
|
||||
return;
|
||||
}
|
||||
|
||||
const AZ::u32 numLodLevels = actor->GetNumLODLevels();
|
||||
const size_t numLodLevels = actor->GetNumLODLevels();
|
||||
const Skeleton* skeleton = actor->GetSkeleton();
|
||||
const AZ::u32 numNodes = skeleton->GetNumNodes();
|
||||
const size_t numNodes = skeleton->GetNumNodes();
|
||||
m_nodeInfos.resize(numNodes);
|
||||
|
||||
AZStd::vector<AZStd::vector<uint32> > boneListPerLodLevel;
|
||||
AZStd::vector<AZStd::vector<size_t> > boneListPerLodLevel;
|
||||
boneListPerLodLevel.resize(numLodLevels);
|
||||
for (AZ::u32 lodLevel = 0; lodLevel < numLodLevels; ++lodLevel)
|
||||
for (size_t lodLevel = 0; lodLevel < numLodLevels; ++lodLevel)
|
||||
{
|
||||
actor->ExtractBoneList(lodLevel, &boneListPerLodLevel[lodLevel]);
|
||||
}
|
||||
|
||||
for (AZ::u32 nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex)
|
||||
for (size_t nodeIndex = 0; nodeIndex < numNodes; ++nodeIndex)
|
||||
{
|
||||
NodeInfo& nodeInfo = m_nodeInfos[nodeIndex];
|
||||
|
||||
// Is bone?
|
||||
nodeInfo.m_isBone = AZStd::any_of(begin(boneListPerLodLevel), end(boneListPerLodLevel), [nodeIndex](const AZStd::vector<uint32>& lodLevel)
|
||||
nodeInfo.m_isBone = AZStd::any_of(begin(boneListPerLodLevel), end(boneListPerLodLevel), [nodeIndex](const AZStd::vector<size_t>& lodLevel)
|
||||
{
|
||||
return AZStd::find(begin(lodLevel), end(lodLevel), nodeIndex) != end(lodLevel);
|
||||
});
|
||||
|
||||
// Has mesh?
|
||||
nodeInfo.m_hasMesh = false;
|
||||
for (AZ::u32 lodLevel = 0; lodLevel < numLodLevels; ++lodLevel)
|
||||
for (size_t lodLevel = 0; lodLevel < numLodLevels; ++lodLevel)
|
||||
{
|
||||
if (actor->GetMesh(lodLevel, nodeIndex))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user