Index: src/core/SkLinearBitmapPipeline.cpp |
diff --git a/src/core/SkLinearBitmapPipeline.cpp b/src/core/SkLinearBitmapPipeline.cpp |
index 0359e1fbb1c7d57c4570b5f7b43a2888a0ac9cb6..4f6985b594046ed9a8a535fe9026c56d2670dc33 100644 |
--- a/src/core/SkLinearBitmapPipeline.cpp |
+++ b/src/core/SkLinearBitmapPipeline.cpp |
@@ -20,65 +20,6 @@ |
#include "SkOpts.h" |
#include "SkPM4f.h" |
-class SkLinearBitmapPipeline::PointProcessorInterface { |
-public: |
- virtual ~PointProcessorInterface() { } |
- // Take the first n (where 0 < n && n < 4) items from xs and ys and sample those points. For |
- // nearest neighbor, that means just taking the floor xs and ys. For bilerp, this means |
- // to expand the bilerp filter around the point and sample using that filter. |
- virtual void VECTORCALL pointListFew(int n, Sk4s xs, Sk4s ys) = 0; |
- // Same as pointListFew, but n = 4. |
- virtual void VECTORCALL pointList4(Sk4s xs, Sk4s ys) = 0; |
- // A span is a compact form of sample points that are obtained by mapping points from |
- // destination space to source space. This is used for horizontal lines only, and is mainly |
- // used to take advantage of memory coherence for horizontal spans. |
- virtual void pointSpan(Span span) = 0; |
-}; |
- |
-class SkLinearBitmapPipeline::SampleProcessorInterface |
- : public SkLinearBitmapPipeline::PointProcessorInterface { |
-public: |
- // Used for nearest neighbor when scale factor is 1.0. The span can just be repeated with no |
- // edge pixel alignment problems. This is for handling a very common case. |
- virtual void repeatSpan(Span span, int32_t repeatCount) = 0; |
- |
- // The x's and y's are setup in the following order: |
- // +--------+--------+ |
- // | | | |
- // | px00 | px10 | |
- // | 0 | 1 | |
- // +--------+--------+ |
- // | | | |
- // | px01 | px11 | |
- // | 2 | 3 | |
- // +--------+--------+ |
- // These pixels coordinates are arranged in the following order in xs and ys: |
- // px00 px10 px01 px11 |
- virtual void VECTORCALL bilerpEdge(Sk4s xs, Sk4s ys) = 0; |
- |
- // A span represents sample points that have been mapped from destination space to source |
- // space. Each sample point is then expanded to the four bilerp points by add +/- 0.5. The |
- // resulting Y values my be off the tile. When y +/- 0.5 are more than 1 apart because of |
- // tiling, the second Y is used to denote the retiled Y value. |
- virtual void bilerpSpan(Span span, SkScalar y) = 0; |
-}; |
- |
-class SkLinearBitmapPipeline::DestinationInterface { |
-public: |
- virtual ~DestinationInterface() { } |
- // Count is normally not needed, but in these early stages of development it is useful to |
- // check bounds. |
- // TODO(herb): 4/6/2016 - remove count when code is stable. |
- virtual void setDestination(void* dst, int count) = 0; |
-}; |
- |
-class SkLinearBitmapPipeline::BlendProcessorInterface |
- : public SkLinearBitmapPipeline::DestinationInterface { |
-public: |
- virtual void VECTORCALL blendPixel(Sk4f pixel0) = 0; |
- virtual void VECTORCALL blend4Pixels(Sk4f p0, Sk4f p1, Sk4f p2, Sk4f p3) = 0; |
-}; |
- |
//////////////////////////////////////////////////////////////////////////////////////////////////// |
// SkLinearBitmapPipeline::Stage |
template<typename Base, size_t kSize, typename Next> |
@@ -469,90 +410,6 @@ static SkLinearBitmapPipeline::PointProcessorInterface* choose_tiler( |
} |
//////////////////////////////////////////////////////////////////////////////////////////////////// |
-// Source Sampling Stage |
-template <SkColorType colorType, SkColorProfileType colorProfile, typename Next> |
-class NearestNeighborSampler final : public SkLinearBitmapPipeline::SampleProcessorInterface { |
-public: |
- template <typename... Args> |
- NearestNeighborSampler(Next* next, Args&&... args) |
- : fSampler{next, std::forward<Args>(args)...} { } |
- |
- NearestNeighborSampler(Next* next, const NearestNeighborSampler& sampler) |
- : fSampler{next, sampler.fSampler} { } |
- |
- void VECTORCALL pointListFew(int n, Sk4s xs, Sk4s ys) override { |
- fSampler.nearestListFew(n, xs, ys); |
- } |
- |
- void VECTORCALL pointList4(Sk4s xs, Sk4s ys) override { |
- fSampler.nearestList4(xs, ys); |
- } |
- |
- void pointSpan(Span span) override { |
- fSampler.nearestSpan(span); |
- } |
- |
- void repeatSpan(Span span, int32_t repeatCount) override { |
- while (repeatCount > 0) { |
- fSampler.nearestSpan(span); |
- repeatCount--; |
- } |
- } |
- |
- void VECTORCALL bilerpEdge(Sk4s xs, Sk4s ys) override { |
- SkFAIL("Using nearest neighbor sampler, but calling a bilerpEdge."); |
- } |
- |
- void bilerpSpan(Span span, SkScalar y) override { |
- SkFAIL("Using nearest neighbor sampler, but calling a bilerpSpan."); |
- } |
- |
-private: |
- GeneralSampler<colorType, colorProfile, Next> fSampler; |
-}; |
- |
-template <SkColorType colorType, SkColorProfileType colorProfile, typename Next> |
-class BilerpSampler final : public SkLinearBitmapPipeline::SampleProcessorInterface { |
-public: |
- template <typename... Args> |
- BilerpSampler(Next* next, Args&&... args) |
- : fSampler{next, std::forward<Args>(args)...} { } |
- |
- BilerpSampler(Next* next, const BilerpSampler& sampler) |
- : fSampler{next, sampler.fSampler} { } |
- |
- void VECTORCALL pointListFew(int n, Sk4s xs, Sk4s ys) override { |
- fSampler.bilerpListFew(n, xs, ys); |
- } |
- |
- void VECTORCALL pointList4(Sk4s xs, Sk4s ys) override { |
- fSampler.bilerpList4(xs, ys); |
- } |
- |
- void pointSpan(Span span) override { |
- fSampler.bilerpSpan(span); |
- } |
- |
- void repeatSpan(Span span, int32_t repeatCount) override { |
- while (repeatCount > 0) { |
- fSampler.bilerpSpan(span); |
- repeatCount--; |
- } |
- } |
- |
- void VECTORCALL bilerpEdge(Sk4s xs, Sk4s ys) override { |
- fSampler.bilerpEdge(xs, ys); |
- } |
- |
- void bilerpSpan(Span span, SkScalar y) override { |
- fSampler.bilerpSpanWithY(span, y); |
- } |
- |
-private: |
- GeneralSampler<colorType, colorProfile, Next> fSampler; |
-}; |
- |
-//////////////////////////////////////////////////////////////////////////////////////////////////// |
// Specialized Samplers |
// RGBA8888UnitRepeatSrc - A sampler that takes advantage of the fact the the src and destination |