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

Unified Diff: src/core/SkBitmapProcState.cpp

Issue 19825002: stop using bitmap-filter flags outside of paint itself, as a step towards really changing them into… (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 5 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 a8a9b03d9ad7e13e00eb991d005114040c957849..a1716e5b66cdf59eaa6191c04af343e5f9208a73 100644
--- a/src/core/SkBitmapProcState.cpp
+++ b/src/core/SkBitmapProcState.cpp
@@ -96,7 +96,8 @@ static bool valid_for_filtering(unsigned dimension) {
void SkBitmapProcState::possiblyScaleImage() {
- if (fFilterQuality != kHQ_BitmapFilter) {
+ if (fFilterLevel <= SkPaint::kLow_FilterLevel) {
+ // none or low (bilerp) does not need to look any further
return;
}
@@ -106,7 +107,8 @@ void SkBitmapProcState::possiblyScaleImage() {
// the matrix is simple, and if we're doing high quality scaling.
// If so, do the bitmap scale here and remove the scaling component from the matrix.
- if (fInvMatrix.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask) &&
+ if (SkPaint::kHigh_FilterLevel == fFilterLevel &&
humper 2013/07/19 18:20:26 This logic needs to be more sophisticated, because
reed1 2013/07/19 18:29:16 Not sure I agree. It may be more logical to have L
+ fInvMatrix.getType() <= (SkMatrix::kScale_Mask | SkMatrix::kTranslate_Mask) &&
(fInvMatrix.getScaleX() < 1 || fInvMatrix.getScaleY() < 1) &&
fOrigBitmap.config() == SkBitmap::kARGB_8888_Config) {
@@ -125,11 +127,12 @@ void SkBitmapProcState::possiblyScaleImage() {
// no need for any further filtering; we just did it!
- fFilterQuality = kNone_BitmapFilter;
+ fFilterLevel = SkPaint::kNone_FilterLevel;
return;
}
+ // If we get here, they are asking for a mipmap (if we're scaling down)
humper 2013/07/19 18:20:26 Sort of -- the HQ downscaler isn't a mipmap. The
if (!fOrigBitmap.hasMipMap()) {
// STEP 2: DOWNSAMPLE
@@ -155,7 +158,7 @@ void SkBitmapProcState::possiblyScaleImage() {
// Now that we've built the mipmaps and we know we're downsampling,
// downgrade to bilinear interpolation for the mip level.
- fFilterQuality = kBilerp_BitmapFilter;
+ fFilterLevel = SkPaint::kLow_FilterLevel;
}
}
@@ -202,14 +205,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
// We may downgrade it later if we determine that we either don't need
// or can't provide as high a quality filtering as the user requested.
- fFilterQuality = kNone_BitmapFilter;
- if (paint.isFilterBitmap()) {
- if (paint.getFlags() & SkPaint::kHighQualityFilterBitmap_Flag) {
- fFilterQuality = kHQ_BitmapFilter;
- } else {
- fFilterQuality = kBilerp_BitmapFilter;
- }
- }
+ fFilterLevel = paint.getFilterLevel();
#ifndef SK_IGNORE_IMAGE_PRESCALE
// possiblyScaleImage will look to see if it can rescale the image as a
@@ -261,7 +257,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
trivialMatrix = (fInvMatrix.getType() & ~SkMatrix::kTranslate_Mask) == 0;
- if (kHQ_BitmapFilter == fFilterQuality) {
+ if (SkPaint::kHigh_FilterLevel == fFilterLevel) {
humper 2013/07/19 18:20:26 What about poor medium level
reed1 2013/07/19 18:29:16 again: depends on our (new) definition of what Med
// If this is still set, that means we wanted HQ sampling
// but couldn't do it as a preprocess. Let's try to install
// the scanline version of the HQ sampler. If that process fails,
@@ -277,17 +273,17 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
fShaderProc32 = this->chooseBitmapFilterProc();
if (!fShaderProc32) {
- fFilterQuality = kBilerp_BitmapFilter;
+ fFilterLevel = SkPaint::kLow_FilterLevel;
}
}
- if (kBilerp_BitmapFilter == fFilterQuality) {
+ if (SkPaint::kLow_FilterLevel == fFilterLevel) {
// Only try bilerp if the matrix is "interesting" and
// the image has a suitable size.
if (fInvType <= SkMatrix::kTranslate_Mask ||
- !valid_for_filtering(fBitmap->width() | fBitmap->height())) {
- fFilterQuality = kNone_BitmapFilter;
+ !valid_for_filtering(fBitmap->width() | fBitmap->height())) {
+ fFilterLevel = SkPaint::kNone_FilterLevel;
}
}
@@ -305,7 +301,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
// still set to HQ by the time we get here, then we must have installed
// the shader proc above and can skip all this.
- if (fFilterQuality < kHQ_BitmapFilter) {
+ if (fFilterLevel < SkPaint::kHigh_FilterLevel) {
int index = 0;
if (fAlphaScale < 256) { // note: this distinction is not used for D16
@@ -314,7 +310,7 @@ bool SkBitmapProcState::chooseProcs(const SkMatrix& inv, const SkPaint& paint) {
if (fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) {
index |= 2;
}
- if (fFilterQuality != kNone_BitmapFilter) {
+ if (fFilterLevel > SkPaint::kNone_FilterLevel) {
index |= 4;
}
// bits 3,4,5 encoding the source bitmap format
@@ -445,7 +441,7 @@ static void Clamp_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s,
SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0);
SkASSERT(s.fInvKy == 0);
SkASSERT(count > 0 && colors != NULL);
- SkASSERT(SkBitmapProcState::kNone_BitmapFilter == s.fFilterQuality);
+ SkASSERT(SkPaint::kNone_FilterLevel == s.fFilterLevel);
const int maxX = s.fBitmap->width() - 1;
const int maxY = s.fBitmap->height() - 1;
@@ -519,7 +515,7 @@ static void Repeat_S32_D32_nofilter_trans_shaderproc(const SkBitmapProcState& s,
SkASSERT(((s.fInvType & ~SkMatrix::kTranslate_Mask)) == 0);
SkASSERT(s.fInvKy == 0);
SkASSERT(count > 0 && colors != NULL);
- SkASSERT(SkBitmapProcState::kNone_BitmapFilter == s.fFilterQuality);
+ SkASSERT(SkPaint::kNone_FilterLevel == s.fFilterLevel);
const int stopX = s.fBitmap->width();
const int stopY = s.fBitmap->height();
@@ -565,7 +561,7 @@ static void S32_D32_constX_shaderproc(const SkBitmapProcState& s,
int iY1 SK_INIT_TO_AVOID_WARNING;
int iSubY SK_INIT_TO_AVOID_WARNING;
- if (s.fFilterQuality != SkBitmapProcState::kNone_BitmapFilter) {
+ if (SkPaint::kNone_FilterLevel != s.fFilterLevel) {
SkBitmapProcState::MatrixProc mproc = s.getMatrixProc();
uint32_t xy[2];
@@ -646,7 +642,7 @@ static void S32_D32_constX_shaderproc(const SkBitmapProcState& s,
const SkPMColor* row0 = s.fBitmap->getAddr32(0, iY0);
SkPMColor color;
- if (s.fFilterQuality != SkBitmapProcState::kNone_BitmapFilter) {
+ if (SkPaint::kNone_FilterLevel != s.fFilterLevel) {
const SkPMColor* row1 = s.fBitmap->getAddr32(0, iY1);
if (s.fAlphaScale < 256) {
@@ -702,7 +698,7 @@ SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() {
static const unsigned kMask = SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask;
if (1 == fBitmap->width() && 0 == (fInvType & ~kMask)) {
- if (kNone_BitmapFilter == fFilterQuality &&
+ if (SkPaint::kNone_FilterLevel == fFilterLevel &&
fInvType <= SkMatrix::kTranslate_Mask &&
!this->setupForTranslate()) {
return DoNothing_shaderproc;
@@ -716,7 +712,7 @@ SkBitmapProcState::ShaderProc32 SkBitmapProcState::chooseShaderProc32() {
if (fInvType > SkMatrix::kTranslate_Mask) {
return NULL;
}
- if (fFilterQuality != kNone_BitmapFilter) {
+ if (SkPaint::kNone_FilterLevel != fFilterLevel) {
return NULL;
}
@@ -812,9 +808,9 @@ void SkBitmapProcState::DebugMatrixProc(const SkBitmapProcState& state,
// scale -vs- affine
// filter -vs- nofilter
if (state.fInvType <= (SkMatrix::kTranslate_Mask | SkMatrix::kScale_Mask)) {
- proc = state.fFilterQuality != kNone_BitmapFilter ? check_scale_filter : check_scale_nofilter;
+ proc = state.fFilterLevel != SkPaint::kNone_FilterLevel ? check_scale_filter : check_scale_nofilter;
} else {
- proc = state.fFilterQuality != kNone_BitmapFilter ? check_affine_filter : check_affine_nofilter;
+ proc = state.fFilterLevel != SkPaint::kNone_FilterLevel ? check_affine_filter : check_affine_nofilter;
}
proc(bitmapXY, count, state.fBitmap->width(), state.fBitmap->height());
}
@@ -849,7 +845,7 @@ int SkBitmapProcState::maxCountForBufferSize(size_t bufferSize) const {
size >>= 2;
}
- if (fFilterQuality != kNone_BitmapFilter) {
+ if (fFilterLevel != SkPaint::kNone_FilterLevel) {
size >>= 1;
}

Powered by Google App Engine
This is Rietveld 408576698