diff options
author | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-09-01 18:21:00 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@wolfbeast.com> | 2019-09-01 18:21:41 +0200 |
commit | 7b986188c1c3331a80fe0fb4062a060050b85e2a (patch) | |
tree | 9e302ed366574011329b125961c5f60252e739e9 /gfx/2d/Matrix.h | |
parent | 11965adc1debca20b7115802d4542aee747b3a1c (diff) | |
parent | 8f7d40e854f2941c2ddd75fb6532407e07a72609 (diff) | |
download | UXP-7b986188c1c3331a80fe0fb4062a060050b85e2a.tar UXP-7b986188c1c3331a80fe0fb4062a060050b85e2a.tar.gz UXP-7b986188c1c3331a80fe0fb4062a060050b85e2a.tar.lz UXP-7b986188c1c3331a80fe0fb4062a060050b85e2a.tar.xz UXP-7b986188c1c3331a80fe0fb4062a060050b85e2a.zip |
Merge working copy branch
Diffstat (limited to 'gfx/2d/Matrix.h')
-rw-r--r-- | gfx/2d/Matrix.h | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gfx/2d/Matrix.h b/gfx/2d/Matrix.h index 22a01ca10..84c9a5280 100644 --- a/gfx/2d/Matrix.h +++ b/gfx/2d/Matrix.h @@ -734,7 +734,8 @@ public: // Initialize a double-buffered array of points in homogenous space with // the input rectangle, aRect. Point4DTyped<UnknownUnits, F> points[2][kTransformAndClipRectMaxVerts]; - Point4DTyped<UnknownUnits, F>* dstPoint = points[0]; + Point4DTyped<UnknownUnits, F>* dstPointStart = points[0]; + Point4DTyped<UnknownUnits, F>* dstPoint = dstPointStart; *dstPoint++ = TransformPoint(Point4DTyped<UnknownUnits, F>(aRect.x, aRect.y, 0, 1)); *dstPoint++ = TransformPoint(Point4DTyped<UnknownUnits, F>(aRect.XMost(), aRect.y, 0, 1)); @@ -754,11 +755,11 @@ public: // points[1]. for (int plane=0; plane < 4; plane++) { planeNormals[plane].Normalize(); - Point4DTyped<UnknownUnits, F>* srcPoint = points[plane & 1]; + Point4DTyped<UnknownUnits, F>* srcPoint = dstPointStart; Point4DTyped<UnknownUnits, F>* srcPointEnd = dstPoint; - dstPoint = points[~plane & 1]; - Point4DTyped<UnknownUnits, F>* dstPointStart = dstPoint; + dstPointStart = points[~plane & 1]; + dstPoint = dstPointStart; Point4DTyped<UnknownUnits, F>* prevPoint = srcPointEnd - 1; F prevDot = planeNormals[plane].DotProduct(*prevPoint); @@ -787,10 +788,10 @@ public: } } - size_t dstPointCount = 0; - size_t srcPointCount = dstPoint - points[0]; - for (Point4DTyped<UnknownUnits, F>* srcPoint = points[0]; srcPoint < points[0] + srcPointCount; srcPoint++) { - + Point4DTyped<UnknownUnits, F>* srcPoint = dstPointStart; + Point4DTyped<UnknownUnits, F>* srcPointEnd = dstPoint; + size_t vertCount = 0; + while (srcPoint < srcPointEnd) { PointTyped<TargetUnits, F> p; if (srcPoint->w == 0.0) { // If a point lies on the intersection of the clipping planes at @@ -800,12 +801,13 @@ public: p = srcPoint->As2DPoint(); } // Emit only unique points - if (dstPointCount == 0 || p != aVerts[dstPointCount - 1]) { - aVerts[dstPointCount++] = p; + if (vertCount == 0 || p != aVerts[vertCount - 1]) { + aVerts[vertCount++] = p; } + srcPoint++; } - return dstPointCount; + return vertCount; } static const int kTransformAndClipRectMaxVerts = 32; |