* 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 | _animNodes.erase(key); | 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) { | 172 | void AnimDebugDraw::addRelativePoses(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); | 173 | _relativePoses[key] = PosesInfo(skeleton, poses, rootPose, color); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | void AnimDebugDraw::removePoses(const std::string& key) { | 176 | void AnimDebugDraw::removeRelativePoses(const std::string& key) { |
| 177 | _poses.erase(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 | static const uint32_t red = toRGBA(255, 0, 0, 255); | 188 | static const uint32_t red = toRGBA(255, 0, 0, 255); |
| @@ -338,6 +346,9 @@ void AnimDebugDraw::update() { · 157 unmodified lines | |||
| 338 | 346 | ||
| 339 | // figure out how many verts we will need. | 347 | // figure out how many verts we will need. |
| 340 | int numVerts = 0; | 348 | int numVerts = 0; |
| 349 | |||
| 350 | // AJT: FIX ME | ||
| 351 | /* | ||
| 341 | for (auto& iter : _skeletons) { | 352 | for (auto& iter : _skeletons) { |
| 342 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | 353 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 343 | numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; | 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 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | 389 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 367 | numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; | 390 | numVerts += skeleton->getNumJoints() * VERTICES_PER_BONE; |
| 368 | for (int i = 0; i < skeleton->getNumJoints(); i++) { | 391 | for (int i = 0; i < skeleton->getNumJoints(); i++) { |
| @@ -379,9 +402,14 @@ void AnimDebugDraw::update() { · 10 unmodified lines | |||
| 379 | auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap(); | 402 | auto myAvatarMarkerMap = DebugDraw::getInstance().getMyAvatarMarkerMap(); |
| 380 | numVerts += myAvatarMarkerMap.size() * VERTICES_PER_BONE; | 403 | numVerts += myAvatarMarkerMap.size() * VERTICES_PER_BONE; |
| 381 | 404 | ||
| 405 | // allocate verts! | ||
| 382 | data._vertexBuffer->resize(sizeof(Vertex) * numVerts); | 406 | data._vertexBuffer->resize(sizeof(Vertex) * numVerts); |
| 383 | Vertex* verts = (Vertex*)data._vertexBuffer->editData(); | 407 | Vertex* verts = (Vertex*)data._vertexBuffer->editData(); |
| 384 | Vertex* v = verts; | 408 | Vertex* v = verts; |
| 409 | |||
| 410 | // AJT: fixme | ||
| 411 | // draw skeletons | ||
| 412 | /* | ||
| 385 | for (auto& iter : _skeletons) { | 413 | for (auto& iter : _skeletons) { |
| 386 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | 414 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 387 | AnimPose rootPose = std::get<1>(iter.second); | 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 | for (auto& iter : _animNodes) { | 444 | for (auto& iter : _animNodes) { |
| 413 | AnimNode::ConstPointer& animNode = std::get<0>(iter.second); | 445 | AnimNode::ConstPointer& animNode = std::get<0>(iter.second); |
| 414 | AnimPose rootPose = std::get<1>(iter.second); | 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 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); | 487 | AnimSkeleton::ConstPointer& skeleton = std::get<0>(iter.second); |
| 452 | AnimPoseVec& poses = std::get<1>(iter.second); | 488 | AnimPoseVec& poses = std::get<1>(iter.second); |
| 453 | AnimPose rootPose = std::get<2>(iter.second); | 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 | // draw markers from shared DebugDraw singleton | 545 | // draw markers from shared DebugDraw singleton |
| 487 | for (auto& iter : markerMap) { | 546 | for (auto& iter : markerMap) { |