| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 "Sk4fLinearGradient.h" | 8 #include "Sk4fLinearGradient.h" |
| 9 #include "SkLinearGradient.h" | 9 #include "SkLinearGradient.h" |
| 10 #include "SkRefCnt.h" | 10 #include "SkRefCnt.h" |
| (...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d)
{ | 411 sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d)
{ |
| 412 SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}
, | 412 SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}
, |
| 413 {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}
}; | 413 {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()}
}; |
| 414 | 414 |
| 415 SkColor colors[kMaxRandomGradientColors]; | 415 SkColor colors[kMaxRandomGradientColors]; |
| 416 SkScalar stopsArray[kMaxRandomGradientColors]; | 416 SkScalar stopsArray[kMaxRandomGradientColors]; |
| 417 SkScalar* stops = stopsArray; | 417 SkScalar* stops = stopsArray; |
| 418 SkShader::TileMode tm; | 418 SkShader::TileMode tm; |
| 419 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 419 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
| 420 auto shader = SkGradientShader::MakeLinear(points, colors, stops, colorCount
, tm); | 420 auto shader = SkGradientShader::MakeLinear(points, colors, stops, colorCount
, tm); |
| 421 sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(d->fContext, | 421 SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); |
| 422 GrTest::TestMatrix(d->fRandom), NULL, kNone_SkFilterQuality, | 422 sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPAr
gs( |
| 423 SkSourceGammaTreatment::kRespect); | 423 d->fContext, &viewMatrix, NULL, kNone_SkFilterQuality, SkSourceGammaTrea
tment::kRespect)); |
| 424 GrAlwaysAssert(fp); | 424 GrAlwaysAssert(fp); |
| 425 return fp; | 425 return fp; |
| 426 } | 426 } |
| 427 | 427 |
| 428 ///////////////////////////////////////////////////////////////////// | 428 ///////////////////////////////////////////////////////////////////// |
| 429 | 429 |
| 430 void GrGLLinearGradient::emitCode(EmitArgs& args) { | 430 void GrGLLinearGradient::emitCode(EmitArgs& args) { |
| 431 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); | 431 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); |
| 432 this->emitUniforms(args.fUniformHandler, ge); | 432 this->emitUniforms(args.fUniformHandler, ge); |
| 433 SkString t = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0); | 433 SkString t = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0); |
| 434 t.append(".x"); | 434 t.append(".x"); |
| 435 this->emitColor(args.fFragBuilder, | 435 this->emitColor(args.fFragBuilder, |
| 436 args.fUniformHandler, | 436 args.fUniformHandler, |
| 437 args.fGLSLCaps, | 437 args.fGLSLCaps, |
| 438 ge, t.c_str(), | 438 ge, t.c_str(), |
| 439 args.fOutputColor, | 439 args.fOutputColor, |
| 440 args.fInputColor, | 440 args.fInputColor, |
| 441 args.fTexSamplers); | 441 args.fTexSamplers); |
| 442 } | 442 } |
| 443 | 443 |
| 444 ///////////////////////////////////////////////////////////////////// | 444 ///////////////////////////////////////////////////////////////////// |
| 445 | 445 |
| 446 sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor( | 446 sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor(const AsFPArgs&
args) const { |
| 447 GrContext* context, | 447 SkASSERT(args.fContext); |
| 448 const SkMatrix& viewm, | |
| 449 const SkMatrix* localMatrix, | |
| 450 SkFilterQuality, | |
| 451 SkSourceGammaTreatment) const { | |
| 452 SkASSERT(context); | |
| 453 | 448 |
| 454 SkMatrix matrix; | 449 SkMatrix matrix; |
| 455 if (!this->getLocalMatrix().invert(&matrix)) { | 450 if (!this->getLocalMatrix().invert(&matrix)) { |
| 456 return nullptr; | 451 return nullptr; |
| 457 } | 452 } |
| 458 if (localMatrix) { | 453 if (args.fLocalMatrix) { |
| 459 SkMatrix inv; | 454 SkMatrix inv; |
| 460 if (!localMatrix->invert(&inv)) { | 455 if (!args.fLocalMatrix->invert(&inv)) { |
| 461 return nullptr; | 456 return nullptr; |
| 462 } | 457 } |
| 463 matrix.postConcat(inv); | 458 matrix.postConcat(inv); |
| 464 } | 459 } |
| 465 matrix.postConcat(fPtsToUnit); | 460 matrix.postConcat(fPtsToUnit); |
| 466 | 461 |
| 467 sk_sp<GrFragmentProcessor> inner(GrLinearGradient::Make(context, *this, matr
ix, fTileMode)); | 462 sk_sp<GrFragmentProcessor> inner( |
| 463 GrLinearGradient::Make(args.fContext, *this, matrix, fTileMode)); |
| 468 return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); | 464 return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); |
| 469 } | 465 } |
| 470 | 466 |
| 471 | 467 |
| 472 #endif | 468 #endif |
| 473 | 469 |
| 474 #ifndef SK_IGNORE_TO_STRING | 470 #ifndef SK_IGNORE_TO_STRING |
| 475 void SkLinearGradient::toString(SkString* str) const { | 471 void SkLinearGradient::toString(SkString* str) const { |
| 476 str->append("SkLinearGradient ("); | 472 str->append("SkLinearGradient ("); |
| 477 | 473 |
| (...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 756 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe
r); | 752 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe
r); |
| 757 } | 753 } |
| 758 } else { | 754 } else { |
| 759 if (fApplyAlphaAfterInterp) { | 755 if (fApplyAlphaAfterInterp) { |
| 760 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe
r); | 756 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe
r); |
| 761 } else { | 757 } else { |
| 762 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith
er); | 758 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith
er); |
| 763 } | 759 } |
| 764 } | 760 } |
| 765 } | 761 } |
| OLD | NEW |