Index: src/core/SkBitmapProcShader.cpp |
diff --git a/src/core/SkBitmapProcShader.cpp b/src/core/SkBitmapProcShader.cpp |
index 0e7ac6a27758b348ce549daa482055750bc4c392..70b5212b95df2fcbd0796b8e2459abc42a468a92 100644 |
--- a/src/core/SkBitmapProcShader.cpp |
+++ b/src/core/SkBitmapProcShader.cpp |
@@ -5,11 +5,14 @@ |
* Use of this source code is governed by a BSD-style license that can be |
* found in the LICENSE file. |
*/ |
-#include "SkBitmapProcShader.h" |
#include "SkColorPriv.h" |
#include "SkFlattenableBuffers.h" |
#include "SkPixelRef.h" |
#include "SkErrorInternals.h" |
+#include "SkBitmapProcShader.h" |
+ |
+#include "effects/GrSimpleTextureEffect.h" |
+#include "effects/GrBicubicEffect.h" |
bool SkBitmapProcShader::CanDo(const SkBitmap& bm, TileMode tx, TileMode ty) { |
switch (bm.config()) { |
@@ -367,11 +370,9 @@ GrEffectRef* SkBitmapProcShader::asNewEffect(GrContext* context, const SkPaint& |
textureFilterMode = GrTextureParams::kMipMap_FilterMode; |
break; |
case SkPaint::kHigh_FilterLevel: |
- SkErrorInternals::SetError( kInvalidPaint_SkError, |
- "Sorry, I don't yet support high quality " |
- "filtering on the GPU; falling back to " |
- "MIPMaps."); |
- textureFilterMode = GrTextureParams::kMipMap_FilterMode; |
+ // fall back to no filtering here; we will install another |
+ // shader that will do the HQ filtering. |
+ textureFilterMode = GrTextureParams::kNone_FilterMode; |
break; |
default: |
SkErrorInternals::SetError( kInvalidPaint_SkError, |
@@ -386,11 +387,17 @@ GrEffectRef* SkBitmapProcShader::asNewEffect(GrContext* context, const SkPaint& |
GrTexture* texture = GrLockAndRefCachedBitmapTexture(context, fRawBitmap, ¶ms); |
if (NULL == texture) { |
- SkDebugf("Couldn't convert bitmap to texture.\n"); |
+ SkErrorInternals::SetError( kInternalError_SkError, |
+ "Couldn't convert bitmap to texture."); |
return NULL; |
} |
- GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, params); |
+ GrEffectRef* effect = NULL; |
+ if (paintFilterLevel == SkPaint::kHigh_FilterLevel) { |
+ effect = GrBicubicEffect::Create(texture, matrix, params); |
+ } else { |
+ effect = GrSimpleTextureEffect::Create(texture, matrix, params); |
+ } |
GrUnlockAndUnrefCachedBitmapTexture(texture); |
return effect; |
} |