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

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

Issue 12462008: Add GrEllipseEdgeEffect (Closed) Base URL: http://skia.googlecode.com/svn/trunk/
Patch Set: rebase again 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
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrDrawState.cpp » ('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 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 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 174
175 size_t getVertexSize() const; 175 size_t getVertexSize() const;
176 176
177 /** 177 /**
178 * Sets default vertex attributes for next draw. 178 * Sets default vertex attributes for next draw.
179 * 179 *
180 * This will also set default vertex attribute indices and bindings 180 * This will also set default vertex attribute indices and bindings
181 */ 181 */
182 void setDefaultVertexAttribs(); 182 void setDefaultVertexAttribs();
183 183
184 bool validateVertexAttribs() const;
185
184 //////////////////////////////////////////////////////////////////////////// 186 ////////////////////////////////////////////////////////////////////////////
185 // Helpers for picking apart vertex attributes 187 // Helpers for picking apart vertex attributes
186 188
187 // helper array to let us check the expected so we know what bound attrib in dices 189 // helper array to let us check the expected so we know what bound attrib in dices
188 // we care about 190 // we care about
189 static const size_t kVertexAttribSizes[kGrVertexAttribTypeCount]; 191 static const size_t kVertexAttribSizes[kGrVertexAttribTypeCount];
190 192
191 /** 193 /**
192 * Accessing positions, texture coords, or colors, of a vertex within an 194 * Accessing positions, texture coords, or colors, of a vertex within an
193 * array is a hassle involving casts and simple math. These helpers exist 195 * array is a hassle involving casts and simple math. These helpers exist
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 * Determines whether src alpha is guaranteed to be one for all src pixels 327 * Determines whether src alpha is guaranteed to be one for all src pixels
326 */ 328 */
327 bool srcAlphaWillBeOne(GrAttribBindings) const; 329 bool srcAlphaWillBeOne(GrAttribBindings) const;
328 330
329 /** 331 /**
330 * Determines whether the output coverage is guaranteed to be one for all pi xels hit by a draw. 332 * Determines whether the output coverage is guaranteed to be one for all pi xels hit by a draw.
331 */ 333 */
332 bool hasSolidCoverage(GrAttribBindings) const; 334 bool hasSolidCoverage(GrAttribBindings) const;
333 335
334 static void VertexAttributesUnitTest(); 336 static void VertexAttributesUnitTest();
335 337
336 /// @} 338 /// @}
337 339
338 /////////////////////////////////////////////////////////////////////////// 340 ///////////////////////////////////////////////////////////////////////////
339 /// @name Vertex Attribute Indices 341 /// @name Vertex Attribute Indices
340 //// 342 ////
341 343
342 /** 344 /**
343 * Vertex attribute indices map the data set in the vertex attribute array 345 * Vertex attribute indices map the data set in the vertex attribute array
344 * to the bindings specified in the attribute bindings. Each binding type 346 * to the bindings specified in the attribute bindings. Each binding type
345 * has an associated index in the attribute array. This index is used to 347 * has an associated index in the attribute array. This index is used to
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 GrColor getCoverage() const { 478 GrColor getCoverage() const {
477 return fCommon.fCoverage; 479 return fCommon.fCoverage;
478 } 480 }
479 481
480 /// @} 482 /// @}
481 483
482 /////////////////////////////////////////////////////////////////////////// 484 ///////////////////////////////////////////////////////////////////////////
483 /// @name Effect Stages 485 /// @name Effect Stages
484 //// 486 ////
485 487
486 const GrEffectRef* setEffect(int stageIdx, const GrEffectRef* effect) { 488 const GrEffectRef* setEffect(int stageIdx, const GrEffectRef* effect,
487 fStages[stageIdx].setEffect(effect); 489 const int* indices = NULL) {
490 fStages[stageIdx].setEffect(effect, indices);
488 return effect; 491 return effect;
489 } 492 }
490 493
491 /** 494 /**
492 * Creates a GrSimpleTextureEffect. 495 * Creates a GrSimpleTextureEffect.
493 */ 496 */
494 void createTextureEffect(int stageIdx, GrTexture* texture, const SkMatrix& m atrix) { 497 void createTextureEffect(int stageIdx, GrTexture* texture, const SkMatrix& m atrix) {
495 GrAssert(!this->getStage(stageIdx).getEffect()); 498 GrAssert(!this->getStage(stageIdx).getEffect());
496 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix); 499 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix);
497 this->setEffect(stageIdx, effect)->unref(); 500 this->setEffect(stageIdx, effect)->unref();
498 } 501 }
499 void createTextureEffect(int stageIdx, 502 void createTextureEffect(int stageIdx,
500 GrTexture* texture, 503 GrTexture* texture,
501 const SkMatrix& matrix, 504 const SkMatrix& matrix,
502 const GrTextureParams& params) { 505 const GrTextureParams& params) {
503 GrAssert(!this->getStage(stageIdx).getEffect()); 506 GrAssert(!this->getStage(stageIdx).getEffect());
504 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, par ams); 507 GrEffectRef* effect = GrSimpleTextureEffect::Create(texture, matrix, par ams);
505 this->setEffect(stageIdx, effect)->unref(); 508 this->setEffect(stageIdx, effect)->unref();
506 } 509 }
507 510
508 bool stagesDisabled() { 511 bool stagesDisabled() {
509 for (int i = 0; i < kNumStages; ++i) { 512 for (int i = 0; i < kNumStages; ++i) {
510 if (NULL != fStages[i].getEffect()) { 513 if (NULL != fStages[i].getEffect()) {
511 return false; 514 return false;
512 } 515 }
513 } 516 }
514 return true; 517 return true;
515 } 518 }
516 519
517 void disableStage(int stageIdx) { this->setEffect(stageIdx, NULL); } 520 void disableStage(int stageIdx) {
521 this->setEffect(stageIdx, NULL, NULL);
522 }
518 523
519 /** 524 /**
520 * Release all the GrEffects referred to by this draw state. 525 * Release all the GrEffects referred to by this draw state.
521 */ 526 */
522 void disableStages() { 527 void disableStages() {
523 for (int i = 0; i < kNumStages; ++i) { 528 for (int i = 0; i < kNumStages; ++i) {
524 this->disableStage(i); 529 this->disableStage(i);
525 } 530 }
526 } 531 }
527 532
(...skipping 486 matching lines...) Expand 10 before | Expand all | Expand 10 after
1014 components used). Coverage based on signed distance with negative 1019 components used). Coverage based on signed distance with negative
1015 being inside, positive outside. Edge specified in window space 1020 being inside, positive outside. Edge specified in window space
1016 (y-down) */ 1021 (y-down) */
1017 kQuad_EdgeType, 1022 kQuad_EdgeType,
1018 /* Same as above but for hairline quadratics. Uses unsigned distance. 1023 /* Same as above but for hairline quadratics. Uses unsigned distance.
1019 Coverage is min(0, 1-distance). */ 1024 Coverage is min(0, 1-distance). */
1020 kHairQuad_EdgeType, 1025 kHairQuad_EdgeType,
1021 /* Circle specified as center_x, center_y, outer_radius, inner_radius 1026 /* Circle specified as center_x, center_y, outer_radius, inner_radius
1022 all in window space (y-down). */ 1027 all in window space (y-down). */
1023 kCircle_EdgeType, 1028 kCircle_EdgeType,
1024 /* Axis-aligned ellipse specified as center_x, center_y, x_radius, x_rad ius/y_radius
1025 all in window space (y-down). */
1026 kEllipse_EdgeType,
1027 1029
1028 kVertexEdgeTypeCnt 1030 kVertexEdgeTypeCnt
1029 }; 1031 };
1030 1032
1031 /** 1033 /**
1032 * Determines the interpretation per-vertex edge data when the 1034 * Determines the interpretation per-vertex edge data when the
1033 * kEdge_AttribBindingsBit is set (see GrDrawTarget). When per-vertex edges 1035 * kEdge_AttribBindingsBit is set (see GrDrawTarget). When per-vertex edges
1034 * are not specified the value of this setting has no effect. 1036 * are not specified the value of this setting has no effect.
1035 */ 1037 */
1036 void setVertexEdgeType(VertexEdgeType type) { 1038 void setVertexEdgeType(VertexEdgeType type) {
(...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after
1182 1184
1183 bool isStageEnabled(int s) const { 1185 bool isStageEnabled(int s) const {
1184 GrAssert((unsigned)s < kNumStages); 1186 GrAssert((unsigned)s < kNumStages);
1185 return (NULL != fStages[s].getEffect()); 1187 return (NULL != fStages[s].getEffect());
1186 } 1188 }
1187 1189
1188 bool operator ==(const GrDrawState& s) const { 1190 bool operator ==(const GrDrawState& s) const {
1189 if (fRenderTarget.get() != s.fRenderTarget.get() || fCommon != s.fCommon ) { 1191 if (fRenderTarget.get() != s.fRenderTarget.get() || fCommon != s.fCommon ) {
1190 return false; 1192 return false;
1191 } 1193 }
1192 if (fVertexAttribs.count() != s.fVertexAttribs.count()) { 1194 if (fVertexAttribs != s.fVertexAttribs) {
1193 return false; 1195 return false;
1194 } 1196 }
1195 for (int i = 0; i < fVertexAttribs.count(); ++i) {
1196 if (fVertexAttribs[i] != s.fVertexAttribs[i]) {
1197 return false;
1198 }
1199 }
1200 for (int i = 0; i < kAttribIndexCount; ++i) { 1197 for (int i = 0; i < kAttribIndexCount; ++i) {
1201 if ((i == kPosition_AttribIndex || 1198 if ((i == kPosition_AttribIndex ||
1202 s.fCommon.fAttribBindings & kAttribIndexMasks[i]) && 1199 s.fCommon.fAttribBindings & kAttribIndexMasks[i]) &&
1203 fAttribIndices[i] != s.fAttribIndices[i]) { 1200 fAttribIndices[i] != s.fAttribIndices[i]) {
1204 return false; 1201 return false;
1205 } 1202 }
1206 } 1203 }
1207 for (int i = 0; i < kNumStages; i++) { 1204 for (int i = 0; i < kNumStages; i++) {
1208 bool enabled = this->isStageEnabled(i); 1205 bool enabled = this->isStageEnabled(i);
1209 if (enabled != s.isStageEnabled(i)) { 1206 if (enabled != s.isStageEnabled(i)) {
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
1328 if (fRenderTarget != state.fRenderTarget.get() || fCommon != state.f Common) { 1325 if (fRenderTarget != state.fRenderTarget.get() || fCommon != state.f Common) {
1329 return false; 1326 return false;
1330 } 1327 }
1331 for (int i = 0; i < kAttribIndexCount; ++i) { 1328 for (int i = 0; i < kAttribIndexCount; ++i) {
1332 if ((i == kPosition_AttribIndex || 1329 if ((i == kPosition_AttribIndex ||
1333 state.fCommon.fAttribBindings & kAttribIndexMasks[i]) && 1330 state.fCommon.fAttribBindings & kAttribIndexMasks[i]) &&
1334 fAttribIndices[i] != state.fAttribIndices[i]) { 1331 fAttribIndices[i] != state.fAttribIndices[i]) {
1335 return false; 1332 return false;
1336 } 1333 }
1337 } 1334 }
1338 if (fVertexAttribs.count() != state.fVertexAttribs.count()) { 1335 if (fVertexAttribs != state.fVertexAttribs) {
1339 return false; 1336 return false;
1340 } 1337 }
1341 for (int i = 0; i < fVertexAttribs.count(); ++i)
1342 if (fVertexAttribs[i] != state.fVertexAttribs[i]) {
1343 return false;
1344 }
1345 for (int i = 0; i < kNumStages; ++i) { 1338 for (int i = 0; i < kNumStages; ++i) {
1346 if (!fStages[i].isEqual(state.fStages[i])) { 1339 if (!fStages[i].isEqual(state.fStages[i])) {
1347 return false; 1340 return false;
1348 } 1341 }
1349 } 1342 }
1350 return true; 1343 return true;
1351 } 1344 }
1352 1345
1353 private: 1346 private:
1354 GrRenderTarget* fRenderTarget; 1347 GrRenderTarget* fRenderTarget;
(...skipping 15 matching lines...) Expand all
1370 int fAttribIndices[kAttribIndexCount]; 1363 int fAttribIndices[kAttribIndexCount];
1371 GrVertexAttribArray<kVertexAttribCnt> fVertexAttribs; 1364 GrVertexAttribArray<kVertexAttribCnt> fVertexAttribs;
1372 GrEffectStage fStages[kNumStages]; 1365 GrEffectStage fStages[kNumStages];
1373 1366
1374 typedef GrRefCnt INHERITED; 1367 typedef GrRefCnt INHERITED;
1375 }; 1368 };
1376 1369
1377 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags); 1370 GR_MAKE_BITFIELD_OPS(GrDrawState::BlendOptFlags);
1378 1371
1379 #endif 1372 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrContext.cpp ('k') | src/gpu/GrDrawState.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698