Chromium Code Reviews| Index: src/core/SkBitmapProcState.h |
| diff --git a/src/core/SkBitmapProcState.h b/src/core/SkBitmapProcState.h |
| index a006e090b5bf08c8487fb7ec56bb65fc81786d0d..9121c7a73ea2bb35949aaa1b4dee9242e6ca994b 100644 |
| --- a/src/core/SkBitmapProcState.h |
| +++ b/src/core/SkBitmapProcState.h |
| @@ -27,10 +27,40 @@ typedef SkFixed3232 SkFractionalInt; |
| class SkPaint; |
| -struct SkBitmapProcState { |
| - SkBitmapProcState(const SkBitmapProvider&, SkShader::TileMode tmx, SkShader::TileMode tmy); |
| - SkBitmapProcState(const SkBitmap&, SkShader::TileMode tmx, SkShader::TileMode tmy); |
| - ~SkBitmapProcState(); |
| +struct SkBitmapProcInfo { |
| + SkBitmapProcInfo(const SkBitmapProvider&, SkShader::TileMode tmx, SkShader::TileMode tmy); |
| + SkBitmapProcInfo(const SkBitmap&, SkShader::TileMode tmx, SkShader::TileMode tmy); |
| + ~SkBitmapProcInfo(); |
| + |
| + const SkBitmapProvider fProvider; |
| + |
| + SkPixmap fPixmap; |
| + SkMatrix fInvMatrix; // copy of what is in fBMState, can we remove the dup? |
| + uint8_t fInvType; |
| + SkColor fPaintColor; |
| + uint8_t fTileModeX; |
|
herb_g
2016/03/02 16:00:18
Can we switch TileMode in SkShader to be.
enum Til
reed1
2016/03/02 16:28:28
Done.
|
| + uint8_t fTileModeY; |
| + uint8_t fFilterLevel; |
| + |
| + bool init(const SkMatrix& inverse, const SkPaint&); |
| + |
| +private: |
| + enum { |
| + kBMStateSize = 136 // found by inspection. if too small, we will call new/delete |
| + }; |
| + SkAlignedSStorage<kBMStateSize> fBMStateStorage; |
| + SkBitmapController::State* fBMState; |
| +}; |
| + |
| +struct SkBitmapProcState : public SkBitmapProcInfo { |
| + SkBitmapProcState(const SkBitmapProvider& prov, SkShader::TileMode tmx, SkShader::TileMode tmy) |
| + : SkBitmapProcInfo(prov, tmx, tmy) {} |
| + SkBitmapProcState(const SkBitmap& bitmap, SkShader::TileMode tmx, SkShader::TileMode tmy) |
| + : SkBitmapProcInfo(bitmap, tmx, tmy) {} |
| + |
| + bool setup(const SkMatrix& inv, const SkPaint& paint) { |
| + return this->init(inv, paint) && this->chooseProcs(); |
| + } |
| typedef void (*ShaderProc32)(const void* ctx, int x, int y, SkPMColor[], int count); |
| @@ -50,11 +80,7 @@ struct SkBitmapProcState { |
| typedef U16CPU (*FixedTileLowBitsProc)(SkFixed, int); // returns 0..0xF |
| typedef U16CPU (*IntTileProc)(int value, int count); // returns 0..count-1 |
| - SkPixmap fPixmap; |
| - SkMatrix fInvMatrix; // copy of what is in fBMState, can we remove the dup? |
| - |
| SkMatrix::MapXYProc fInvProc; // chooseProcs |
| - |
| SkFractionalInt fInvSxFractionalInt; |
| SkFractionalInt fInvKyFractionalInt; |
| @@ -66,14 +92,10 @@ struct SkBitmapProcState { |
| SkFixed fFilterOneX; |
| SkFixed fFilterOneY; |
| - SkPMColor fPaintPMColor; // chooseProcs - A8 config |
| SkFixed fInvSx; // chooseProcs |
| SkFixed fInvKy; // chooseProcs |
| + SkPMColor fPaintPMColor; // chooseProcs - A8 config |
| uint16_t fAlphaScale; // chooseProcs |
| - uint8_t fInvType; // chooseProcs |
| - uint8_t fTileModeX; // CONSTRUCTOR |
| - uint8_t fTileModeY; // CONSTRUCTOR |
| - uint8_t fFilterLevel; // chooseProcs |
| /** Platforms implement this, and can optionally overwrite only the |
| following fields: |
| @@ -114,26 +136,15 @@ struct SkBitmapProcState { |
| SampleProc32 getSampleProc32() const { return fSampleProc32; } |
| private: |
| - friend class SkBitmapProcShader; |
| - friend class SkLightingShaderImpl; |
| - |
| ShaderProc32 fShaderProc32; // chooseProcs |
| ShaderProc16 fShaderProc16; // chooseProcs |
| // These are used if the shaderproc is nullptr |
| MatrixProc fMatrixProc; // chooseProcs |
| SampleProc32 fSampleProc32; // chooseProcs |
| - const SkBitmapProvider fProvider; |
| - |
| - enum { |
| - kBMStateSize = 136 // found by inspection. if too small, we will call new/delete |
| - }; |
| - SkAlignedSStorage<kBMStateSize> fBMStateStorage; |
| - SkBitmapController::State* fBMState; |
| - |
| MatrixProc chooseMatrixProc(bool trivial_matrix); |
| - bool chooseProcs(const SkMatrix& inv, const SkPaint&); |
| - bool chooseScanlineProcs(bool trivialMatrix, bool clampClamp, const SkPaint& paint); |
| + bool chooseProcs(); // caller must have called init() first (on our base-class) |
| + bool chooseScanlineProcs(bool trivialMatrix, bool clampClamp); |
| ShaderProc32 chooseShaderProc32(); |
| // Return false if we failed to setup for fast translate (e.g. overflow) |