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

Side by Side Diff: src/gpu/GrDrawState.h

Issue 13069003: Replace edge types with GrEdgeEffect. (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: Created 7 years, 9 months 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 | Annotate | Revision Log
OLDNEW
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 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 * the interpolated vertex positions or explicit per-vertex coords, dependin g upon the 69 * the interpolated vertex positions or explicit per-vertex coords, dependin g upon the
70 * GrAttribBindings used to draw. 70 * GrAttribBindings used to draw.
71 * 71 *
72 * The stages are divided into two sets, color-computing and coverage-comput ing. The final color 72 * The stages are divided into two sets, color-computing and coverage-comput ing. The final color
73 * stage produces the final pixel color. The coverage-computing stages funct ion exactly as the 73 * stage produces the final pixel color. The coverage-computing stages funct ion exactly as the
74 * color-computing but the output of the final coverage stage is treated as a fractional pixel 74 * color-computing but the output of the final coverage stage is treated as a fractional pixel
75 * coverage rather than as input to the src/dst color blend step. 75 * coverage rather than as input to the src/dst color blend step.
76 * 76 *
77 * The input color to the first enabled color-stage is either the constant c olor or interpolated 77 * The input color to the first enabled color-stage is either the constant c olor or interpolated
78 * per-vertex colors, depending upon GrAttribBindings. The input to the firs t coverage stage is 78 * per-vertex colors, depending upon GrAttribBindings. The input to the firs t coverage stage is
79 * either a constant coverage (usually full-coverage), interpolated per-vert ex coverage, or 79 * either a constant coverage (usually full-coverage) or interpolated per-ve rtex coverage.
80 * edge-AA computed coverage. (This latter is going away as soon as it can b e rewritten as a
81 * GrEffect).
82 * 80 *
83 * See the documentation of kCoverageDrawing_StateBit for information about disabling the 81 * See the documentation of kCoverageDrawing_StateBit for information about disabling the
84 * the color / coverage distinction. 82 * the color / coverage distinction.
85 * 83 *
86 * Stages 0 through GrPaint::kTotalStages-1 are reserved for stages copied f rom the client's 84 * Stages 0 through GrPaint::kTotalStages-1 are reserved for stages copied f rom the client's
87 * GrPaint. Stages GrPaint::kTotalStages through kNumStages-2 are earmarked for use by 85 * GrPaint. Stages GrPaint::kTotalStages through kNumStages-2 are earmarked for use by
88 * GrTextContext and GrPathRenderer-derived classes. kNumStages-1 is earmark ed for clipping 86 * GrTextContext and GrPathRenderer-derived classes. kNumStages-1 is earmark ed for clipping
89 * by GrClipMaskManager. 87 * by GrClipMaskManager.
90 */ 88 */
91 enum { 89 enum {
(...skipping 26 matching lines...) Expand all
118 fRenderTarget.reset(NULL); 116 fRenderTarget.reset(NULL);
119 117
120 this->setDefaultVertexAttribs(); 118 this->setDefaultVertexAttribs();
121 119
122 fCommon.fColor = 0xffffffff; 120 fCommon.fColor = 0xffffffff;
123 fCommon.fViewMatrix.reset(); 121 fCommon.fViewMatrix.reset();
124 fCommon.fSrcBlend = kOne_GrBlendCoeff; 122 fCommon.fSrcBlend = kOne_GrBlendCoeff;
125 fCommon.fDstBlend = kZero_GrBlendCoeff; 123 fCommon.fDstBlend = kZero_GrBlendCoeff;
126 fCommon.fBlendConstant = 0x0; 124 fCommon.fBlendConstant = 0x0;
127 fCommon.fFlagBits = 0x0; 125 fCommon.fFlagBits = 0x0;
128 fCommon.fVertexEdgeType = kHairLine_EdgeType;
129 fCommon.fStencilSettings.setDisabled(); 126 fCommon.fStencilSettings.setDisabled();
130 fCommon.fFirstCoverageStage = kNumStages; 127 fCommon.fFirstCoverageStage = kNumStages;
131 fCommon.fCoverage = 0xffffffff; 128 fCommon.fCoverage = 0xffffffff;
132 fCommon.fColorFilterMode = SkXfermode::kDst_Mode; 129 fCommon.fColorFilterMode = SkXfermode::kDst_Mode;
133 fCommon.fColorFilterColor = 0x0; 130 fCommon.fColorFilterColor = 0x0;
134 fCommon.fDrawFace = kBoth_DrawFace; 131 fCommon.fDrawFace = kBoth_DrawFace;
135 } 132 }
136 133
137 /** 134 /**
138 * Initializes the GrDrawState based on a GrPaint. Note that GrDrawState 135 * Initializes the GrDrawState based on a GrPaint. Note that GrDrawState
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 * Additional Bits that can be specified in GrAttribBindings. 263 * Additional Bits that can be specified in GrAttribBindings.
267 */ 264 */
268 enum AttribBindingsBits { 265 enum AttribBindingsBits {
269 /** explicit local coords are provided (instead of using pre-view-matrix positions) */ 266 /** explicit local coords are provided (instead of using pre-view-matrix positions) */
270 kLocalCoords_AttribBindingsBit = 0x1, 267 kLocalCoords_AttribBindingsBit = 0x1,
271 /* program uses colors (GrColor) */ 268 /* program uses colors (GrColor) */
272 kColor_AttribBindingsBit = 0x2, 269 kColor_AttribBindingsBit = 0x2,
273 /* program uses coverage (GrColor) 270 /* program uses coverage (GrColor)
274 */ 271 */
275 kCoverage_AttribBindingsBit = 0x4, 272 kCoverage_AttribBindingsBit = 0x4,
276 /* program uses edge data. Distance to the edge is used to
277 * compute a coverage. See GrDrawState::setVertexEdgeType().
278 */
279 kEdge_AttribBindingsBit = 0x8,
280 // for below assert 273 // for below assert
281 kDummyAttribBindingsBit, 274 kDummyAttribBindingsBit,
282 kHighAttribBindingsBit = kDummyAttribBindingsBit - 1 275 kHighAttribBindingsBit = kDummyAttribBindingsBit - 1
283 }; 276 };
284 // make sure we haven't exceeded the number of bits in GrAttribBindings. 277 // make sure we haven't exceeded the number of bits in GrAttribBindings.
285 GR_STATIC_ASSERT(kHighAttribBindingsBit < ((uint64_t)1 << 8*sizeof(GrAttribB indings))); 278 GR_STATIC_ASSERT(kHighAttribBindingsBit < ((uint64_t)1 << 8*sizeof(GrAttribB indings)));
286 279
287 enum AttribBindings { 280 enum AttribBindings {
288 kDefault_AttribBindings = 0 281 kDefault_AttribBindings = 0
289 }; 282 };
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 * look up the vertex attribute data from the array, and potentially as the 318 * look up the vertex attribute data from the array, and potentially as the
326 * attribute index if we're binding attributes in GL. 319 * attribute index if we're binding attributes in GL.
327 * 320 *
328 * Indices which do not have active attribute bindings will be ignored. 321 * Indices which do not have active attribute bindings will be ignored.
329 */ 322 */
330 323
331 enum AttribIndex { 324 enum AttribIndex {
332 kPosition_AttribIndex = 0, 325 kPosition_AttribIndex = 0,
333 kColor_AttribIndex, 326 kColor_AttribIndex,
334 kCoverage_AttribIndex, 327 kCoverage_AttribIndex,
335 kEdge_AttribIndex,
336 kLocalCoords_AttribIndex, 328 kLocalCoords_AttribIndex,
337 329
338 kLast_AttribIndex = kLocalCoords_AttribIndex 330 kLast_AttribIndex = kLocalCoords_AttribIndex
339 }; 331 };
340 static const int kAttribIndexCount = kLast_AttribIndex + 1; 332 static const int kAttribIndexCount = kLast_AttribIndex + 1;
341 333
342 // these are used when vertex color and coverage isn't set 334 // these are used when vertex color and coverage isn't set
343 enum { 335 enum {
344 kColorOverrideAttribIndexValue = GrDrawState::kVertexAttribCnt, 336 kColorOverrideAttribIndexValue = GrDrawState::kVertexAttribCnt,
345 kCoverageOverrideAttribIndexValue = GrDrawState::kVertexAttribCnt+1, 337 kCoverageOverrideAttribIndexValue = GrDrawState::kVertexAttribCnt+1,
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 fCommon.fStencilSettings.setDisabled(); 932 fCommon.fStencilSettings.setDisabled();
941 } 933 }
942 934
943 const GrStencilSettings& getStencil() const { return fCommon.fStencilSetting s; } 935 const GrStencilSettings& getStencil() const { return fCommon.fStencilSetting s; }
944 936
945 GrStencilSettings* stencil() { return &fCommon.fStencilSettings; } 937 GrStencilSettings* stencil() { return &fCommon.fStencilSettings; }
946 938
947 /// @} 939 /// @}
948 940
949 /////////////////////////////////////////////////////////////////////////// 941 ///////////////////////////////////////////////////////////////////////////
950 // @name Edge AA
951 // Edge equations can be specified to perform anti-aliasing. Because the
952 // edges are specified as per-vertex data, vertices that are shared by
953 // multiple edges must be split.
954 //
955 ////
956
957 /**
958 * When specifying edges as vertex data this enum specifies what type of
959 * edges are in use. The edges are always 4 SkScalars in memory, even when
960 * the edge type requires fewer than 4.
961 *
962 * TODO: Fix the fact that HairLine and Circle edge types use y-down coords.
963 * (either adjust in VS or use origin_upper_left in GLSL)
964 */
965 enum VertexEdgeType {
966 /* 1-pixel wide line
967 2D implicit line eq (a*x + b*y +c = 0). 4th component unused */
968 kHairLine_EdgeType,
969 /* Quadratic specified by u^2-v canonical coords (only 2
970 components used). Coverage based on signed distance with negative
971 being inside, positive outside. Edge specified in window space
972 (y-down) */
973 kQuad_EdgeType,
974 /* Same as above but for hairline quadratics. Uses unsigned distance.
975 Coverage is min(0, 1-distance). */
976 kHairQuad_EdgeType,
977
978 kVertexEdgeTypeCnt
979 };
980
981 /**
982 * Determines the interpretation per-vertex edge data when the
983 * kEdge_AttribBindingsBit is set (see GrDrawTarget). When per-vertex edges
984 * are not specified the value of this setting has no effect.
985 */
986 void setVertexEdgeType(VertexEdgeType type) {
987 GrAssert(type >=0 && type < kVertexEdgeTypeCnt);
988 fCommon.fVertexEdgeType = type;
989 }
990
991 VertexEdgeType getVertexEdgeType() const { return fCommon.fVertexEdgeType; }
992
993 /// @}
994
995 ///////////////////////////////////////////////////////////////////////////
996 /// @name State Flags 942 /// @name State Flags
997 //// 943 ////
998 944
999 /** 945 /**
1000 * Flags that affect rendering. Controlled using enable/disableState(). All 946 * Flags that affect rendering. Controlled using enable/disableState(). All
1001 * default to disabled. 947 * default to disabled.
1002 */ 948 */
1003 enum StateBits { 949 enum StateBits {
1004 /** 950 /**
1005 * Perform dithering. TODO: Re-evaluate whether we need this bit 951 * Perform dithering. TODO: Re-evaluate whether we need this bit
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
1181 /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */ 1127 /** Fields that are identical in GrDrawState and GrDrawState::DeferredState. */
1182 struct CommonState { 1128 struct CommonState {
1183 // These fields are roughly sorted by decreasing likelihood of being dif ferent in op== 1129 // These fields are roughly sorted by decreasing likelihood of being dif ferent in op==
1184 GrColor fColor; 1130 GrColor fColor;
1185 GrAttribBindings fAttribBindings; 1131 GrAttribBindings fAttribBindings;
1186 SkMatrix fViewMatrix; 1132 SkMatrix fViewMatrix;
1187 GrBlendCoeff fSrcBlend; 1133 GrBlendCoeff fSrcBlend;
1188 GrBlendCoeff fDstBlend; 1134 GrBlendCoeff fDstBlend;
1189 GrColor fBlendConstant; 1135 GrColor fBlendConstant;
1190 uint32_t fFlagBits; 1136 uint32_t fFlagBits;
1191 VertexEdgeType fVertexEdgeType;
1192 GrStencilSettings fStencilSettings; 1137 GrStencilSettings fStencilSettings;
1193 int fFirstCoverageStage; 1138 int fFirstCoverageStage;
1194 GrColor fCoverage; 1139 GrColor fCoverage;
1195 SkXfermode::Mode fColorFilterMode; 1140 SkXfermode::Mode fColorFilterMode;
1196 GrColor fColorFilterColor; 1141 GrColor fColorFilterColor;
1197 DrawFace fDrawFace; 1142 DrawFace fDrawFace;
1198 bool operator== (const CommonState& other) const { 1143 bool operator== (const CommonState& other) const {
1199 return fColor == other.fColor && 1144 return fColor == other.fColor &&
1200 fAttribBindings == other.fAttribBindings && 1145 fAttribBindings == other.fAttribBindings &&
1201 fViewMatrix.cheapEqualTo(other.fViewMatrix) && 1146 fViewMatrix.cheapEqualTo(other.fViewMatrix) &&
1202 fSrcBlend == other.fSrcBlend && 1147 fSrcBlend == other.fSrcBlend &&
1203 fDstBlend == other.fDstBlend && 1148 fDstBlend == other.fDstBlend &&
1204 fBlendConstant == other.fBlendConstant && 1149 fBlendConstant == other.fBlendConstant &&
1205 fFlagBits == other.fFlagBits && 1150 fFlagBits == other.fFlagBits &&
1206 fVertexEdgeType == other.fVertexEdgeType &&
1207 fStencilSettings == other.fStencilSettings && 1151 fStencilSettings == other.fStencilSettings &&
1208 fFirstCoverageStage == other.fFirstCoverageStage && 1152 fFirstCoverageStage == other.fFirstCoverageStage &&
1209 fCoverage == other.fCoverage && 1153 fCoverage == other.fCoverage &&
1210 fColorFilterMode == other.fColorFilterMode && 1154 fColorFilterMode == other.fColorFilterMode &&
1211 fColorFilterColor == other.fColorFilterColor && 1155 fColorFilterColor == other.fColorFilterColor &&
1212 fDrawFace == other.fDrawFace; 1156 fDrawFace == other.fDrawFace;
1213 } 1157 }
1214 bool operator!= (const CommonState& other) const { return !(*this == oth er); } 1158 bool operator!= (const CommonState& other) const { return !(*this == oth er); }
1215 }; 1159 };
1216 1160
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1310 int fAttribIndices[kAttribIndexCount]; 1254 int fAttribIndices[kAttribIndexCount];
1311 GrVertexAttribArray<kVertexAttribCnt> fVertexAttribs; 1255 GrVertexAttribArray<kVertexAttribCnt> fVertexAttribs;
1312 GrEffectStage fStages[kNumStages]; 1256 GrEffectStage fStages[kNumStages];
1313 1257
1314 typedef GrRefCnt INHERITED; 1258 typedef GrRefCnt INHERITED;
1315 }; 1259 };
1316 1260
1317 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); 1261 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags);
1318 1262
1319 #endif 1263 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698