OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 Google Inc. | 2 * Copyright 2015 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 "GrTextureParamsAdjuster.h" | 8 #include "GrTextureParamsAdjuster.h" |
9 | 9 |
10 #include "GrCaps.h" | 10 #include "GrCaps.h" |
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 domain.fLeft = (subset->fLeft + 0.5f) * sx; | 85 domain.fLeft = (subset->fLeft + 0.5f) * sx; |
86 domain.fTop = (subset->fTop + 0.5f)* sy; | 86 domain.fTop = (subset->fTop + 0.5f)* sy; |
87 domain.fRight = (subset->fRight - 0.5f) * sx; | 87 domain.fRight = (subset->fRight - 0.5f) * sx; |
88 domain.fBottom = (subset->fBottom - 0.5f) * sy; | 88 domain.fBottom = (subset->fBottom - 0.5f) * sy; |
89 // This would cause us to read values from outside the subset. Surely, t
he caller knows | 89 // This would cause us to read values from outside the subset. Surely, t
he caller knows |
90 // better! | 90 // better! |
91 SkASSERT(copyParams.fFilter != GrTextureParams::kMipMap_FilterMode); | 91 SkASSERT(copyParams.fFilter != GrTextureParams::kMipMap_FilterMode); |
92 paint.addColorFragmentProcessor( | 92 paint.addColorFragmentProcessor( |
93 GrTextureDomainEffect::Create(inputTexture, SkMatrix::I(), domain, | 93 GrTextureDomainEffect::Create(inputTexture, SkMatrix::I(), domain, |
94 GrTextureDomain::kClamp_Mode, | 94 GrTextureDomain::kClamp_Mode, |
95 copyParams.fFilter))->unref(); | 95 copyParams.fFilter, kLocal_GrCoordSet,
copy->asRenderTarget()))->unref(); |
96 } else { | 96 } else { |
97 GrTextureParams params(SkShader::kClamp_TileMode, copyParams.fFilter); | 97 GrTextureParams params(SkShader::kClamp_TileMode, copyParams.fFilter); |
98 paint.addColorTextureProcessor(inputTexture, SkMatrix::I(), params); | 98 paint.addColorTextureProcessor(inputTexture, SkMatrix::I(), params, copy
->asRenderTarget()); |
99 } | 99 } |
100 | 100 |
101 SkRect localRect; | 101 SkRect localRect; |
102 if (subset) { | 102 if (subset) { |
103 localRect = SkRect::Make(*subset); | 103 localRect = SkRect::Make(*subset); |
104 localRect.fLeft *= sx; | 104 localRect.fLeft *= sx; |
105 localRect.fTop *= sy; | 105 localRect.fTop *= sy; |
106 localRect.fRight *= sx; | 106 localRect.fRight *= sx; |
107 localRect.fBottom *= sy; | 107 localRect.fBottom *= sy; |
108 } else { | 108 } else { |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
320 domainRect->fRight /= texW; | 320 domainRect->fRight /= texW; |
321 domainRect->fBottom /= texH; | 321 domainRect->fBottom /= texH; |
322 return kDomain_DomainMode; | 322 return kDomain_DomainMode; |
323 } | 323 } |
324 | 324 |
325 const GrFragmentProcessor* GrTextureAdjuster::createFragmentProcessor( | 325 const GrFragmentProcessor* GrTextureAdjuster::createFragmentProcessor( |
326 const SkMatrix& textureMatrix, | 326 const SkMatrix& textureMatrix, |
327 const SkRect& constraintRect, | 327 const SkRect& constraintRect, |
328 FilterConstraint filterConstraint, | 328 FilterConstraint filterConstraint, |
329 bool coordsLimitedToConstraintRect, | 329 bool coordsLimitedToConstraintRect, |
330 const GrTextureParams::FilterMode* filte
rOrNullForBicubic) { | 330 const GrTextureParams::FilterMode* filte
rOrNullForBicubic, |
| 331 GrRenderTarget* dst) { |
331 | 332 |
332 const SkIRect* contentArea = this->contentAreaOrNull(); | 333 const SkIRect* contentArea = this->contentAreaOrNull(); |
333 | 334 |
334 SkRect domain; | 335 SkRect domain; |
335 GrTexture* texture = this->originalTexture(); | 336 GrTexture* texture = this->originalTexture(); |
336 DomainMode domainMode = | 337 DomainMode domainMode = |
337 determine_domain_mode(constraintRect, filterConstraint, coordsLimitedToC
onstraintRect, | 338 determine_domain_mode(constraintRect, filterConstraint, coordsLimitedToC
onstraintRect, |
338 texture->width(), texture->height(), | 339 texture->width(), texture->height(), |
339 contentArea, filterOrNullForBicubic, | 340 contentArea, filterOrNullForBicubic, |
340 &domain); | 341 &domain); |
(...skipping 11 matching lines...) Expand all Loading... |
352 texture->width(), texture->height(), | 353 texture->width(), texture->height(), |
353 contentArea, &kBilerp, &domain); | 354 contentArea, &kBilerp, &domain); |
354 SkASSERT(kTightCopy_DomainMode != domainMode); | 355 SkASSERT(kTightCopy_DomainMode != domainMode); |
355 } | 356 } |
356 SkASSERT(kNoDomain_DomainMode == domainMode || | 357 SkASSERT(kNoDomain_DomainMode == domainMode || |
357 (domain.fLeft <= domain.fRight && domain.fTop <= domain.fBottom)); | 358 (domain.fLeft <= domain.fRight && domain.fTop <= domain.fBottom)); |
358 if (filterOrNullForBicubic) { | 359 if (filterOrNullForBicubic) { |
359 if (kDomain_DomainMode == domainMode) { | 360 if (kDomain_DomainMode == domainMode) { |
360 return GrTextureDomainEffect::Create(texture, textureMatrix, domain, | 361 return GrTextureDomainEffect::Create(texture, textureMatrix, domain, |
361 GrTextureDomain::kClamp_Mode, | 362 GrTextureDomain::kClamp_Mode, |
362 *filterOrNullForBicubic); | 363 *filterOrNullForBicubic, kLocal
_GrCoordSet, dst); |
363 } else { | 364 } else { |
364 GrTextureParams params(SkShader::kClamp_TileMode, *filterOrNullForBi
cubic); | 365 GrTextureParams params(SkShader::kClamp_TileMode, *filterOrNullForBi
cubic); |
365 return GrSimpleTextureEffect::Create(texture, textureMatrix, params)
; | 366 return GrSimpleTextureEffect::Create(texture, textureMatrix, params,
kLocal_GrCoordSet, dst); |
366 } | 367 } |
367 } else { | 368 } else { |
368 if (kDomain_DomainMode == domainMode) { | 369 if (kDomain_DomainMode == domainMode) { |
369 return GrBicubicEffect::Create(texture, textureMatrix, domain); | 370 return GrBicubicEffect::Create(texture, textureMatrix, domain, dst); |
370 } else { | 371 } else { |
371 static const SkShader::TileMode kClampClamp[] = | 372 static const SkShader::TileMode kClampClamp[] = |
372 { SkShader::kClamp_TileMode, SkShader::kClamp_TileMode }; | 373 { SkShader::kClamp_TileMode, SkShader::kClamp_TileMode }; |
373 return GrBicubicEffect::Create(texture, textureMatrix, kClampClamp); | 374 return GrBicubicEffect::Create(texture, textureMatrix, kClampClamp,
dst); |
374 } | 375 } |
375 } | 376 } |
376 } | 377 } |
377 | 378 |
378 ////////////////////////////////////////////////////////////////////////////// | 379 ////////////////////////////////////////////////////////////////////////////// |
379 | 380 |
380 GrTexture* GrTextureMaker::refTextureForParams(GrContext* ctx, const GrTexturePa
rams& params) { | 381 GrTexture* GrTextureMaker::refTextureForParams(GrContext* ctx, const GrTexturePa
rams& params) { |
381 CopyParams copyParams; | 382 CopyParams copyParams; |
382 if (!ctx->getGpu()->makeCopyForTextureParams(this->width(), this->height(),
params, | 383 if (!ctx->getGpu()->makeCopyForTextureParams(this->width(), this->height(),
params, |
383 ©Params)) { | 384 ©Params)) { |
(...skipping 20 matching lines...) Expand all Loading... |
404 return result; | 405 return result; |
405 } | 406 } |
406 | 407 |
407 GrTexture* GrTextureMaker::generateTextureForParams(GrContext* ctx, const CopyPa
rams& copyParams) { | 408 GrTexture* GrTextureMaker::generateTextureForParams(GrContext* ctx, const CopyPa
rams& copyParams) { |
408 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(ctx)); | 409 SkAutoTUnref<GrTexture> original(this->refOriginalTexture(ctx)); |
409 if (!original) { | 410 if (!original) { |
410 return nullptr; | 411 return nullptr; |
411 } | 412 } |
412 return copy_on_gpu(original, nullptr, copyParams); | 413 return copy_on_gpu(original, nullptr, copyParams); |
413 } | 414 } |
OLD | NEW |