Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(936)

Unified Diff: src/core/SkBitmapProcState.h

Issue 1753903002: fission bitmapprocstate (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: use real types instead of uint8_t, fix formatting Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/core/SkBitmapProcShader.cpp ('k') | src/core/SkBitmapProcState.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/core/SkBitmapProcState.h
diff --git a/src/core/SkBitmapProcState.h b/src/core/SkBitmapProcState.h
index a006e090b5bf08c8487fb7ec56bb65fc81786d0d..2d3d0e43479b1c7c991bd2d922b2f797272956cd 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?
+ SkColor fPaintColor;
+ SkShader::TileMode fTileModeX;
+ SkShader::TileMode fTileModeY;
+ SkFilterQuality fFilterQuality;
+ SkMatrix::TypeMask fInvType;
+
+ 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)
@@ -199,7 +210,7 @@ public:
SkIntToScalar(y) + SK_ScalarHalf, &pt);
SkFixed biasX, biasY;
- if (s.fFilterLevel == kNone_SkFilterQuality) {
+ if (s.fFilterQuality == kNone_SkFilterQuality) {
// SkFixed epsilon bias to ensure inverse-mapped bitmap coordinates are rounded
// consistently WRT geometry. Note that we only need the bias for positive scales:
// for negative scales, the rounding is intrinsically correct.
« no previous file with comments | « src/core/SkBitmapProcShader.cpp ('k') | src/core/SkBitmapProcState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698