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

Unified Diff: src/core/SkBitmapProcState.cpp

Issue 207683004: Extract most of the mutable state of SkShader into a separate Context object. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: totalInverse param optional; SkShader::computeTotalInverse; SkBitmapProcShader::validInternal Created 6 years, 9 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
Index: src/core/SkBitmapProcState.cpp
diff --git a/src/core/SkBitmapProcState.cpp b/src/core/SkBitmapProcState.cpp
index cdc582bfeec64a70791d0ecb615186b98296e639..b3431f4eb84e267e6bae7769e7db7d44d8a6fd39 100644
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -377,6 +377,26 @@ SkBitmapProcState::~SkBitmapProcState() {
SkDELETE(fBitmapFilter);
}
+SkBitmapProcState::SkBitmapProcState(const SkBitmapProcState& src)
+ : fInvMatrix(src.fInvMatrix), fInvProc(src.fInvProc),
+ fInvSxFractionalInt(src.fInvSxFractionalInt), fInvKyFractionalInt(src.fInvKyFractionalInt),
+ fTileProcX(src.fTileProcX), fTileProcY(src.fTileProcY),
+ fTileLowBitsProcX(src.fTileLowBitsProcX), fTileLowBitsProcY(src.fTileLowBitsProcY),
+ fIntTileProcY(src.fIntTileProcY), fFilterOneX(src.fFilterOneX), fFilterOneY(src.fFilterOneY),
+ fPaintPMColor(src.fPaintPMColor), fInvSx(src.fInvSx), fInvKy(src.fInvKy),
+ fAlphaScale(src.fAlphaScale), fInvType(src.fInvType),
+ fTileModeX(src.fTileModeX), fTileModeY(src.fTileModeY), fFilterLevel(src.fFilterLevel),
+ fShaderProc32(src.fShaderProc32), fShaderProc16(src.fShaderProc16),
+ fMatrixProc(src.fMatrixProc), fSampleProc32(src.fSampleProc32),
+ fSampleProc16(src.fSampleProc16), fOrigBitmap(src.fOrigBitmap),
+ fScaledBitmap(src.fScaledBitmap)
+{
+ // TODO(dominikg): Doesn't work yet. Assert in SkBitmapProcShader.cpp on line 224 fails.
+ fBitmap = src.fBitmap == &src.fOrigBitmap ? &fOrigBitmap : &fScaledBitmap;
+
+ fBitmapFilter = src.fBitmapFilter;
+}
+
bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
SkASSERT(fOrigBitmap.width() && fOrigBitmap.height());
@@ -398,6 +418,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
}
// The above logic should have always assigned fBitmap, but in case it
// didn't, we check for that now...
+ // TODO(dominikg): Ask humper@ if we can just use an SkASSERT(fBitmap)?
if (NULL == fBitmap) {
return false;
}
@@ -480,6 +501,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
// shader will perform.
fMatrixProc = this->chooseMatrixProc(trivialMatrix);
+ // TODO(dominikg): SkASSERT(fMatrixProc) instead? chooseMatrixProc never returns NULL.
if (NULL == fMatrixProc) {
return false;
}
@@ -521,6 +543,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
fPaintPMColor = SkPreMultiplyColor(paint.getColor());
break;
default:
+ // TODO(dominikg): Should we ever get here? SkASSERT(false) instead?
return false;
}

Powered by Google App Engine
This is Rietveld 408576698