Home | History | Annotate | Download | only in gpu
      1 
      2 /*
      3  * Copyright 2013 Google Inc.
      4  *
      5  * Use of this source code is governed by a BSD-style license that can be
      6  * found in the LICENSE file.
      7  */
      8 
      9 #include "GrPaint.h"
     10 
     11 #include "GrProcOptInfo.h"
     12 #include "effects/GrCoverageSetOpXP.h"
     13 #include "effects/GrPorterDuffXferProcessor.h"
     14 #include "effects/GrSimpleTextureEffect.h"
     15 
     16 GrPaint::GrPaint()
     17     : fAntiAlias(false)
     18     , fColor(GrColor_WHITE) {}
     19 
     20 void GrPaint::setCoverageSetOpXPFactory(SkRegion::Op regionOp, bool invertCoverage) {
     21     fXPFactory.reset(GrCoverageSetOpXPFactory::Create(regionOp, invertCoverage));
     22 }
     23 
     24 void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
     25     this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref();
     26 }
     27 
     28 void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
     29     this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref();
     30 }
     31 
     32 void GrPaint::addColorTextureProcessor(GrTexture* texture,
     33                                        const SkMatrix& matrix,
     34                                        const GrTextureParams& params) {
     35     this->addColorFragmentProcessor(GrSimpleTextureEffect::Create(texture,
     36                                                                   matrix, params))->unref();
     37 }
     38 
     39 void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
     40                                           const SkMatrix& matrix,
     41                                           const GrTextureParams& params) {
     42     this->addCoverageFragmentProcessor(GrSimpleTextureEffect::Create(texture,
     43                                                                      matrix, params))->unref();
     44 }
     45 
     46 bool GrPaint::isConstantBlendedColor(GrColor* color) const {
     47     GrProcOptInfo colorProcInfo;
     48     colorProcInfo.calcWithInitialValues(fColorFragmentProcessors.begin(),
     49                                         this->numColorFragmentProcessors(), fColor,
     50                                         kRGBA_GrColorComponentFlags, false);
     51 
     52     GrXPFactory::InvariantBlendedColor blendedColor;
     53     if (fXPFactory) {
     54         fXPFactory->getInvariantBlendedColor(colorProcInfo, &blendedColor);
     55     } else {
     56         GrPorterDuffXPFactory::SrcOverInvariantBlendedColor(colorProcInfo.color(),
     57                                                             colorProcInfo.validFlags(),
     58                                                             colorProcInfo.isOpaque(),
     59                                                             &blendedColor);
     60     }
     61 
     62     if (kRGBA_GrColorComponentFlags == blendedColor.fKnownColorFlags) {
     63         *color = blendedColor.fKnownColor;
     64         return true;
     65     }
     66     return false;
     67 }
     68