mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
chore: make XModelCommon use offset instead of pointer
This commit is contained in:
parent
d45f0ffab7
commit
f8b5734f86
@ -38,7 +38,7 @@ struct XModelVertexBoneWeightCollection
|
|||||||
|
|
||||||
struct XModelVertexBoneWeights
|
struct XModelVertexBoneWeights
|
||||||
{
|
{
|
||||||
const XModelBoneWeight* weights;
|
unsigned weightOffset;
|
||||||
unsigned weightCount;
|
unsigned weightCount;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -295,7 +295,7 @@ namespace
|
|||||||
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
||||||
{
|
{
|
||||||
const auto& vertList = surface.vertList[vertListIndex];
|
const auto& vertList = surface.vertList[vertListIndex];
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
|
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
||||||
|
|
||||||
@ -313,7 +313,7 @@ namespace
|
|||||||
// 1 bone weight
|
// 1 bone weight
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
||||||
|
|
||||||
@ -325,7 +325,7 @@ namespace
|
|||||||
// 2 bone weights
|
// 2 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -342,7 +342,7 @@ namespace
|
|||||||
// 3 bone weights
|
// 3 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -362,7 +362,7 @@ namespace
|
|||||||
// 4 bone weights
|
// 4 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -388,7 +388,7 @@ namespace
|
|||||||
|
|
||||||
for (; handledVertices < surface.vertCount; handledVertices++)
|
for (; handledVertices < surface.vertCount; handledVertices++)
|
||||||
{
|
{
|
||||||
out.m_vertex_bone_weights.emplace_back(nullptr, 0);
|
out.m_vertex_bone_weights.emplace_back(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ namespace
|
|||||||
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
||||||
{
|
{
|
||||||
const auto& vertList = surface.vertList[vertListIndex];
|
const auto& vertList = surface.vertList[vertListIndex];
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
|
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ namespace
|
|||||||
// 1 bone weight
|
// 1 bone weight
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
||||||
|
|
||||||
@ -308,7 +308,7 @@ namespace
|
|||||||
// 2 bone weights
|
// 2 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -325,7 +325,7 @@ namespace
|
|||||||
// 3 bone weights
|
// 3 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -345,7 +345,7 @@ namespace
|
|||||||
// 4 bone weights
|
// 4 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -371,7 +371,7 @@ namespace
|
|||||||
|
|
||||||
for (; handledVertices < surface.vertCount; handledVertices++)
|
for (; handledVertices < surface.vertCount; handledVertices++)
|
||||||
{
|
{
|
||||||
out.m_vertex_bone_weights.emplace_back(nullptr, 0);
|
out.m_vertex_bone_weights.emplace_back(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -278,7 +278,7 @@ namespace
|
|||||||
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
||||||
{
|
{
|
||||||
const auto& vertList = surface.vertList[vertListIndex];
|
const auto& vertList = surface.vertList[vertListIndex];
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
|
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
||||||
|
|
||||||
@ -296,7 +296,7 @@ namespace
|
|||||||
// 1 bone weight
|
// 1 bone weight
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
||||||
|
|
||||||
@ -308,7 +308,7 @@ namespace
|
|||||||
// 2 bone weights
|
// 2 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -325,7 +325,7 @@ namespace
|
|||||||
// 3 bone weights
|
// 3 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -345,7 +345,7 @@ namespace
|
|||||||
// 4 bone weights
|
// 4 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -371,7 +371,7 @@ namespace
|
|||||||
|
|
||||||
for (; handledVertices < surface.vertCount; handledVertices++)
|
for (; handledVertices < surface.vertCount; handledVertices++)
|
||||||
{
|
{
|
||||||
out.m_vertex_bone_weights.emplace_back(nullptr, 0);
|
out.m_vertex_bone_weights.emplace_back(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -294,7 +294,7 @@ namespace
|
|||||||
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
||||||
{
|
{
|
||||||
const auto& vertList = surface.vertList[vertListIndex];
|
const auto& vertList = surface.vertList[vertListIndex];
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
|
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
||||||
|
|
||||||
@ -312,7 +312,7 @@ namespace
|
|||||||
// 1 bone weight
|
// 1 bone weight
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
||||||
|
|
||||||
@ -324,7 +324,7 @@ namespace
|
|||||||
// 2 bone weights
|
// 2 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -341,7 +341,7 @@ namespace
|
|||||||
// 3 bone weights
|
// 3 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -361,7 +361,7 @@ namespace
|
|||||||
// 4 bone weights
|
// 4 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -387,7 +387,7 @@ namespace
|
|||||||
|
|
||||||
for (; handledVertices < surface.vertCount; handledVertices++)
|
for (; handledVertices < surface.vertCount; handledVertices++)
|
||||||
{
|
{
|
||||||
out.m_vertex_bone_weights.emplace_back(nullptr, 0);
|
out.m_vertex_bone_weights.emplace_back(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -315,7 +315,7 @@ namespace
|
|||||||
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
for (auto vertListIndex = 0u; vertListIndex < surface.vertListCount; vertListIndex++)
|
||||||
{
|
{
|
||||||
const auto& vertList = surface.vertList[vertListIndex];
|
const auto& vertList = surface.vertList[vertListIndex];
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
|
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{vertList.boneOffset / sizeof(DObjSkelMat), 1.0f};
|
||||||
|
|
||||||
@ -333,7 +333,7 @@ namespace
|
|||||||
// 1 bone weight
|
// 1 bone weight
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[0]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
weightCollection.weights[weightOffset++] = XModelBoneWeight{boneIndex0, 1.0f};
|
||||||
|
|
||||||
@ -345,7 +345,7 @@ namespace
|
|||||||
// 2 bone weights
|
// 2 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[1]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -362,7 +362,7 @@ namespace
|
|||||||
// 3 bone weights
|
// 3 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[2]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -382,7 +382,7 @@ namespace
|
|||||||
// 4 bone weights
|
// 4 bone weights
|
||||||
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
for (auto vertIndex = 0; vertIndex < surface.vertInfo.vertCount[3]; vertIndex++)
|
||||||
{
|
{
|
||||||
const auto* boneWeightOffset = &weightCollection.weights[weightOffset];
|
const auto boneWeightOffset = weightOffset;
|
||||||
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
const auto boneIndex0 = surface.vertInfo.vertsBlend[vertsBlendOffset + 0] / sizeof(DObjSkelMat);
|
||||||
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
const auto boneIndex1 = surface.vertInfo.vertsBlend[vertsBlendOffset + 1] / sizeof(DObjSkelMat);
|
||||||
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
const auto boneWeight1 = BoneWeight16(surface.vertInfo.vertsBlend[vertsBlendOffset + 2]);
|
||||||
@ -408,7 +408,7 @@ namespace
|
|||||||
|
|
||||||
for (; handledVertices < surface.vertCount; handledVertices++)
|
for (; handledVertices < surface.vertCount; handledVertices++)
|
||||||
{
|
{
|
||||||
out.m_vertex_bone_weights.emplace_back(nullptr, 0);
|
out.m_vertex_bone_weights.emplace_back(0, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,12 +18,16 @@ protected:
|
|||||||
auto vertexOffset = 0u;
|
auto vertexOffset = 0u;
|
||||||
for (const auto& vertex : xmodel.m_vertices)
|
for (const auto& vertex : xmodel.m_vertices)
|
||||||
{
|
{
|
||||||
XModelVertexBoneWeights weights{nullptr, 0};
|
XModelVertexBoneWeights weights{0, 0};
|
||||||
|
|
||||||
if (vertexOffset < xmodel.m_vertex_bone_weights.size())
|
if (vertexOffset < xmodel.m_vertex_bone_weights.size())
|
||||||
weights = xmodel.m_vertex_bone_weights[vertexOffset];
|
weights = xmodel.m_vertex_bone_weights[vertexOffset];
|
||||||
|
|
||||||
m_vertex_merger.Add(VertexMergerPos{vertex.coordinates[0], vertex.coordinates[1], vertex.coordinates[2], weights.weights, weights.weightCount});
|
m_vertex_merger.Add(VertexMergerPos{vertex.coordinates[0],
|
||||||
|
vertex.coordinates[1],
|
||||||
|
vertex.coordinates[2],
|
||||||
|
&xmodel.m_bone_weight_data.weights[weights.weightOffset],
|
||||||
|
weights.weightCount});
|
||||||
|
|
||||||
vertexOffset++;
|
vertexOffset++;
|
||||||
}
|
}
|
||||||
|
@ -496,14 +496,15 @@ namespace
|
|||||||
auto* weights = reinterpret_cast<float*>(&bufferData[currentBufferOffset + sizeof(uint8_t) * 4u * xmodel.m_vertex_bone_weights.size()]);
|
auto* weights = reinterpret_cast<float*>(&bufferData[currentBufferOffset + sizeof(uint8_t) * 4u * xmodel.m_vertex_bone_weights.size()]);
|
||||||
for (const auto& commonVertexWeights : xmodel.m_vertex_bone_weights)
|
for (const auto& commonVertexWeights : xmodel.m_vertex_bone_weights)
|
||||||
{
|
{
|
||||||
assert(commonVertexWeights.weights != nullptr);
|
assert(commonVertexWeights.weightOffset < xmodel.m_bone_weight_data.weights.size());
|
||||||
assert(commonVertexWeights.weightCount <= 4u);
|
assert(commonVertexWeights.weightCount <= 4u);
|
||||||
|
|
||||||
const auto commonVertexWeightCount = std::min(commonVertexWeights.weightCount, 4u);
|
const auto commonVertexWeightCount = std::min(commonVertexWeights.weightCount, 4u);
|
||||||
|
const auto* commonVertexWeightData = &xmodel.m_bone_weight_data.weights[commonVertexWeights.weightOffset];
|
||||||
for (auto i = 0u; i < commonVertexWeightCount; i++)
|
for (auto i = 0u; i < commonVertexWeightCount; i++)
|
||||||
{
|
{
|
||||||
joints[i] = static_cast<unsigned char>(commonVertexWeights.weights[i].boneIndex);
|
joints[i] = static_cast<unsigned char>(commonVertexWeightData[i].boneIndex);
|
||||||
weights[i] = commonVertexWeights.weights[i].weight;
|
weights[i] = commonVertexWeightData[i].weight;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto i = commonVertexWeightCount; i < 4u; i++)
|
for (auto i = commonVertexWeightCount; i < 4u; i++)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user