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

Side by Side Diff: include/gpu/effects/GrPorterDuffXferProcessor.h

Issue 808813002: Add Coverage Drawing XP (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: more nits 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 | « include/gpu/GrXferProcessor.h ('k') | src/gpu/GrClipMaskManager.h » ('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 2014 Google Inc. 2 * Copyright 2014 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 #ifndef GrPorterDuffXferProcessor_DEFINED 8 #ifndef GrPorterDuffXferProcessor_DEFINED
9 #define GrPorterDuffXferProcessor_DEFINED 9 #define GrPorterDuffXferProcessor_DEFINED
10 10
11 #include "GrTypes.h" 11 #include "GrTypes.h"
12 #include "GrXferProcessor.h" 12 #include "GrXferProcessor.h"
13 #include "SkXfermode.h" 13 #include "SkXfermode.h"
14 14
15 class GrDrawState;
16 class GrInvariantOutput; 15 class GrInvariantOutput;
16 class GrProcOptInfo;
17 17
18 class GrPorterDuffXferProcessor : public GrXferProcessor { 18 class GrPorterDuffXferProcessor : public GrXferProcessor {
19 public: 19 public:
20 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, 20 static GrXferProcessor* Create(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend,
21 GrColor constant = 0) { 21 GrColor constant = 0) {
22 return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, consta nt)); 22 return SkNEW_ARGS(GrPorterDuffXferProcessor, (srcBlend, dstBlend, consta nt));
23 } 23 }
24 24
25 virtual ~GrPorterDuffXferProcessor(); 25 virtual ~GrPorterDuffXferProcessor();
26 26
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
61 kCoverageISC_SecondaryOutputType, 61 kCoverageISC_SecondaryOutputType,
62 62
63 kSecondaryOutputTypeCnt, 63 kSecondaryOutputTypeCnt,
64 }; 64 };
65 65
66 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; } 66 PrimaryOutputType primaryOutputType() const { return fPrimaryOutputType; }
67 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp e; } 67 SecondaryOutputType secondaryOutputType() const { return fSecondaryOutputTyp e; }
68 68
69 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI, 69 GrXferProcessor::OptFlags getOptimizations(const GrProcOptInfo& colorPOI,
70 const GrProcOptInfo& coveragePOI, 70 const GrProcOptInfo& coveragePOI,
71 bool isCoverageDrawing,
72 bool colorWriteDisabled, 71 bool colorWriteDisabled,
73 bool doesStencilWrite, 72 bool doesStencilWrite,
74 GrColor* overrideColor, 73 GrColor* overrideColor,
75 const GrDrawTargetCaps& caps) SK_ OVERRIDE; 74 const GrDrawTargetCaps& caps) SK_ OVERRIDE;
76 75
77 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE { 76 void getBlendInfo(GrXferProcessor::BlendInfo* blendInfo) const SK_OVERRIDE {
78 blendInfo->fSrcBlend = fSrcBlend; 77 blendInfo->fSrcBlend = fSrcBlend;
79 blendInfo->fDstBlend = fDstBlend; 78 blendInfo->fDstBlend = fDstBlend;
80 blendInfo->fBlendConstant = fBlendConstant; 79 blendInfo->fBlendConstant = fBlendConstant;
81 } 80 }
82 81
83 private: 82 private:
84 GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrCo lor constant); 83 GrPorterDuffXferProcessor(GrBlendCoeff srcBlend, GrBlendCoeff dstBlend, GrCo lor constant);
85 84
86 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE { 85 bool onIsEqual(const GrXferProcessor& xpBase) const SK_OVERRIDE {
87 const GrPorterDuffXferProcessor& xp = xpBase.cast<GrPorterDuffXferProces sor>(); 86 const GrPorterDuffXferProcessor& xp = xpBase.cast<GrPorterDuffXferProces sor>();
88 if (fSrcBlend != xp.fSrcBlend || 87 if (fSrcBlend != xp.fSrcBlend ||
89 fDstBlend != xp.fDstBlend || 88 fDstBlend != xp.fDstBlend ||
90 fBlendConstant != xp.fBlendConstant || 89 fBlendConstant != xp.fBlendConstant ||
91 fPrimaryOutputType != xp.fPrimaryOutputType || 90 fPrimaryOutputType != xp.fPrimaryOutputType ||
92 fSecondaryOutputType != xp.fSecondaryOutputType) { 91 fSecondaryOutputType != xp.fSecondaryOutputType) {
93 return false; 92 return false;
94 } 93 }
95 return true; 94 return true;
96 } 95 }
97 96
98 void onComputeInvariantOutput(GrInvariantOutput* inout) const SK_OVERRIDE;
99
100 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI, 97 GrXferProcessor::OptFlags internalGetOptimizations(const GrProcOptInfo& colo rPOI,
101 const GrProcOptInfo& cove ragePOI, 98 const GrProcOptInfo& cove ragePOI,
102 bool isCoverageDrawing,
103 bool colorWriteDisabled, 99 bool colorWriteDisabled,
104 bool doesStencilWrite); 100 bool doesStencilWrite);
105 101
106 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTarget Caps& caps, 102 void calcOutputTypes(GrXferProcessor::OptFlags blendOpts, const GrDrawTarget Caps& caps,
107 bool hasSolidCoverage, bool readDst); 103 bool hasSolidCoverage, bool readDst);
108 104
109 GrBlendCoeff fSrcBlend; 105 GrBlendCoeff fSrcBlend;
110 GrBlendCoeff fDstBlend; 106 GrBlendCoeff fDstBlend;
111 GrColor fBlendConstant; 107 GrColor fBlendConstant;
112 PrimaryOutputType fPrimaryOutputType; 108 PrimaryOutputType fPrimaryOutputType;
(...skipping 15 matching lines...) Expand all
128 static GrXPFactory* Create(GrBlendCoeff src, GrBlendCoeff dst) { 124 static GrXPFactory* Create(GrBlendCoeff src, GrBlendCoeff dst) {
129 return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst)); 125 return SkNEW_ARGS(GrPorterDuffXPFactory, (src, dst));
130 } 126 }
131 127
132 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI, 128 GrXferProcessor* createXferProcessor(const GrProcOptInfo& colorPOI,
133 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE; 129 const GrProcOptInfo& coveragePOI) const SK_OVERRIDE;
134 130
135 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE; 131 bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlags) const SK_OVERRIDE;
136 132
137 bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOptInfo& co veragePOI, 133 bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOptInfo& co veragePOI,
138 bool isCoverageDrawing, bool colorWriteDisabled) const SK_OVERRIDE; 134 bool colorWriteDisabled) const SK_OVERRIDE;
139 135
140 bool willBlendWithDst(const GrProcOptInfo& colorPOI, const GrProcOptInfo& co veragePOI, 136 bool willBlendWithDst(const GrProcOptInfo& colorPOI, const GrProcOptInfo& co veragePOI,
141 bool isCoverageDrawing, bool colorWriteDisabled) const SK_OVERRIDE; 137 bool colorWriteDisabled) const SK_OVERRIDE;
142 138
143 bool canTweakAlphaForCoverage(bool isCoverageDrawing) const SK_OVERRIDE; 139 bool canTweakAlphaForCoverage() const SK_OVERRIDE;
144 140
145 bool getOpaqueAndKnownColor(const GrProcOptInfo& colorPOI, 141 bool getOpaqueAndKnownColor(const GrProcOptInfo& colorPOI,
146 const GrProcOptInfo& coveragePOI, 142 const GrProcOptInfo& coveragePOI,
147 GrColor* solidColor, 143 GrColor* solidColor,
148 uint32_t* solidColorKnownComponents) const SK_OV ERRIDE; 144 uint32_t* solidColorKnownComponents) const SK_OV ERRIDE;
149 145
150 private: 146 private:
151 GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst); 147 GrPorterDuffXPFactory(GrBlendCoeff src, GrBlendCoeff dst);
152 148
153 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE { 149 bool onIsEqual(const GrXPFactory& xpfBase) const SK_OVERRIDE {
154 const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>() ; 150 const GrPorterDuffXPFactory& xpf = xpfBase.cast<GrPorterDuffXPFactory>() ;
155 return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff); 151 return (fSrcCoeff == xpf.fSrcCoeff && fDstCoeff == xpf.fDstCoeff);
156 } 152 }
157 153
158 GR_DECLARE_XP_FACTORY_TEST; 154 GR_DECLARE_XP_FACTORY_TEST;
159 155
160 GrBlendCoeff fSrcCoeff; 156 GrBlendCoeff fSrcCoeff;
161 GrBlendCoeff fDstCoeff; 157 GrBlendCoeff fDstCoeff;
162 158
163 typedef GrXPFactory INHERITED; 159 typedef GrXPFactory INHERITED;
164 }; 160 };
165 161
166 #endif 162 #endif
OLDNEW
« no previous file with comments | « include/gpu/GrXferProcessor.h ('k') | src/gpu/GrClipMaskManager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698