OLD | NEW |
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 GrXferProcessor_DEFINED | 8 #ifndef GrXferProcessor_DEFINED |
9 #define GrXferProcessor_DEFINED | 9 #define GrXferProcessor_DEFINED |
10 | 10 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 | 79 |
80 /** | 80 /** |
81 * Determines which optimizations (as described by the ptFlags above) can be
performed by | 81 * Determines which optimizations (as described by the ptFlags above) can be
performed by |
82 * the draw with this xfer processor. If this function is called, the xfer p
rocessor may change | 82 * the draw with this xfer processor. If this function is called, the xfer p
rocessor may change |
83 * its state to reflected the given blend optimizations. If the XP needs to
see a specific input | 83 * its state to reflected the given blend optimizations. If the XP needs to
see a specific input |
84 * color to blend correctly, it will set the OverrideColor flag and the outp
ut parameter | 84 * color to blend correctly, it will set the OverrideColor flag and the outp
ut parameter |
85 * overrideColor will be the required value that should be passed into the X
P. | 85 * overrideColor will be the required value that should be passed into the X
P. |
86 * A caller who calls this function on a XP is required to honor the returne
d OptFlags | 86 * A caller who calls this function on a XP is required to honor the returne
d OptFlags |
87 * and color values for its draw. | 87 * and color values for its draw. |
88 */ | 88 */ |
89 // TODO: remove need for colorWriteDisabled once colorWriteDisabled is its o
wn XP. | |
90 virtual OptFlags getOptimizations(const GrProcOptInfo& colorPOI, | 89 virtual OptFlags getOptimizations(const GrProcOptInfo& colorPOI, |
91 const GrProcOptInfo& coveragePOI, | 90 const GrProcOptInfo& coveragePOI, |
92 bool colorWriteDisabled, | |
93 bool doesStencilWrite, | 91 bool doesStencilWrite, |
94 GrColor* overrideColor, | 92 GrColor* overrideColor, |
95 const GrDrawTargetCaps& caps) = 0; | 93 const GrDrawTargetCaps& caps) = 0; |
96 | 94 |
97 struct BlendInfo { | 95 struct BlendInfo { |
| 96 BlendInfo() : fWriteColor(true) {} |
| 97 |
98 GrBlendCoeff fSrcBlend; | 98 GrBlendCoeff fSrcBlend; |
99 GrBlendCoeff fDstBlend; | 99 GrBlendCoeff fDstBlend; |
100 GrColor fBlendConstant; | 100 GrColor fBlendConstant; |
| 101 bool fWriteColor; |
101 }; | 102 }; |
102 | 103 |
103 virtual void getBlendInfo(BlendInfo* blendInfo) const = 0; | 104 virtual void getBlendInfo(BlendInfo* blendInfo) const = 0; |
104 | 105 |
105 /** Will this prceossor read the destination pixel value? */ | 106 /** Will this prceossor read the destination pixel value? */ |
106 bool willReadDstColor() const { return fWillReadDstColor; } | 107 bool willReadDstColor() const { return fWillReadDstColor; } |
107 | 108 |
108 /** | 109 /** |
109 * Returns whether or not this xferProcossor will set a secondary output to
be used with dual | 110 * Returns whether or not this xferProcossor will set a secondary output to
be used with dual |
110 * source blending. | 111 * source blending. |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
169 virtual bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlag
s) const = 0; | 170 virtual bool supportsRGBCoverage(GrColor knownColor, uint32_t knownColorFlag
s) const = 0; |
170 | 171 |
171 /** | 172 /** |
172 * Depending on color blend mode requested it may or may not be possible to
correctly blend with | 173 * Depending on color blend mode requested it may or may not be possible to
correctly blend with |
173 * fractional pixel coverage generated by the fragment shader. | 174 * fractional pixel coverage generated by the fragment shader. |
174 * | 175 * |
175 * This function considers the known color and coverage input into the xfer
processor and | 176 * This function considers the known color and coverage input into the xfer
processor and |
176 * certain state information (colorWriteDisabled) to determine whether | 177 * certain state information (colorWriteDisabled) to determine whether |
177 * coverage can be handled correctly. | 178 * coverage can be handled correctly. |
178 */ | 179 */ |
179 // TODO: remove need for colorWriteDisabled once colorWriteDisabled is its o
wn XP. | 180 virtual bool canApplyCoverage(const GrProcOptInfo& colorPOI, |
180 virtual bool canApplyCoverage(const GrProcOptInfo& colorPOI, const GrProcOpt
Info& coveragePOI, | 181 const GrProcOptInfo& coveragePOI) const = 0; |
181 bool colorWriteDisabled) const = 0; | |
182 | 182 |
183 | 183 |
184 struct InvariantOutput { | 184 struct InvariantOutput { |
185 bool fWillBlendWithDst; | 185 bool fWillBlendWithDst; |
186 GrColor fBlendedColor; | 186 GrColor fBlendedColor; |
187 uint32_t fBlendedColorFlags; | 187 uint32_t fBlendedColorFlags; |
188 }; | 188 }; |
189 | 189 |
190 /** | 190 /** |
191 * This function returns known information about the output of the xfer proc
essor produced by | 191 * This function returns known information about the output of the xfer proc
essor produced by |
192 * this xp factory. The invariant color information returned by this functio
n refers to the | 192 * this xp factory. The invariant color information returned by this functio
n refers to the |
193 * final color produced after all blending. | 193 * final color produced after all blending. |
194 */ | 194 */ |
195 // TODO: remove need for colorWriteDisabled once only XP can read dst. | |
196 virtual void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcO
ptInfo& coveragePOI, | 195 virtual void getInvariantOutput(const GrProcOptInfo& colorPOI, const GrProcO
ptInfo& coveragePOI, |
197 bool colorWriteDisabled, InvariantOutput*) c
onst = 0; | 196 InvariantOutput*) const = 0; |
198 | 197 |
199 /** | 198 /** |
200 * Determines whether multiplying the computed per-pixel color by the pixel'
s fractional | 199 * Determines whether multiplying the computed per-pixel color by the pixel'
s fractional |
201 * coverage before the blend will give the correct final destination color.
In general it | 200 * coverage before the blend will give the correct final destination color.
In general it |
202 * will not as coverage is applied after blending. | 201 * will not as coverage is applied after blending. |
203 */ | 202 */ |
204 virtual bool canTweakAlphaForCoverage() const = 0; | 203 virtual bool canTweakAlphaForCoverage() const = 0; |
205 | 204 |
| 205 /** |
| 206 * Returns true if the XP generated by this factory will read dst. |
| 207 */ |
| 208 // TODO: Currently this function must also check if the color/coverage stage
s read dst. |
| 209 // Once only XP's can read dst we can remove the ProcOptInfo's from th
is function. |
| 210 virtual bool willReadDst(const GrProcOptInfo& colorPOI, |
| 211 const GrProcOptInfo& coveragePOI) const = 0; |
| 212 |
206 bool isEqual(const GrXPFactory& that) const { | 213 bool isEqual(const GrXPFactory& that) const { |
207 if (this->classID() != that.classID()) { | 214 if (this->classID() != that.classID()) { |
208 return false; | 215 return false; |
209 } | 216 } |
210 return this->onIsEqual(that); | 217 return this->onIsEqual(that); |
211 } | 218 } |
212 | 219 |
213 /** | 220 /** |
214 * Helper for down-casting to a GrXPFactory subclass | 221 * Helper for down-casting to a GrXPFactory subclass |
215 */ | 222 */ |
(...skipping 29 matching lines...) Expand all Loading... |
245 enum { | 252 enum { |
246 kIllegalXPFClassID = 0, | 253 kIllegalXPFClassID = 0, |
247 }; | 254 }; |
248 static int32_t gCurrXPFClassID; | 255 static int32_t gCurrXPFClassID; |
249 | 256 |
250 typedef GrProgramElement INHERITED; | 257 typedef GrProgramElement INHERITED; |
251 }; | 258 }; |
252 | 259 |
253 #endif | 260 #endif |
254 | 261 |
OLD | NEW |