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 1127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1138 bitmap.height() <= fContext->caps()->maxTileSize())); | 1138 bitmap.height() <= fContext->caps()->maxTileSize())); |
1139 | 1139 |
1140 GrTexture* texture; | 1140 GrTexture* texture; |
1141 SkSourceGammaTreatment gammaTreatment = this->surfaceProps().isGammaCorrect(
) | 1141 SkSourceGammaTreatment gammaTreatment = this->surfaceProps().isGammaCorrect(
) |
1142 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; | 1142 ? SkSourceGammaTreatment::kRespect : SkSourceGammaTreatment::kIgnore; |
1143 AutoBitmapTexture abt(fContext, bitmap, params, gammaTreatment, &texture); | 1143 AutoBitmapTexture abt(fContext, bitmap, params, gammaTreatment, &texture); |
1144 if (nullptr == texture) { | 1144 if (nullptr == texture) { |
1145 return; | 1145 return; |
1146 } | 1146 } |
1147 | 1147 |
| 1148 SkColorSpace* dstColorSpace = nullptr; // XFORMTODO |
| 1149 sk_sp<GrColorSpaceXform> colorSpaceXform = GrColorSpaceXform::Make(bitmap.co
lorSpace(), |
| 1150 dstColorS
pace); |
1148 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; | 1151 SkRect dstRect = {0, 0, srcRect.width(), srcRect.height() }; |
1149 SkRect paintRect; | 1152 SkRect paintRect; |
1150 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); | 1153 SkScalar wInv = SkScalarInvert(SkIntToScalar(texture->width())); |
1151 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height())); | 1154 SkScalar hInv = SkScalarInvert(SkIntToScalar(texture->height())); |
1152 paintRect.setLTRB(SkScalarMul(srcRect.fLeft, wInv), | 1155 paintRect.setLTRB(SkScalarMul(srcRect.fLeft, wInv), |
1153 SkScalarMul(srcRect.fTop, hInv), | 1156 SkScalarMul(srcRect.fTop, hInv), |
1154 SkScalarMul(srcRect.fRight, wInv), | 1157 SkScalarMul(srcRect.fRight, wInv), |
1155 SkScalarMul(srcRect.fBottom, hInv)); | 1158 SkScalarMul(srcRect.fBottom, hInv)); |
1156 | 1159 |
1157 SkMatrix texMatrix; | 1160 SkMatrix texMatrix; |
(...skipping 24 matching lines...) Expand all Loading... |
1182 } | 1185 } |
1183 if (srcRect.height() > SK_Scalar1) { | 1186 if (srcRect.height() > SK_Scalar1) { |
1184 SkScalar border = SK_ScalarHalf / texture->height(); | 1187 SkScalar border = SK_ScalarHalf / texture->height(); |
1185 top = paintRect.top() + border; | 1188 top = paintRect.top() + border; |
1186 bottom = paintRect.bottom() - border; | 1189 bottom = paintRect.bottom() - border; |
1187 } else { | 1190 } else { |
1188 top = bottom = SkScalarHalf(paintRect.top() + paintRect.bottom()); | 1191 top = bottom = SkScalarHalf(paintRect.top() + paintRect.bottom()); |
1189 } | 1192 } |
1190 textureDomain.setLTRB(left, top, right, bottom); | 1193 textureDomain.setLTRB(left, top, right, bottom); |
1191 if (bicubic) { | 1194 if (bicubic) { |
1192 fp = GrBicubicEffect::Make(texture, texMatrix, textureDomain); | 1195 fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texM
atrix, |
| 1196 textureDomain); |
1193 } else { | 1197 } else { |
1194 fp = GrTextureDomainEffect::Make(texture, texMatrix, textureDomain, | 1198 fp = GrTextureDomainEffect::Make(texture, std::move(colorSpaceXform)
, texMatrix, |
1195 GrTextureDomain::kClamp_Mode, param
s.filterMode()); | 1199 textureDomain, GrTextureDomain::kCl
amp_Mode, |
| 1200 params.filterMode()); |
1196 } | 1201 } |
1197 } else if (bicubic) { | 1202 } else if (bicubic) { |
1198 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); | 1203 SkASSERT(GrTextureParams::kNone_FilterMode == params.filterMode()); |
1199 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil
eModeY() }; | 1204 SkShader::TileMode tileModes[2] = { params.getTileModeX(), params.getTil
eModeY() }; |
1200 fp = GrBicubicEffect::Make(texture, texMatrix, tileModes); | 1205 fp = GrBicubicEffect::Make(texture, std::move(colorSpaceXform), texMatri
x, tileModes); |
1201 } else { | 1206 } else { |
1202 fp = GrSimpleTextureEffect::Make(texture, texMatrix, params); | 1207 fp = GrSimpleTextureEffect::Make(texture, std::move(colorSpaceXform), te
xMatrix, params); |
1203 } | 1208 } |
1204 | 1209 |
1205 GrPaint grPaint; | 1210 GrPaint grPaint; |
1206 if (!SkPaintToGrPaintWithTexture(this->context(), paint, viewMatrix, std::mo
ve(fp), | 1211 if (!SkPaintToGrPaintWithTexture(this->context(), paint, viewMatrix, std::mo
ve(fp), |
1207 kAlpha_8_SkColorType == bitmap.colorType(), | 1212 kAlpha_8_SkColorType == bitmap.colorType(), |
1208 this->surfaceProps().isGammaCorrect(), &grP
aint)) { | 1213 this->surfaceProps().isGammaCorrect(), &grP
aint)) { |
1209 return; | 1214 return; |
1210 } | 1215 } |
1211 | 1216 |
1212 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) { | 1217 if (kAlpha_8_SkColorType == bitmap.colorType() && paint.getShader()) { |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1280 result = sk_ref_sp(special1); | 1285 result = sk_ref_sp(special1); |
1281 } | 1286 } |
1282 | 1287 |
1283 SkASSERT(result->isTextureBacked()); | 1288 SkASSERT(result->isTextureBacked()); |
1284 sk_sp<GrTexture> texture = result->asTextureRef(fContext); | 1289 sk_sp<GrTexture> texture = result->asTextureRef(fContext); |
1285 | 1290 |
1286 SkPaint tmpUnfiltered(paint); | 1291 SkPaint tmpUnfiltered(paint); |
1287 tmpUnfiltered.setImageFilter(nullptr); | 1292 tmpUnfiltered.setImageFilter(nullptr); |
1288 | 1293 |
1289 GrPaint grPaint; | 1294 GrPaint grPaint; |
1290 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), SkM
atrix::I())); | 1295 sk_sp<GrFragmentProcessor> fp(GrSimpleTextureEffect::Make(texture.get(), nul
lptr, |
| 1296 SkMatrix::I())); |
1291 if (GrPixelConfigIsAlphaOnly(texture->config())) { | 1297 if (GrPixelConfigIsAlphaOnly(texture->config())) { |
1292 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp)); | 1298 fp = GrFragmentProcessor::MulOutputByInputUnpremulColor(std::move(fp)); |
1293 } else { | 1299 } else { |
1294 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp)); | 1300 fp = GrFragmentProcessor::MulOutputByInputAlpha(std::move(fp)); |
1295 } | 1301 } |
1296 if (!SkPaintToGrPaintReplaceShader(this->context(), tmpUnfiltered, std::move
(fp), | 1302 if (!SkPaintToGrPaintReplaceShader(this->context(), tmpUnfiltered, std::move
(fp), |
1297 this->surfaceProps().isGammaCorrect(), &g
rPaint)) { | 1303 this->surfaceProps().isGammaCorrect(), &g
rPaint)) { |
1298 return; | 1304 return; |
1299 } | 1305 } |
1300 | 1306 |
(...skipping 559 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1860 } | 1866 } |
1861 | 1867 |
1862 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { | 1868 SkImageFilterCache* SkGpuDevice::getImageFilterCache() { |
1863 ASSERT_SINGLE_OWNER | 1869 ASSERT_SINGLE_OWNER |
1864 // We always return a transient cache, so it is freed after each | 1870 // We always return a transient cache, so it is freed after each |
1865 // filter traversal. | 1871 // filter traversal. |
1866 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); | 1872 return SkImageFilterCache::Create(kDefaultImageFilterCacheSize); |
1867 } | 1873 } |
1868 | 1874 |
1869 #endif | 1875 #endif |
OLD | NEW |