MCPcopy Create free account
hub / github.com/TorqueGameEngines/Torque3D / updateSkinBuffer

Method updateSkinBuffer

Engine/source/ts/tsMesh.cpp:1214–1281  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1212//-----------------------------------------------------
1213
1214void TSSkinMesh::updateSkinBuffer( const Vector<MatrixF> &transforms, U8* buffer )
1215{
1216 PROFILE_SCOPE(TSSkinMesh_UpdateSkinBuffer);
1217
1218 AssertFatal(batchData.initialized, "Batch data not initialized. Call createSkinBatchData() before any skin update is called.");
1219
1220 if (TSShape::smUseHardwareSkinning || mNumVerts == 0)
1221 return;
1222
1223 const MatrixF *matrices = NULL;
1224
1225 static Vector<MatrixF> sBoneTransforms;
1226 sBoneTransforms.setSize(batchData.nodeIndex.size());
1227
1228 // set up bone transforms
1229 PROFILE_START(TSSkinMesh_UpdateTransforms);
1230 for (S32 i = 0; i < batchData.nodeIndex.size(); i++)
1231 {
1232 S32 node = batchData.nodeIndex[i];
1233 sBoneTransforms[i].mul(transforms[node], batchData.initialTransforms[i]);
1234 }
1235
1236 matrices = &sBoneTransforms[0];
1237 PROFILE_END();
1238
1239 const Point3F *inVerts = batchData.initialVerts.address();
1240 const Point3F *inNorms = batchData.initialNorms.address();
1241
1242 AssertFatal(inVerts, "Something went wrong, verts should be valid");
1243
1244 U8 *dest = buffer + mVertOffset;
1245 if (!dest)
1246 return;
1247
1248 Point3F srcVtx, srcNrm;
1249
1250 AssertFatal(batchData.vertexBatchOperations.size() == batchData.initialVerts.size(), "Assumption failed!");
1251
1252 Point3F skinnedVert;
1253 Point3F skinnedNorm;
1254
1255 for (Vector<BatchData::BatchedVertex>::const_iterator itr = batchData.vertexBatchOperations.begin();
1256 itr != batchData.vertexBatchOperations.end(); itr++)
1257 {
1258 const BatchData::BatchedVertex &curVert = *itr;
1259
1260 skinnedVert.zero();
1261 skinnedNorm.zero();
1262
1263 for (S32 tOp = 0; tOp < curVert.transformCount; tOp++)
1264 {
1265 const BatchData::TransformOp &transformOp = curVert.transform[tOp];
1266
1267 const MatrixF& deltaTransform = matrices[transformOp.transformIndex];
1268
1269 deltaTransform.mulP(inVerts[curVert.vertexIndex], &srcVtx);
1270 skinnedVert += (srcVtx * transformOp.weight);
1271

Callers 1

updateVertexBufferMethod · 0.80

Calls 11

mulPMethod · 0.80
mulVMethod · 0.80
vertMethod · 0.80
normalMethod · 0.80
setSizeMethod · 0.45
sizeMethod · 0.45
mulMethod · 0.45
addressMethod · 0.45
beginMethod · 0.45
endMethod · 0.45
zeroMethod · 0.45

Tested by

no test coverage detected