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

Side by Side Diff: src/gpu/GrAAConvexPathRenderer.cpp

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 /* 2 /*
3 * Copyright 2012 Google Inc. 3 * Copyright 2012 Google Inc.
4 * 4 *
5 * Use of this source code is governed by a BSD-style license that can be 5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file. 6 * found in the LICENSE file.
7 */ 7 */
8 8
9 #include "GrAAConvexPathRenderer.h" 9 #include "GrAAConvexPathRenderer.h"
10 10
11 #include "GrContext.h" 11 #include "GrContext.h"
12 #include "GrDrawState.h" 12 #include "GrDrawState.h"
13 #include "GrDrawTargetCaps.h" 13 #include "GrDrawTargetCaps.h"
14 #include "GrPathUtils.h" 14 #include "GrPathUtils.h"
15 #include "SkString.h" 15 #include "SkString.h"
16 #include "SkStrokeRec.h" 16 #include "SkStrokeRec.h"
17 #include "SkTrace.h" 17 #include "SkTrace.h"
18 18
19 #include "effects/GrEdgeEffect.h"
20
19 GrAAConvexPathRenderer::GrAAConvexPathRenderer() { 21 GrAAConvexPathRenderer::GrAAConvexPathRenderer() {
20 } 22 }
21 23
22 namespace { 24 namespace {
23 25
24 struct Segment { 26 struct Segment {
25 enum { 27 enum {
26 // These enum values are assumed in member functions below. 28 // These enum values are assumed in member functions below.
27 kLine = 0, 29 kLine = 0,
28 kQuad = 1, 30 kQuad = 1,
(...skipping 410 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 441
440 bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, 442 bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath,
441 const SkStrokeRec&, 443 const SkStrokeRec&,
442 GrDrawTarget* target, 444 GrDrawTarget* target,
443 bool antiAlias) { 445 bool antiAlias) {
444 446
445 const SkPath* path = &origPath; 447 const SkPath* path = &origPath;
446 if (path->isEmpty()) { 448 if (path->isEmpty()) {
447 return true; 449 return true;
448 } 450 }
451
452 GrDrawTarget::AutoStateRestore asr(target, GrDrawTarget::kPreserve_ASRInit);
449 GrDrawState* drawState = target->drawState(); 453 GrDrawState* drawState = target->drawState();
450 454
451 GrDrawState::AutoDeviceCoordDraw adcd(drawState); 455 GrDrawState::AutoDeviceCoordDraw adcd(drawState);
452 if (!adcd.succeeded()) { 456 if (!adcd.succeeded()) {
453 return false; 457 return false;
454 } 458 }
455 const SkMatrix* vm = &adcd.getOriginalMatrix(); 459 const SkMatrix* vm = &adcd.getOriginalMatrix();
456 460
457 // We use the fact that SkPath::transform path does subdivision based on 461 // We use the fact that SkPath::transform path does subdivision based on
458 // perspective. Otherwise, we apply the view matrix when copying to the 462 // perspective. Otherwise, we apply the view matrix when copying to the
(...skipping 18 matching lines...) Expand all
477 481
478 if (!get_segments(*path, *vm, &segments, &fanPt, &vCount, &iCount)) { 482 if (!get_segments(*path, *vm, &segments, &fanPt, &vCount, &iCount)) {
479 return false; 483 return false;
480 } 484 }
481 485
482 // position + edge 486 // position + edge
483 static const GrVertexAttrib kAttribs[] = { 487 static const GrVertexAttrib kAttribs[] = {
484 {kVec2f_GrVertexAttribType, 0}, 488 {kVec2f_GrVertexAttribType, 0},
485 {kVec4f_GrVertexAttribType, sizeof(GrPoint)} 489 {kVec4f_GrVertexAttribType, sizeof(GrPoint)}
486 }; 490 };
487 static const GrAttribBindings bindings = GrDrawState::kEdge_AttribBindingsBi t;
488 491
489 drawState->setVertexAttribs(kAttribs, SK_ARRAY_COUNT(kAttribs)); 492 drawState->setVertexAttribs(kAttribs, SK_ARRAY_COUNT(kAttribs));
490 drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0); 493 drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0);
491 drawState->setAttribIndex(GrDrawState::kEdge_AttribIndex, 1); 494 drawState->setAttribBindings(GrDrawState::kDefault_AttribBindings);
492 drawState->setAttribBindings(bindings); 495
496 enum {
497 // the edge effects share this stage with glyph rendering
498 // (kGlyphMaskStage in GrTextContext) && SW path rendering
499 // (kPathMaskStage in GrSWMaskHelper)
500 kEdgeEffectStage = GrPaint::kTotalStages,
501 };
502 static const int kEdgeAttrIndex = 1;
503 GrEffectRef* quadEffect = GrEdgeEffect::Create(GrEdgeEffect::kQuad_EdgeType) ;
504 drawState->setEffect(kEdgeEffectStage, quadEffect, kEdgeAttrIndex)->unref();
505
493 GrDrawTarget::AutoReleaseGeometry arg(target, vCount, iCount); 506 GrDrawTarget::AutoReleaseGeometry arg(target, vCount, iCount);
494 if (!arg.succeeded()) { 507 if (!arg.succeeded()) {
495 return false; 508 return false;
496 } 509 }
497 GrAssert(sizeof(QuadVertex) == drawState->getVertexSize()); 510 GrAssert(sizeof(QuadVertex) == drawState->getVertexSize());
498 verts = reinterpret_cast<QuadVertex*>(arg.vertices()); 511 verts = reinterpret_cast<QuadVertex*>(arg.vertices());
499 idxs = reinterpret_cast<uint16_t*>(arg.indices()); 512 idxs = reinterpret_cast<uint16_t*>(arg.indices());
500 513
501 create_vertices(segments, fanPt, verts, idxs); 514 create_vertices(segments, fanPt, verts, idxs);
502 515
503 GrDrawState::VertexEdgeType oldEdgeType = drawState->getVertexEdgeType();
504 drawState->setVertexEdgeType(GrDrawState::kQuad_EdgeType);
505 target->drawIndexed(kTriangles_GrPrimitiveType, 516 target->drawIndexed(kTriangles_GrPrimitiveType,
506 0, // start vertex 517 0, // start vertex
507 0, // start index 518 0, // start index
508 vCount, 519 vCount,
509 iCount); 520 iCount);
510 drawState->setVertexEdgeType(oldEdgeType);
511 521
512 return true; 522 return true;
513 } 523 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698