Chromium Code Reviews| 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 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 340 } | 340 } |
| 341 | 341 |
| 342 #if SK_SUPPORT_GPU | 342 #if SK_SUPPORT_GPU |
| 343 | 343 |
| 344 #include "glsl/GrGLSLCaps.h" | 344 #include "glsl/GrGLSLCaps.h" |
| 345 #include "glsl/GrGLSLFragmentShaderBuilder.h" | 345 #include "glsl/GrGLSLFragmentShaderBuilder.h" |
| 346 #include "SkGr.h" | 346 #include "SkGr.h" |
| 347 | 347 |
| 348 ///////////////////////////////////////////////////////////////////// | 348 ///////////////////////////////////////////////////////////////////// |
| 349 | 349 |
| 350 class GrGLLinearGradient : public GrGLGradientEffect { | |
| 351 public: | |
| 352 | |
| 353 GrGLLinearGradient(const GrProcessor&) {} | |
| 354 | |
| 355 virtual ~GrGLLinearGradient() { } | |
| 356 | |
| 357 virtual void emitCode(EmitArgs&) override; | |
| 358 | |
| 359 static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProces sorKeyBuilder* b) { | |
| 360 b->add32(GenBaseGradientKey(processor)); | |
| 361 } | |
| 362 | |
| 363 private: | |
| 364 | |
| 365 typedef GrGLGradientEffect INHERITED; | |
| 366 }; | |
| 367 | |
| 368 ///////////////////////////////////////////////////////////////////// | |
| 369 | |
| 370 class GrLinearGradient : public GrGradientEffect { | 350 class GrLinearGradient : public GrGradientEffect { |
| 371 public: | 351 public: |
| 352 class GLSLLinearProcessor; | |
| 372 | 353 |
| 373 static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, | 354 static sk_sp<GrFragmentProcessor> Make(GrContext* ctx, |
| 374 const SkLinearGradient& shader, | 355 const SkLinearGradient& shader, |
| 375 const SkMatrix& matrix, | 356 const SkMatrix& matrix, |
| 376 SkShader::TileMode tm) { | 357 SkShader::TileMode tm) { |
| 377 return sk_sp<GrFragmentProcessor>(new GrLinearGradient(ctx, shader, matr ix, tm)); | 358 return sk_sp<GrFragmentProcessor>(new GrLinearGradient(ctx, shader, matr ix, tm)); |
| 378 } | 359 } |
| 379 | 360 |
| 380 virtual ~GrLinearGradient() { } | 361 virtual ~GrLinearGradient() { } |
| 381 | 362 |
| 382 const char* name() const override { return "Linear Gradient"; } | 363 const char* name() const override { return "Linear Gradient"; } |
| 383 | 364 |
| 384 private: | 365 private: |
| 385 GrLinearGradient(GrContext* ctx, | 366 GrLinearGradient(GrContext* ctx, |
| 386 const SkLinearGradient& shader, | 367 const SkLinearGradient& shader, |
| 387 const SkMatrix& matrix, | 368 const SkMatrix& matrix, |
| 388 SkShader::TileMode tm) | 369 SkShader::TileMode tm) |
| 389 : INHERITED(ctx, shader, matrix, tm) { | 370 : INHERITED(ctx, shader, matrix, tm) { |
| 390 this->initClassID<GrLinearGradient>(); | 371 this->initClassID<GrLinearGradient>(); |
| 391 } | 372 } |
| 392 | 373 |
| 393 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { | 374 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override; |
| 394 return new GrGLLinearGradient(*this); | |
| 395 } | |
| 396 | 375 |
| 397 virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps, | 376 virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps, |
| 398 GrProcessorKeyBuilder* b) const override { | 377 GrProcessorKeyBuilder* b) const override; |
| 399 GrGLLinearGradient::GenKey(*this, caps, b); | |
| 400 } | |
| 401 | 378 |
| 402 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 379 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
| 403 | 380 |
| 404 typedef GrGradientEffect INHERITED; | 381 typedef GrGradientEffect INHERITED; |
| 405 }; | 382 }; |
| 406 | 383 |
| 407 ///////////////////////////////////////////////////////////////////// | 384 ///////////////////////////////////////////////////////////////////// |
| 408 | 385 |
| 386 class GrLinearGradient::GLSLLinearProcessor : public GrGradientEffect::GLSLProce ssor { | |
| 387 public: | |
| 388 | |
| 389 GLSLLinearProcessor(const GrProcessor&) {} | |
| 390 | |
| 391 virtual ~GLSLLinearProcessor() { } | |
| 392 | |
| 393 virtual void emitCode(EmitArgs&) override; | |
| 394 | |
| 395 static void GenKey(const GrProcessor& processor, const GrGLSLCaps&, GrProces sorKeyBuilder* b) { | |
| 396 b->add32(GenBaseGradientKey(processor)); | |
| 397 } | |
| 398 | |
| 399 private: | |
|
bsalomon
2016/08/09 13:47:05
Don't need newlines after public, protected, priva
| |
| 400 | |
| 401 typedef GrGradientEffect::GLSLProcessor INHERITED; | |
| 402 }; | |
| 403 | |
| 404 ///////////////////////////////////////////////////////////////////// | |
| 405 | |
| 406 GrGLSLFragmentProcessor* GrLinearGradient::onCreateGLSLInstance() const { | |
| 407 return new GrLinearGradient::GLSLLinearProcessor(*this); | |
| 408 } | |
| 409 | |
| 410 void GrLinearGradient::onGetGLSLProcessorKey(const GrGLSLCaps& caps, | |
| 411 GrProcessorKeyBuilder* b) const { | |
| 412 GrLinearGradient::GLSLLinearProcessor::GenKey(*this, caps, b); | |
| 413 } | |
| 414 | |
| 415 ///////////////////////////////////////////////////////////////////// | |
| 416 | |
| 409 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrLinearGradient); | 417 GR_DEFINE_FRAGMENT_PROCESSOR_TEST(GrLinearGradient); |
| 410 | 418 |
| 411 sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) { | 419 sk_sp<GrFragmentProcessor> GrLinearGradient::TestCreate(GrProcessorTestData* d) { |
| 412 SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()} , | 420 SkPoint points[] = {{d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()} , |
| 413 {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()} }; | 421 {d->fRandom->nextUScalar1(), d->fRandom->nextUScalar1()} }; |
| 414 | 422 |
| 415 SkColor colors[kMaxRandomGradientColors]; | 423 SkColor colors[kMaxRandomGradientColors]; |
| 416 SkScalar stopsArray[kMaxRandomGradientColors]; | 424 SkScalar stopsArray[kMaxRandomGradientColors]; |
| 417 SkScalar* stops = stopsArray; | 425 SkScalar* stops = stopsArray; |
| 418 SkShader::TileMode tm; | 426 SkShader::TileMode tm; |
| 419 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); | 427 int colorCount = RandomGradientParams(d->fRandom, colors, &stops, &tm); |
| 420 auto shader = SkGradientShader::MakeLinear(points, colors, stops, colorCount , tm); | 428 auto shader = SkGradientShader::MakeLinear(points, colors, stops, colorCount , tm); |
| 421 SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); | 429 SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); |
| 422 sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPAr gs( | 430 sk_sp<GrFragmentProcessor> fp = shader->asFragmentProcessor(SkShader::AsFPAr gs( |
| 423 d->fContext, &viewMatrix, NULL, kNone_SkFilterQuality, nullptr, | 431 d->fContext, &viewMatrix, NULL, kNone_SkFilterQuality, nullptr, |
| 424 SkSourceGammaTreatment::kRespect)); | 432 SkSourceGammaTreatment::kRespect)); |
| 425 GrAlwaysAssert(fp); | 433 GrAlwaysAssert(fp); |
| 426 return fp; | 434 return fp; |
| 427 } | 435 } |
| 428 | 436 |
| 429 ///////////////////////////////////////////////////////////////////// | 437 ///////////////////////////////////////////////////////////////////// |
| 430 | 438 |
| 431 void GrGLLinearGradient::emitCode(EmitArgs& args) { | 439 void GrLinearGradient::GLSLLinearProcessor::emitCode(EmitArgs& args) { |
| 432 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); | 440 const GrLinearGradient& ge = args.fFp.cast<GrLinearGradient>(); |
| 433 this->emitUniforms(args.fUniformHandler, ge); | 441 this->emitUniforms(args.fUniformHandler, ge); |
| 434 SkString t = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0); | 442 SkString t = args.fFragBuilder->ensureFSCoords2D(args.fCoords, 0); |
| 435 t.append(".x"); | 443 t.append(".x"); |
| 436 this->emitColor(args.fFragBuilder, | 444 this->emitColor(args.fFragBuilder, |
| 437 args.fUniformHandler, | 445 args.fUniformHandler, |
| 438 args.fGLSLCaps, | 446 args.fGLSLCaps, |
| 439 ge, t.c_str(), | 447 ge, |
| 448 t.c_str(), | |
| 440 args.fOutputColor, | 449 args.fOutputColor, |
| 441 args.fInputColor, | 450 args.fInputColor, |
| 442 args.fTexSamplers); | 451 args.fTexSamplers); |
| 443 } | 452 } |
| 444 | 453 |
| 445 ///////////////////////////////////////////////////////////////////// | 454 ///////////////////////////////////////////////////////////////////// |
| 446 | 455 |
| 447 sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor(const AsFPArgs& args) const { | 456 sk_sp<GrFragmentProcessor> SkLinearGradient::asFragmentProcessor(const AsFPArgs& args) const { |
| 448 SkASSERT(args.fContext); | 457 SkASSERT(args.fContext); |
| 449 | 458 |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 753 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe r); | 762 this->shade4_dx_clamp<false, true>(dstC, count, fx, dx, invDx, dithe r); |
| 754 } | 763 } |
| 755 } else { | 764 } else { |
| 756 if (fApplyAlphaAfterInterp) { | 765 if (fApplyAlphaAfterInterp) { |
| 757 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe r); | 766 this->shade4_dx_clamp<true, false>(dstC, count, fx, dx, invDx, dithe r); |
| 758 } else { | 767 } else { |
| 759 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith er); | 768 this->shade4_dx_clamp<false, false>(dstC, count, fx, dx, invDx, dith er); |
| 760 } | 769 } |
| 761 } | 770 } |
| 762 } | 771 } |
| OLD | NEW |