| 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);
|
| }
|
|
|
|
|