| Index: src/gpu/SkGpuDevice.cpp | 
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp | 
| index 3f1908be20f9d3dc191082369af97a064f50118c..9d6ff8b26b4afa3138c78008cb5cc28e047b4c54 100644 | 
| --- a/src/gpu/SkGpuDevice.cpp | 
| +++ b/src/gpu/SkGpuDevice.cpp | 
| @@ -1612,38 +1612,66 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, | 
| CHECK_SHOULD_DRAW(draw, false); | 
|  | 
| GR_CREATE_TRACE_MARKER_CONTEXT("SkGpuDevice::drawVertices", fContext); | 
| + | 
| +    const uint16_t* outIndices; | 
| +    SkAutoTDeleteArray<uint16_t> outAlloc(NULL); | 
| +    GrPrimitiveType primType; | 
| +    GrPaint grPaint; | 
| + | 
| // If both textures and vertex-colors are NULL, strokes hairlines with the paint's color. | 
| if ((NULL == texs || NULL == paint.getShader()) && NULL == colors) { | 
| + | 
| texs = NULL; | 
| + | 
| SkPaint copy(paint); | 
| copy.setStyle(SkPaint::kStroke_Style); | 
| copy.setStrokeWidth(0); | 
| + | 
| +        // we ignore the shader if texs is null. | 
| +        SkPaint2GrPaintNoShader(this->context(), copy, SkColor2GrColor(copy.getColor()), | 
| +                                NULL == colors, &grPaint); | 
|  | 
| +        primType = kLines_GrPrimitiveType; | 
| +        int triangleCount = 0; | 
| +        switch (vmode) { | 
| +            case SkCanvas::kTriangles_VertexMode: | 
| +                triangleCount = indexCount / 3; | 
| +                break; | 
| +            case SkCanvas::kTriangleStrip_VertexMode: | 
| +            case SkCanvas::kTriangleFan_VertexMode: | 
| +                triangleCount = indexCount - 2; | 
| +                break; | 
| +        } | 
| + | 
| VertState       state(vertexCount, indices, indexCount); | 
| VertState::Proc vertProc = state.chooseProc(vmode); | 
| - | 
| -        SkPoint* pts = new SkPoint[vertexCount * 6]; | 
| + | 
| +        //number of indices for lines per triangle with kLines | 
| +        indexCount = triangleCount * 6; | 
| + | 
| +        outAlloc.reset(SkNEW_ARRAY(uint16_t, indexCount)); | 
| +        outIndices = outAlloc.get(); | 
| +        uint16_t* auxIndices = outAlloc.get(); | 
| int i = 0; | 
| while (vertProc(&state)) { | 
| -            pts[i] = vertices[state.f0]; | 
| -            pts[i + 1] = vertices[state.f1]; | 
| -            pts[i + 2] = vertices[state.f1]; | 
| -            pts[i + 3] = vertices[state.f2]; | 
| -            pts[i + 4] = vertices[state.f2]; | 
| -            pts[i + 5] = vertices[state.f0]; | 
| +            auxIndices[i]     = state.f0; | 
| +            auxIndices[i + 1] = state.f1; | 
| +            auxIndices[i + 2] = state.f1; | 
| +            auxIndices[i + 3] = state.f2; | 
| +            auxIndices[i + 4] = state.f2; | 
| +            auxIndices[i + 5] = state.f0; | 
| i += 6; | 
| } | 
| -        draw.drawPoints(SkCanvas::kLines_PointMode, i, pts, copy, true); | 
| -        return; | 
| -    } | 
| - | 
| -    GrPaint grPaint; | 
| -    // we ignore the shader if texs is null. | 
| -    if (NULL == texs) { | 
| -        SkPaint2GrPaintNoShader(this->context(), paint, SkColor2GrColor(paint.getColor()), | 
| -                                NULL == colors, &grPaint); | 
| } else { | 
| -        SkPaint2GrPaintShader(this->context(), paint, NULL == colors, &grPaint); | 
| +        outIndices = indices; | 
| +        primType = gVertexMode2PrimitiveType[vmode]; | 
| + | 
| +        if (NULL == texs || NULL == paint.getShader()) { | 
| +            SkPaint2GrPaintNoShader(this->context(), paint, SkColor2GrColor(paint.getColor()), | 
| +                                    NULL == colors, &grPaint); | 
| +        } else { | 
| +            SkPaint2GrPaintShader(this->context(), paint, NULL == colors, &grPaint); | 
| +        } | 
| } | 
|  | 
| #if 0 | 
| @@ -1670,12 +1698,12 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode, | 
| colors = convertedColors.get(); | 
| } | 
| fContext->drawVertices(grPaint, | 
| -                           gVertexMode2PrimitiveType[vmode], | 
| +                           primType, | 
| vertexCount, | 
| vertices, | 
| texs, | 
| colors, | 
| -                           indices, | 
| +                           outIndices, | 
| indexCount); | 
| } | 
|  | 
|  |