Index: src/gpu/GrContext.cpp |
diff --git a/src/gpu/GrContext.cpp b/src/gpu/GrContext.cpp |
index 301c676af741f42fffd68524a43466b3d7acf6ac..47095135259eb4e8654fabaaad877baf49125363 100755 |
--- a/src/gpu/GrContext.cpp |
+++ b/src/gpu/GrContext.cpp |
@@ -529,6 +529,12 @@ private: |
fBatch.fHairline = geometry.fStrokeWidth == 0; |
fGeoData.push_back(geometry); |
+ |
+ // setup bounds |
+ fBounds = geometry.fRect; |
+ SkScalar rad = SkScalarHalf(geometry.fStrokeWidth); |
+ fBounds.outset(rad, rad); |
+ geometry.fViewMatrix.mapRect(&fBounds); |
} |
/* create a triangle strip that strokes the specified rect. There are 8 |
@@ -679,16 +685,12 @@ void GrContext::drawRect(GrRenderTarget* rt, |
SkAutoTUnref<GrBatch> batch(StrokeRectBatch::Create(geometry)); |
- SkRect bounds = rect; |
- SkScalar rad = SkScalarHalf(width); |
- bounds.outset(rad, rad); |
- viewMatrix.mapRect(&bounds); |
// Depending on sub-pixel coordinates and the particular GPU, we may lose a corner of |
// hairline rects. We jam all the vertices to pixel centers to avoid this, but not when MSAA |
// is enabled because it can cause ugly artifacts. |
pipelineBuilder.setState(GrPipelineBuilder::kSnapVerticesToPixelCenters_Flag, |
0 == width && !rt->isMultisampled()); |
- target->drawBatch(&pipelineBuilder, batch, &bounds); |
+ target->drawBatch(&pipelineBuilder, batch); |
} else { |
// filled BW rect |
target->drawSimpleRect(&pipelineBuilder, color, viewMatrix, rect); |
@@ -758,10 +760,11 @@ public: |
const SkMatrix& viewMatrix, |
const SkPoint* positions, int vertexCount, |
const uint16_t* indices, int indexCount, |
- const GrColor* colors, const SkPoint* localCoords) { |
+ const GrColor* colors, const SkPoint* localCoords, |
+ const SkRect& bounds) { |
return SkNEW_ARGS(DrawVerticesBatch, (geometry, primitiveType, viewMatrix, positions, |
vertexCount, indices, indexCount, colors, |
- localCoords)); |
+ localCoords, bounds)); |
} |
const char* name() const override { return "DrawVerticesBatch"; } |
@@ -895,7 +898,7 @@ private: |
const SkMatrix& viewMatrix, |
const SkPoint* positions, int vertexCount, |
const uint16_t* indices, int indexCount, |
- const GrColor* colors, const SkPoint* localCoords) { |
+ const GrColor* colors, const SkPoint* localCoords, const SkRect& bounds) { |
this->initClassID<DrawVerticesBatch>(); |
SkASSERT(positions); |
@@ -926,6 +929,8 @@ private: |
fBatch.fVertexCount = vertexCount; |
fBatch.fIndexCount = indexCount; |
fBatch.fPrimitiveType = primitiveType; |
+ |
+ this->setBounds(bounds); |
} |
GrPrimitiveType primitiveType() const { return fBatch.fPrimitiveType; } |
@@ -980,6 +985,8 @@ private: |
fGeoData.push_back_n(that->geoData()->count(), that->geoData()->begin()); |
fBatch.fVertexCount += that->vertexCount(); |
fBatch.fIndexCount += that->indexCount(); |
+ |
+ this->joinBounds(that->bounds()); |
return true; |
} |
@@ -1032,13 +1039,12 @@ void GrContext::drawVertices(GrRenderTarget* rt, |
DrawVerticesBatch::Geometry geometry; |
geometry.fColor = paint.getColor(); |
- |
SkAutoTUnref<GrBatch> batch(DrawVerticesBatch::Create(geometry, primitiveType, viewMatrix, |
positions, vertexCount, indices, |
- indexCount,colors, texCoords)); |
+ indexCount, colors, texCoords, |
+ bounds)); |
- // TODO figure out bounds |
- target->drawBatch(&pipelineBuilder, batch, &bounds); |
+ target->drawBatch(&pipelineBuilder, batch); |
} |
/////////////////////////////////////////////////////////////////////////////// |