ts: fix for TsSimplify + testTsSimplify
authorPaul Molodowitch <pmolodowitch@nvidia.com>
Thu, 25 Jan 2024 06:30:21 +0000 (22:30 -0800)
committerPaul Molodowitch <pmolodowitch@nvidia.com>
Thu, 25 Jan 2024 06:30:21 +0000 (22:30 -0800)
On windows debug builds, was getting a "Debug Assertion Failed" on
simplify.cpp, line 379.  This is because this we were using iterators
that have become invalid because the underlying data was altered.

pxr/base/ts/simplify.cpp

index b2b176c6b53f8a0c9eddbb2a4b4cd350c1cb4bf8..19a4626a3c1643e1e8ca949913b2cf6d2d789cc8 100644 (file)
@@ -351,12 +351,16 @@ _ComputeErrorIfKeyRemoved(TsSpline* spline, TsTime t,
 
     TsKeyFrame kCopy  = *k;
     TsKeyFrame k0Copy;
+    bool k0CopyValid = false;
     TsKeyFrame k1Copy;
+    bool k1CopyValid = false;
     if (k0 != spline->end()) {
         k0Copy = *k0;
+        k0CopyValid = true;
     }
     if (k1 != spline->end()) {
         k1Copy = *k1;
+        k1CopyValid = true;
     }
 
     spline->RemoveKeyFrame(kCopy.GetTime());
@@ -376,10 +380,10 @@ _ComputeErrorIfKeyRemoved(TsSpline* spline, TsTime t,
     spline->SetKeyFrame( kCopy);
     // We may have set these in _SimplifySpan, so we want to set them back to
     // what they were before.
-    if (k0 != spline->end()) {
+    if (k0CopyValid) {
         spline->SetKeyFrame(k0Copy);
     }
-    if (k1 != spline->end()) {
+    if (k1CopyValid) {
         spline->SetKeyFrame(k1Copy);
     }