* fixed debug rendering * improved jointState/animPose diff detection code.
Showing the changes to libraries/render-utils/src/AnimDebugDraw.cpp (1 of 6 files). Show all
Unified · Split
| @@ -169,12 +169,20 @@ void AnimDebugDraw::removeAnimNode(const std::string& key) { · 168 unmodified lines | ||
| 169 | 169 | _animNodes.erase(key); |
| 170 | 170 | } |
| 171 | 171 | |
| 172 | −void AnimDebugDraw::addPoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) { | |
| 173 | − _poses[key] = PosesInfo(skeleton, poses, rootPose, color); | |
| 172 | +void AnimDebugDraw::addRelativePoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) { | |
| 173 | + _relativePoses[key] = PosesInfo(skeleton, poses, rootPose, color); | |
| 174 | 174 | } |
| 175 | 175 | |
| 176 | −void AnimDebugDraw::removePoses(const std::string& key) { | |
| 177 | − _poses.erase(key); | |
| 176 | +void AnimDebugDraw::removeRelativePoses(const std::string& key) { | |
| 177 | + _relativePoses.erase(key); | |
| 178 | +} | |
| 179 | + | |
| 180 | +void AnimDebugDraw::addAbsolutePoses(const std::string& key, AnimSkeleton::ConstPointer skeleton, const AnimPoseVec& poses, const AnimPose& rootPose, const glm::vec4& color) { | |
| 181 | + _absolutePoses[key] = PosesInfo(skeleton, poses, rootPose, color); | |
| 182 | +} | |
| 183 | + | |
| 184 | +void AnimDebugDraw::removeAbsolutePoses(const std::string& key) { | |
| 185 | + _absolutePoses.erase(key); | |
| 178 | 186 | } |
| 179 | 187 | |
| 180 | 188 | static const uint32_t red = toRGBA(255, 0, 0, 255); |
| @@ -338,6 +346,9 @@ void AnimDebugDraw::update() { · 157 unmodified lines | ||
| 338 | 346 | |
| 339 | 347 | // figure out how many verts we will need. |
| 340 | 348 | int numVerts = 0; |
| 349 | + | |
| 350 | + // AJT: FIX ME | |
| 351 | + /* | |
| 341 | 352 | for (auto& iter : _skeletons) { |
| 342 | 353 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 343 | 354 | numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; |
| @@ -362,7 +373,19 @@ void AnimDebugDraw::update() { · 18 unmodified lines | ||
| 362 | 373 | } |
| 363 | 374 | } |
| 364 | 375 | |
| 365 | − for (auto& iter : _poses) { | |
| 376 | + for (auto& iter : _relativePoses) { | |
| 377 | + AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | |
| 378 | + numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; | |
| 379 | + for (int i = 0; i < skeleton->getNumJoints(); i++) { | |
| 380 | + auto parentIndex = skeleton->getParentIndex(i); | |
| 381 | + if (parentIndex >= 0) { | |
| 382 | + numVerts += VERTICES_PER_LINK; | |
| 383 | + } | |
| 384 | + } | |
| 385 | + } | |
| 386 | + */ | |
| 387 | + | |
| 388 | + for (auto& iter : _absolutePoses) { | |
| 366 | 389 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 367 | 390 | numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; |
| 368 | 391 | for (int i = 0; i < skeleton->getNumJoints(); i++) { |
| @@ -379,9 +402,14 @@ void AnimDebugDraw::update() { · 10 unmodified lines | ||
| 379 | 402 | auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap(); |
| 380 | 403 | numVerts += myAvatarMarkerMap.size() * VERTICES_PER_BONE; |
| 381 | 404 | |
| 405 | + // allocate verts! | |
| 382 | 406 | data._vertexBuffer->resize(sizeof(Vertex) * numVerts); |
| 383 | 407 | Vertex* verts = (Vertex*)data._vertexBuffer->editData(); |
| 384 | 408 | Vertex* v = verts; |
| 409 | + | |
| 410 | + // AJT: fixme | |
| 411 | + // draw skeletons | |
| 412 | + /* | |
| 385 | 413 | for (auto& iter : _skeletons) { |
| 386 | 414 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 387 | 415 | AnimPose rootPose = std::get<1>(iter.second); |
| @@ -408,7 +436,11 @@ void AnimDebugDraw::update() { · 20 unmodified lines | ||
| 408 | 436 | } |
| 409 | 437 | } |
| 410 | 438 | } |
| 439 | + */ | |
| 411 | 440 | |
| 441 | + // AJT: FIXME | |
| 442 | + /* | |
| 443 | + // draw animNodes | |
| 412 | 444 | for (auto& iter : _animNodes) { |
| 413 | 445 | AnimNode::ConstPointer& animNode = std::get<0>(iter.second); |
| 414 | 446 | AnimPose rootPose = std::get<1>(iter.second); |
| @@ -446,8 +478,12 @@ void AnimDebugDraw::update() { · 31 unmodified lines | ||
| 446 | 478 | } |
| 447 | 479 | } |
| 448 | 480 | } |
| 481 | + */ | |
| 449 | 482 | |
| 450 | − for (auto& iter : _poses) { | |
| 483 | + // AJT: FIX ME | |
| 484 | + /* | |
| 485 | + // draw relative poses | |
| 486 | + for (auto& iter : _relativePoses) { | |
| 451 | 487 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 452 | 488 | AnimPoseVec& poses = std::get<1>(iter.second); |
| 453 | 489 | AnimPose rootPose = std::get<2>(iter.second); |
| @@ -482,6 +518,29 @@ void AnimDebugDraw::update() { · 28 unmodified lines | ||
| 482 | 518 | } |
| 483 | 519 | } |
| 484 | 520 | } |
| 521 | + */ | |
| 522 | + | |
| 523 | + // draw absolute poses | |
| 524 | + for (auto& iter : _absolutePoses) { | |
| 525 | + AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | |
| 526 | + AnimPoseVec& absPoses = std::get<1>(iter.second); | |
| 527 | + AnimPose rootPose = std::get<2>(iter.second); | |
| 528 | + glm::vec4 color = std::get<3>(iter.second); | |
| 529 | + | |
| 530 | + for (int i = 0; i < skeleton->getNumJoints(); i++) { | |
| 531 | + const float radius = BONE_RADIUS / (absPoses[i].scale.x * rootPose.scale.x); | |
| 532 | + | |
| 533 | + // draw bone | |
| 534 | + addBone(rootPose, absPoses[i], radius, v); | |
| 535 | + | |
| 536 | + // draw link to parent | |
| 537 | + auto parentIndex = skeleton->getParentIndex(i); | |
| 538 | + if (parentIndex >= 0) { | |
| 539 | + assert(parentIndex < skeleton->getNumJoints()); | |
| 540 | + addLink(rootPose, absPoses[i], absPoses[parentIndex], radius, color, v); | |
| 541 | + } | |
| 542 | + } | |
| 543 | + } | |
| 485 | 544 | |
| 486 | 545 | // draw markers from shared DebugDraw singleton |
| 487 | 546 | for (auto& iter : markerMap) { |