Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(268)

Side by Side Diff: src/gpu/SkGr.cpp

Issue 766653008: Revert of Make all blending up to GrOptDrawState be handled by the xp/xp factory. (Closed) Base URL: https://skia.googlesource.com/skia.git@xferFactorySolo
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/SkGpuDevice.cpp ('k') | src/gpu/effects/GrPorterDuffXferProcessor.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2010 Google Inc. 2 * Copyright 2010 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 "SkGr.h" 8 #include "SkGr.h"
9 9
10 #include "GrDrawTargetCaps.h" 10 #include "GrDrawTargetCaps.h"
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 } 457 }
458 458
459 /////////////////////////////////////////////////////////////////////////////// 459 ///////////////////////////////////////////////////////////////////////////////
460 460
461 void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor paintColor, 461 void SkPaint2GrPaintNoShader(GrContext* context, const SkPaint& skPaint, GrColor paintColor,
462 bool constantColor, GrPaint* grPaint) { 462 bool constantColor, GrPaint* grPaint) {
463 463
464 grPaint->setDither(skPaint.isDither()); 464 grPaint->setDither(skPaint.isDither());
465 grPaint->setAntiAlias(skPaint.isAntiAlias()); 465 grPaint->setAntiAlias(skPaint.isAntiAlias());
466 466
467 SkXfermode::Coeff sm;
468 SkXfermode::Coeff dm;
469
467 SkXfermode* mode = skPaint.getXfermode(); 470 SkXfermode* mode = skPaint.getXfermode();
468 GrFragmentProcessor* fragmentProcessor = NULL; 471 GrFragmentProcessor* fragmentProcessor = NULL;
469 GrXPFactory* xpFactory = NULL; 472 GrXPFactory* xpFactory = NULL;
470 if (SkXfermode::AsFragmentProcessorOrXPFactory(mode, &fragmentProcessor, &xp Factory)) { 473 if (SkXfermode::AsFragmentProcessorOrXPFactory(mode, &fragmentProcessor, &xp Factory,
474 &sm, &dm)) {
471 if (fragmentProcessor) { 475 if (fragmentProcessor) {
472 SkASSERT(NULL == xpFactory); 476 SkASSERT(NULL == xpFactory);
473 grPaint->addColorProcessor(fragmentProcessor)->unref(); 477 grPaint->addColorProcessor(fragmentProcessor)->unref();
474 xpFactory = GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode); 478 xpFactory = GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode);
479 sm = SkXfermode::kOne_Coeff;
480 dm = SkXfermode::kZero_Coeff;
475 } 481 }
476 } else { 482 } else {
477 // Fall back to src-over 483 // Fall back to src-over
478 xpFactory = GrPorterDuffXPFactory::Create(SkXfermode::kSrcOver_Mode); 484 xpFactory = GrPorterDuffXPFactory::Create(SkXfermode::kSrcOver_Mode);
485 sm = SkXfermode::kOne_Coeff;
486 dm = SkXfermode::kISA_Coeff;
479 } 487 }
480 SkASSERT(xpFactory); 488 SkASSERT(xpFactory);
481 grPaint->setXPFactory(xpFactory)->unref(); 489 grPaint->setXPFactory(xpFactory)->unref();
490 grPaint->setBlendFunc(sk_blend_to_grblend(sm), sk_blend_to_grblend(dm));
482 491
483 //set the color of the paint to the one of the parameter 492 //set the color of the paint to the one of the parameter
484 grPaint->setColor(paintColor); 493 grPaint->setColor(paintColor);
485 494
486 SkColorFilter* colorFilter = skPaint.getColorFilter(); 495 SkColorFilter* colorFilter = skPaint.getColorFilter();
487 if (colorFilter) { 496 if (colorFilter) {
488 // if the source color is a constant then apply the filter here once rat her than per pixel 497 // if the source color is a constant then apply the filter here once rat her than per pixel
489 // in a shader. 498 // in a shader.
490 if (constantColor) { 499 if (constantColor) {
491 SkColor filtered = colorFilter->filterColor(skPaint.getColor()); 500 SkColor filtered = colorFilter->filterColor(skPaint.getColor());
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
571 if (shader->asFragmentProcessor(context, skPaint, NULL, &paintColor, &fp ) && fp) { 580 if (shader->asFragmentProcessor(context, skPaint, NULL, &paintColor, &fp ) && fp) {
572 grPaint->addColorProcessor(fp)->unref(); 581 grPaint->addColorProcessor(fp)->unref();
573 constantColor = false; 582 constantColor = false;
574 } 583 }
575 } 584 }
576 585
577 // The grcolor is automatically set when calling asFragmentProcessor. 586 // The grcolor is automatically set when calling asFragmentProcessor.
578 // If the shader can be seen as an effect it returns true and adds its effec t to the grpaint. 587 // If the shader can be seen as an effect it returns true and adds its effec t to the grpaint.
579 SkPaint2GrPaintNoShader(context, skPaint, paintColor, constantColor, grPaint ); 588 SkPaint2GrPaintNoShader(context, skPaint, paintColor, constantColor, grPaint );
580 } 589 }
OLDNEW
« no previous file with comments | « src/gpu/SkGpuDevice.cpp ('k') | src/gpu/effects/GrPorterDuffXferProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698