OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright 2011 Google Inc. | 2 * Copyright 2011 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 GrDrawState_DEFINED | 8 #ifndef GrDrawState_DEFINED |
9 #define GrDrawState_DEFINED | 9 #define GrDrawState_DEFINED |
10 | 10 |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
259 * Sets the color to be used for the next draw to be | 259 * Sets the color to be used for the next draw to be |
260 * (r,g,b,a) = (alpha, alpha, alpha, alpha). | 260 * (r,g,b,a) = (alpha, alpha, alpha, alpha). |
261 * | 261 * |
262 * @param alpha The alpha value to set as the color. | 262 * @param alpha The alpha value to set as the color. |
263 */ | 263 */ |
264 void setAlpha(uint8_t a) { | 264 void setAlpha(uint8_t a) { |
265 this->setColor((a << 24) | (a << 16) | (a << 8) | a); | 265 this->setColor((a << 24) | (a << 16) | (a << 8) | a); |
266 } | 266 } |
267 | 267 |
268 /** | 268 /** |
269 * Add a color filter that can be represented by a color and a mode. Applied | |
270 * after color-computing effect stages. | |
271 */ | |
272 void setColorFilter(GrColor c, SkXfermode::Mode mode) { | |
273 fCommon.fColorFilterColor = c; | |
274 fCommon.fColorFilterMode = mode; | |
275 } | |
276 | |
277 GrColor getColorFilterColor() const { return fCommon.fColorFilterColor; } | |
278 SkXfermode::Mode getColorFilterMode() const { return fCommon.fColorFilterMod e; } | |
279 | |
280 /** | |
281 * Constructor sets the color to be 'color' which is undone by the destructo r. | 269 * Constructor sets the color to be 'color' which is undone by the destructo r. |
282 */ | 270 */ |
283 class AutoColorRestore : public ::SkNoncopyable { | 271 class AutoColorRestore : public ::SkNoncopyable { |
284 public: | 272 public: |
285 AutoColorRestore() : fDrawState(NULL), fOldColor(0) {} | 273 AutoColorRestore() : fDrawState(NULL), fOldColor(0) {} |
286 | 274 |
287 AutoColorRestore(GrDrawState* drawState, GrColor color) { | 275 AutoColorRestore(GrDrawState* drawState, GrColor color) { |
288 fDrawState = NULL; | 276 fDrawState = NULL; |
289 this->set(drawState, color); | 277 this->set(drawState, color); |
290 } | 278 } |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
353 /// The input color to the first color-stage is either the constant color or interpolated | 341 /// The input color to the first color-stage is either the constant color or interpolated |
354 /// per-vertex colors. The input to the first coverage stage is either a con stant coverage | 342 /// per-vertex colors. The input to the first coverage stage is either a con stant coverage |
355 /// (usually full-coverage) or interpolated per-vertex coverage. | 343 /// (usually full-coverage) or interpolated per-vertex coverage. |
356 /// | 344 /// |
357 /// See the documentation of kCoverageDrawing_StateBit for information about disabling the | 345 /// See the documentation of kCoverageDrawing_StateBit for information about disabling the |
358 /// the color / coverage distinction. | 346 /// the color / coverage distinction. |
359 //// | 347 //// |
360 | 348 |
361 const GrEffectRef* addColorEffect(const GrEffectRef* effect, int attr0 = -1, int attr1 = -1) { | 349 const GrEffectRef* addColorEffect(const GrEffectRef* effect, int attr0 = -1, int attr1 = -1) { |
362 SkASSERT(NULL != effect); | 350 SkASSERT(NULL != effect); |
351 if (!(*effect)->willUseInputColor()) { | |
bsalomon
2013/10/02 16:37:59
I don't think this is safe because of AutoRestoreE
Kimmo Kinnunen
2013/10/04 06:21:18
Done. Not sure the new naming is the best possible
| |
352 fColorStages.reset(); | |
353 } | |
363 SkNEW_APPEND_TO_TARRAY(&fColorStages, GrEffectStage, (effect, attr0, att r1)); | 354 SkNEW_APPEND_TO_TARRAY(&fColorStages, GrEffectStage, (effect, attr0, att r1)); |
364 return effect; | 355 return effect; |
365 } | 356 } |
366 | 357 |
367 const GrEffectRef* addCoverageEffect(const GrEffectRef* effect, int attr0 = -1, int attr1 = -1) { | 358 const GrEffectRef* addCoverageEffect(const GrEffectRef* effect, int attr0 = -1, int attr1 = -1) { |
368 SkASSERT(NULL != effect); | 359 SkASSERT(NULL != effect); |
369 SkNEW_APPEND_TO_TARRAY(&fCoverageStages, GrEffectStage, (effect, attr0, attr1)); | 360 SkNEW_APPEND_TO_TARRAY(&fCoverageStages, GrEffectStage, (effect, attr0, attr1)); |
370 return effect; | 361 return effect; |
371 } | 362 } |
372 | 363 |
(...skipping 535 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
908 fCommon.fViewMatrix.reset(); | 899 fCommon.fViewMatrix.reset(); |
909 } else { | 900 } else { |
910 fCommon.fViewMatrix = *initialViewMatrix; | 901 fCommon.fViewMatrix = *initialViewMatrix; |
911 } | 902 } |
912 fCommon.fSrcBlend = kOne_GrBlendCoeff; | 903 fCommon.fSrcBlend = kOne_GrBlendCoeff; |
913 fCommon.fDstBlend = kZero_GrBlendCoeff; | 904 fCommon.fDstBlend = kZero_GrBlendCoeff; |
914 fCommon.fBlendConstant = 0x0; | 905 fCommon.fBlendConstant = 0x0; |
915 fCommon.fFlagBits = 0x0; | 906 fCommon.fFlagBits = 0x0; |
916 fCommon.fStencilSettings.setDisabled(); | 907 fCommon.fStencilSettings.setDisabled(); |
917 fCommon.fCoverage = 0xffffffff; | 908 fCommon.fCoverage = 0xffffffff; |
918 fCommon.fColorFilterMode = SkXfermode::kDst_Mode; | |
919 fCommon.fColorFilterColor = 0x0; | |
920 fCommon.fDrawFace = kBoth_DrawFace; | 909 fCommon.fDrawFace = kBoth_DrawFace; |
921 } | 910 } |
922 | 911 |
923 /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */ | 912 /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */ |
924 struct CommonState { | 913 struct CommonState { |
925 // These fields are roughly sorted by decreasing likelihood of being dif ferent in op== | 914 // These fields are roughly sorted by decreasing likelihood of being dif ferent in op== |
926 GrColor fColor; | 915 GrColor fColor; |
927 SkMatrix fViewMatrix; | 916 SkMatrix fViewMatrix; |
928 GrBlendCoeff fSrcBlend; | 917 GrBlendCoeff fSrcBlend; |
929 GrBlendCoeff fDstBlend; | 918 GrBlendCoeff fDstBlend; |
930 GrColor fBlendConstant; | 919 GrColor fBlendConstant; |
931 uint32_t fFlagBits; | 920 uint32_t fFlagBits; |
932 const GrVertexAttrib* fVAPtr; | 921 const GrVertexAttrib* fVAPtr; |
933 int fVACount; | 922 int fVACount; |
934 GrStencilSettings fStencilSettings; | 923 GrStencilSettings fStencilSettings; |
935 GrColor fCoverage; | 924 GrColor fCoverage; |
936 SkXfermode::Mode fColorFilterMode; | |
937 GrColor fColorFilterColor; | |
938 DrawFace fDrawFace; | 925 DrawFace fDrawFace; |
939 | 926 |
940 // This is simply a different representation of info in fVertexAttribs a nd thus does | 927 // This is simply a different representation of info in fVertexAttribs a nd thus does |
941 // not need to be compared in op==. | 928 // not need to be compared in op==. |
942 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindin gCnt]; | 929 int fFixedFunctionVertexAttribIndices[kGrFixedFunctionVertexAttribBindin gCnt]; |
943 | 930 |
944 bool operator== (const CommonState& other) const { | 931 bool operator== (const CommonState& other) const { |
945 bool result = fColor == other.fColor && | 932 bool result = fColor == other.fColor && |
946 fViewMatrix.cheapEqualTo(other.fViewMatrix) && | 933 fViewMatrix.cheapEqualTo(other.fViewMatrix) && |
947 fSrcBlend == other.fSrcBlend && | 934 fSrcBlend == other.fSrcBlend && |
948 fDstBlend == other.fDstBlend && | 935 fDstBlend == other.fDstBlend && |
949 fBlendConstant == other.fBlendConstant && | 936 fBlendConstant == other.fBlendConstant && |
950 fFlagBits == other.fFlagBits && | 937 fFlagBits == other.fFlagBits && |
951 fVACount == other.fVACount && | 938 fVACount == other.fVACount && |
952 !memcmp(fVAPtr, other.fVAPtr, fVACount * sizeof(GrVert exAttrib)) && | 939 !memcmp(fVAPtr, other.fVAPtr, fVACount * sizeof(GrVert exAttrib)) && |
953 fStencilSettings == other.fStencilSettings && | 940 fStencilSettings == other.fStencilSettings && |
954 fCoverage == other.fCoverage && | 941 fCoverage == other.fCoverage && |
955 fColorFilterMode == other.fColorFilterMode && | |
956 fColorFilterColor == other.fColorFilterColor && | |
957 fDrawFace == other.fDrawFace; | 942 fDrawFace == other.fDrawFace; |
958 SkASSERT(!result || 0 == memcmp(fFixedFunctionVertexAttribIndices, | 943 SkASSERT(!result || 0 == memcmp(fFixedFunctionVertexAttribIndices, |
959 other.fFixedFunctionVertexAttribIndi ces, | 944 other.fFixedFunctionVertexAttribIndi ces, |
960 sizeof(fFixedFunctionVertexAttribInd ices))); | 945 sizeof(fFixedFunctionVertexAttribInd ices))); |
961 return result; | 946 return result; |
962 } | 947 } |
963 bool operator!= (const CommonState& other) const { return !(*this == oth er); } | 948 bool operator!= (const CommonState& other) const { return !(*this == oth er); } |
964 }; | 949 }; |
965 | 950 |
966 /** GrDrawState uses GrEffectStages to hold stage state which holds a ref on GrEffectRef. | 951 /** GrDrawState uses GrEffectStages to hold stage state which holds a ref on GrEffectRef. |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1076 * @param count the number of attributes being set, limited to kMaxVer texAttribCnt. | 1061 * @param count the number of attributes being set, limited to kMaxVer texAttribCnt. |
1077 */ | 1062 */ |
1078 void setVertexAttribs(const GrVertexAttrib attribs[], int count); | 1063 void setVertexAttribs(const GrVertexAttrib attribs[], int count); |
1079 | 1064 |
1080 typedef SkRefCnt INHERITED; | 1065 typedef SkRefCnt INHERITED; |
1081 }; | 1066 }; |
1082 | 1067 |
1083 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); | 1068 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); |
1084 | 1069 |
1085 #endif | 1070 #endif |
OLD | NEW |