Index: src/gpu/GrContext.cpp |
=================================================================== |
--- src/gpu/GrContext.cpp (revision 8091) |
+++ src/gpu/GrContext.cpp (working copy) |
@@ -12,6 +12,7 @@ |
#include "effects/GrConvolutionEffect.h" |
#include "effects/GrSingleTextureEffect.h" |
#include "effects/GrConfigConversionEffect.h" |
+#include "effects/GrEllipseEdgeEffect.h" |
#include "GrBufferAllocPool.h" |
#include "GrGpu.h" |
@@ -1072,12 +1073,8 @@ |
{kVec2f_GrVertexAttribType, 0}, |
{kVec4f_GrVertexAttribType, sizeof(GrPoint)} |
}; |
- static const GrAttribBindings kAttributeBindings = GrDrawState::kEdge_AttribBindingsBit; |
- |
drawState->setVertexAttribs(kVertexAttribs, SK_ARRAY_COUNT(kVertexAttribs)); |
drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0); |
- drawState->setAttribIndex(GrDrawState::kEdge_AttribIndex, 1); |
- drawState->setAttribBindings(kAttributeBindings); |
GrAssert(sizeof(CircleVertex) == drawState->getVertexSize()); |
GrDrawTarget::AutoReleaseGeometry geo(target, 4, 0); |
@@ -1097,7 +1094,9 @@ |
SkScalar B; |
if (isCircle) { |
+ drawState->setAttribBindings(GrDrawState::kEdge_AttribBindingsBit); |
drawState->setVertexEdgeType(GrDrawState::kCircle_EdgeType); |
+ drawState->setAttribIndex(GrDrawState::kEdge_AttribIndex, 1); |
xRadius = vm.mapRadius(xRadius); |
@@ -1129,8 +1128,18 @@ |
T = -outerRadius; |
B = +outerRadius; |
} else { // is axis-aligned ellipse |
- drawState->setVertexEdgeType(GrDrawState::kEllipse_EdgeType); |
+ drawState->setAttribBindings(GrDrawState::kDefault_AttribBindings); |
+ enum { |
+ // the edge effects share this stage with glyph rendering |
+ // (kGlyphMaskStage in GrTextContext) && SW path rendering |
+ // (kPathMaskStage in GrSWMaskHelper) |
+ kEdgeEffectStage = GrPaint::kTotalStages, |
+ }; |
+ GrEffectRef* effect = GrEllipseEdgeEffect::Create(); |
+ static const int kEdgeAttrIndex = 1; |
+ drawState->setEffect(kEdgeEffectStage, effect, &kEdgeAttrIndex)->unref(); |
+ |
SkRect xformedRect; |
vm.mapRect(&xformedRect, oval); |