| Index: src/core/SkLinearBitmapPipeline_tile.h
|
| diff --git a/src/core/SkLinearBitmapPipeline_tile.h b/src/core/SkLinearBitmapPipeline_tile.h
|
| index 19bdedcfba314f87ee63efb510701db41afa36c3..60cc2a5ef09acb8eb01f4f71d1f5608ebe0484f3 100644
|
| --- a/src/core/SkLinearBitmapPipeline_tile.h
|
| +++ b/src/core/SkLinearBitmapPipeline_tile.h
|
| @@ -234,79 +234,6 @@
|
| const Sk4s fXsInvMax;
|
| };
|
|
|
| -class XRepeatUnitScaleStrategy {
|
| -public:
|
| - XRepeatUnitScaleStrategy(int32_t max)
|
| - : fXMax{SkScalar(max)}
|
| - , fXsMax{SkScalar(max)}
|
| - , fXsCap{SkScalar(nextafterf(SkScalar(max), 0.0f))}
|
| - , fXsInvMax{1.0f / SkScalar(max)} { }
|
| -
|
| - void tileXPoints(Sk4s* xs) {
|
| - Sk4s divX = *xs * fXsInvMax;
|
| - Sk4s modX = *xs - divX.floor() * fXsMax;
|
| - *xs = Sk4s::Min(fXsCap, modX);
|
| - SkASSERT(0 <= (*xs)[0] && (*xs)[0] < fXMax);
|
| - SkASSERT(0 <= (*xs)[1] && (*xs)[1] < fXMax);
|
| - SkASSERT(0 <= (*xs)[2] && (*xs)[2] < fXMax);
|
| - SkASSERT(0 <= (*xs)[3] && (*xs)[3] < fXMax);
|
| - }
|
| -
|
| - template<typename Next>
|
| - bool maybeProcessSpan(Span originalSpan, Next* next) {
|
| - SkASSERT(!originalSpan.isEmpty());
|
| - SkPoint start; SkScalar length; int count;
|
| - std::tie(start, length, count) = originalSpan;
|
| - // Make x and y in range on the tile.
|
| - SkScalar x = tile_mod(X(start), fXMax);
|
| - SkScalar y = Y(start);
|
| -
|
| - // No need trying to go fast because the steps are larger than a tile or there is one point.
|
| - if (fXMax == 1 || count <= 1) {
|
| - return false;
|
| - }
|
| -
|
| - // x should be on the tile.
|
| - SkASSERT(0.0f <= x && x < fXMax);
|
| - Span span({x, y}, length, count);
|
| -
|
| - if (SkScalarFloorToScalar(x) != 0.0f) {
|
| - Span toDraw = span.breakAt(fXMax, 1.0f);
|
| - next->pointSpan(toDraw);
|
| - span.offset(-fXMax);
|
| - }
|
| -
|
| - // All of the span could have been on the first tile. If so, then no work to do.
|
| - if (span.isEmpty()) return true;
|
| -
|
| - // At this point the span should be aligned to zero.
|
| - SkASSERT(SkScalarFloorToScalar(span.startX()) == 0.0f);
|
| -
|
| - SkScalar div = span.length() / fXMax;
|
| - int32_t repeatCount = SkScalarFloorToInt(div);
|
| - Span repeatableSpan{{0.0f, y}, fXMax - 1.0f, SkScalarFloorToInt(fXMax)};
|
| -
|
| - // Repeat the center section.
|
| - next->repeatSpan(repeatableSpan, repeatCount);
|
| -
|
| - // There may be some of the span left over.
|
| - span.breakAt(SkScalar(repeatCount) * fXMax, 1.0f);
|
| -
|
| - // All on a single tile.
|
| - if (!span.isEmpty()) {
|
| - next->pointSpan(span);
|
| - }
|
| -
|
| - return true;
|
| - }
|
| -
|
| -private:
|
| - const SkScalar fXMax;
|
| - const Sk4s fXsMax;
|
| - const Sk4s fXsCap;
|
| - const Sk4s fXsInvMax;
|
| -};
|
| -
|
| class YRepeatStrategy {
|
| public:
|
| YRepeatStrategy(int32_t max)
|
|
|