GrPaint.cpp revision 7c66342a399b529634bed0fabfaa562db2c0dbd4
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/GrPorterDuffXferProcessor.h"
13#include "effects/GrSimpleTextureEffect.h"
14
15void GrPaint::addColorTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
16    this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref();
17}
18
19void GrPaint::addCoverageTextureProcessor(GrTexture* texture, const SkMatrix& matrix) {
20    this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix))->unref();
21}
22
23void GrPaint::addColorTextureProcessor(GrTexture* texture,
24                                    const SkMatrix& matrix,
25                                    const GrTextureParams& params) {
26    this->addColorProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref();
27}
28
29void GrPaint::addCoverageTextureProcessor(GrTexture* texture,
30                                       const SkMatrix& matrix,
31                                       const GrTextureParams& params) {
32    this->addCoverageProcessor(GrSimpleTextureEffect::Create(texture, matrix, params))->unref();
33}
34
35bool GrPaint::isOpaque() const {
36    return this->getOpaqueAndKnownColor(NULL, NULL);
37}
38
39bool GrPaint::isOpaqueAndConstantColor(GrColor* color) const {
40    GrColor tempColor = 0;
41    uint32_t colorComps = 0;
42    if (this->getOpaqueAndKnownColor(&tempColor, &colorComps)) {
43        if (kRGBA_GrColorComponentFlags == colorComps) {
44            *color = tempColor;
45            return true;
46        }
47    }
48    return false;
49}
50
51void GrPaint::resetStages() {
52    fColorStages.reset();
53    fCoverageStages.reset();
54    fXPFactory.reset(GrPorterDuffXPFactory::Create(SkXfermode::kSrc_Mode));
55}
56
57bool GrPaint::getOpaqueAndKnownColor(GrColor* solidColor,
58                                     uint32_t* solidColorKnownComponents) const {
59
60    GrProcOptInfo coverageProcInfo;
61    coverageProcInfo.calcWithInitialValues(fCoverageStages.begin(), this->numCoverageStages(),
62                                           0xFFFFFFFF, kRGBA_GrColorComponentFlags, true);
63    GrProcOptInfo colorProcInfo;
64    colorProcInfo.calcWithInitialValues(fColorStages.begin(), this->numColorStages(), fColor,
65                                        kRGBA_GrColorComponentFlags, false);
66
67    return fXPFactory->getOpaqueAndKnownColor(colorProcInfo, coverageProcInfo, solidColor,
68                                              solidColorKnownComponents);
69}
70
71