Index: src/core/SkLinearBitmapPipeline.h |
diff --git a/src/core/SkLinearBitmapPipeline.h b/src/core/SkLinearBitmapPipeline.h |
index f6875c6a96ce6815af09b3a3e6fb1a1ca919e956..9d537df5017c63fe6a107c14e203e5335317074d 100644 |
--- a/src/core/SkLinearBitmapPipeline.h |
+++ b/src/core/SkLinearBitmapPipeline.h |
@@ -28,6 +28,23 @@ public: |
virtual void pointList4(Sk4fArg xs, Sk4fArg ys) = 0; |
}; |
+class BilerpProcessorInterface : public PointProcessorInterface { |
+public: |
+ // 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 bilerpList(Sk4fArg xs, Sk4fArg ys) = 0; |
+}; |
+ |
class PixelPlacerInterface { |
public: |
virtual ~PixelPlacerInterface() { } |
@@ -40,6 +57,7 @@ class SkLinearBitmapPipeline { |
public: |
SkLinearBitmapPipeline( |
const SkMatrix& inverse, |
+ SkFilterQuality filterQuality, |
SkShader::TileMode xTile, SkShader::TileMode yTile, |
const SkImageInfo& srcImageInfo, |
const void* srcImageData); |
@@ -73,13 +91,15 @@ public: |
}; |
using MatrixStage = PolymorphicUnion<PointProcessorInterface, 112>; |
- using TileStage = PolymorphicUnion<PointProcessorInterface, 96>; |
- using SampleStage = PolymorphicUnion<PointProcessorInterface, 80>; |
+ using FilterStage = PolymorphicUnion<PointProcessorInterface, 8>; |
+ using TileStage = PolymorphicUnion<BilerpProcessorInterface, 96>; |
+ using SampleStage = PolymorphicUnion<BilerpProcessorInterface, 80>; |
using PixelStage = PolymorphicUnion<PixelPlacerInterface, 80>; |
private: |
PointProcessorInterface* fFirstStage; |
MatrixStage fMatrixStage; |
+ FilterStage fFilterStage; |
TileStage fTileXOrBothStage; |
TileStage fTileYStage; |
SampleStage fSampleStage; |