| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include "SkGpuDevice.h" | 8 #include "SkGpuDevice.h" |
| 9 | 9 |
| 10 #include "GrBlurUtils.h" | 10 #include "GrBlurUtils.h" |
| (...skipping 892 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 903 if (srcRect.fLeft <= 0 && srcRect.fTop <= 0 && | 903 if (srcRect.fLeft <= 0 && srcRect.fTop <= 0 && |
| 904 srcRect.fRight >= width && srcRect.fBottom >= height) { | 904 srcRect.fRight >= width && srcRect.fBottom >= height) { |
| 905 flags = (SkCanvas::DrawBitmapRectFlags) (flags | SkCanvas::kBleed_DrawBi
tmapRectFlag); | 905 flags = (SkCanvas::DrawBitmapRectFlags) (flags | SkCanvas::kBleed_DrawBi
tmapRectFlag); |
| 906 } | 906 } |
| 907 | 907 |
| 908 // If the render target is not msaa and draw is antialiased, we call | 908 // If the render target is not msaa and draw is antialiased, we call |
| 909 // drawRect instead of drawing on the render target directly. | 909 // drawRect instead of drawing on the render target directly. |
| 910 // FIXME: the tiled bitmap code path doesn't currently support | 910 // FIXME: the tiled bitmap code path doesn't currently support |
| 911 // anti-aliased edges, we work around that for now by drawing directly | 911 // anti-aliased edges, we work around that for now by drawing directly |
| 912 // if the image size exceeds maximum texture size. | 912 // if the image size exceeds maximum texture size. |
| 913 int maxTextureSize = fContext->caps()->maxTextureSize(); | 913 int maxTextureSize = fContext->getMaxTextureSize(); |
| 914 bool directDraw = fRenderTarget->isMultisampled() || | 914 bool directDraw = fRenderTarget->isMultisampled() || |
| 915 !paint.isAntiAlias() || | 915 !paint.isAntiAlias() || |
| 916 bitmap.width() > maxTextureSize || | 916 bitmap.width() > maxTextureSize || |
| 917 bitmap.height() > maxTextureSize; | 917 bitmap.height() > maxTextureSize; |
| 918 | 918 |
| 919 // we check whether dst rect are pixel aligned | 919 // we check whether dst rect are pixel aligned |
| 920 if (!directDraw) { | 920 if (!directDraw) { |
| 921 bool staysRect = draw.fMatrix->rectStaysRect(); | 921 bool staysRect = draw.fMatrix->rectStaysRect(); |
| 922 | 922 |
| 923 if (staysRect) { | 923 if (staysRect) { |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1027 int tileFilterPad; | 1027 int tileFilterPad; |
| 1028 if (doBicubic) { | 1028 if (doBicubic) { |
| 1029 tileFilterPad = GrBicubicEffect::kFilterTexelPad; | 1029 tileFilterPad = GrBicubicEffect::kFilterTexelPad; |
| 1030 } else if (GrTextureParams::kNone_FilterMode == textureFilterMode) { | 1030 } else if (GrTextureParams::kNone_FilterMode == textureFilterMode) { |
| 1031 tileFilterPad = 0; | 1031 tileFilterPad = 0; |
| 1032 } else { | 1032 } else { |
| 1033 tileFilterPad = 1; | 1033 tileFilterPad = 1; |
| 1034 } | 1034 } |
| 1035 params.setFilterMode(textureFilterMode); | 1035 params.setFilterMode(textureFilterMode); |
| 1036 | 1036 |
| 1037 int maxTileSize = fContext->caps()->maxTextureSize() - 2 * tileFilterPad; | 1037 int maxTileSize = fContext->getMaxTextureSize() - 2 * tileFilterPad; |
| 1038 int tileSize; | 1038 int tileSize; |
| 1039 | 1039 |
| 1040 SkIRect clippedSrcRect; | 1040 SkIRect clippedSrcRect; |
| 1041 if (this->shouldTileBitmap(bitmap, viewM, params, srcRectPtr, maxTileSize, &
tileSize, | 1041 if (this->shouldTileBitmap(bitmap, viewM, params, srcRectPtr, maxTileSize, &
tileSize, |
| 1042 &clippedSrcRect)) { | 1042 &clippedSrcRect)) { |
| 1043 this->drawTiledBitmap(bitmap, viewM, srcRect, clippedSrcRect, params, pa
int, flags, | 1043 this->drawTiledBitmap(bitmap, viewM, srcRect, clippedSrcRect, params, pa
int, flags, |
| 1044 tileSize, doBicubic); | 1044 tileSize, doBicubic); |
| 1045 } else { | 1045 } else { |
| 1046 // take the simple case | 1046 // take the simple case |
| 1047 bool needsTextureDomain = needs_texture_domain(bitmap, | 1047 bool needsTextureDomain = needs_texture_domain(bitmap, |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 * and that non-texture portion of the GrPaint has already been setup. | 1156 * and that non-texture portion of the GrPaint has already been setup. |
| 1157 */ | 1157 */ |
| 1158 void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, | 1158 void SkGpuDevice::internalDrawBitmap(const SkBitmap& bitmap, |
| 1159 const SkMatrix& viewMatrix, | 1159 const SkMatrix& viewMatrix, |
| 1160 const SkRect& srcRect, | 1160 const SkRect& srcRect, |
| 1161 const GrTextureParams& params, | 1161 const GrTextureParams& params, |
| 1162 const SkPaint& paint, | 1162 const SkPaint& paint, |
| 1163 SkCanvas::DrawBitmapRectFlags flags, | 1163 SkCanvas::DrawBitmapRectFlags flags, |
| 1164 bool bicubic, | 1164 bool bicubic, |
| 1165 bool needsTextureDomain) { | 1165 bool needsTextureDomain) { |
| 1166 SkASSERT(bitmap.width() <= fContext->caps()->maxTextureSize() && | 1166 SkASSERT(bitmap.width() <= fContext->getMaxTextureSize() && |
| 1167 bitmap.height() <= fContext->caps()->maxTextureSize()); | 1167 bitmap.height() <= fContext->getMaxTextureSize()); |
| 1168 | 1168 |
| 1169 GrTexture* texture; | 1169 GrTexture* texture; |
| 1170 AutoBitmapTexture abt(fContext, bitmap, ¶ms, &texture); | 1170 AutoBitmapTexture abt(fContext, bitmap, ¶ms, &texture); |
| 1171 if (NULL == texture) { | 1171 if (NULL == texture) { |
| 1172 return; | 1172 return; |
| 1173 } | 1173 } |
| 1174 | 1174 |
| 1175 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; | 1175 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; |
| 1176 SkRect paintRect; | 1176 SkRect paintRect; |
| 1177 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); | 1177 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); |
| (...skipping 614 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1792 #endif | 1792 #endif |
| 1793 } | 1793 } |
| 1794 | 1794 |
| 1795 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { | 1795 SkImageFilter::Cache* SkGpuDevice::getImageFilterCache() { |
| 1796 // We always return a transient cache, so it is freed after each | 1796 // We always return a transient cache, so it is freed after each |
| 1797 // filter traversal. | 1797 // filter traversal. |
| 1798 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); | 1798 return SkImageFilter::Cache::Create(kDefaultImageFilterCacheSize); |
| 1799 } | 1799 } |
| 1800 | 1800 |
| 1801 #endif | 1801 #endif |
| OLD | NEW |