| Index: src/gpu/SkGpuDevice.cpp
|
| diff --git a/src/gpu/SkGpuDevice.cpp b/src/gpu/SkGpuDevice.cpp
|
| index d0f8d46ee89b87a10be354e11031c344950f67b9..17d837be4239270031a0f953749018d5dcc38c4e 100644
|
| --- a/src/gpu/SkGpuDevice.cpp
|
| +++ b/src/gpu/SkGpuDevice.cpp
|
| @@ -1639,6 +1639,50 @@ void SkGpuDevice::drawVertices(const SkDraw& draw, SkCanvas::VertexMode vmode,
|
|
|
| ///////////////////////////////////////////////////////////////////////////////
|
|
|
| +static void append_quad_indices(uint16_t indices[], int quadIndex) {
|
| + int i = quadIndex * 4;
|
| + indices[0] = i + 0; indices[1] = i + 1; indices[2] = i + 2;
|
| + indices[3] = i + 2; indices[4] = i + 3; indices[5] = i + 0;
|
| +}
|
| +
|
| +void SkGpuDevice::drawAtlas(const SkDraw& d, const SkImage* atlas, const SkRSXform xform[],
|
| + const SkRect texRect[], const SkColor colors[], int count,
|
| + SkXfermode::Mode mode, const SkPaint& paint) {
|
| + if (paint.isAntiAlias()) {
|
| + this->INHERITED::drawAtlas(d, atlas, xform, texRect, colors, count, mode, paint);
|
| + return;
|
| + }
|
| +
|
| + SkPaint p(paint);
|
| + p.setShader(atlas->newShader(SkShader::kClamp_TileMode, SkShader::kClamp_TileMode))->unref();
|
| +
|
| + const int vertCount = count * 4;
|
| + const int indexCount = count * 6;
|
| + SkAutoTMalloc<SkPoint> vertStorage(vertCount * 2);
|
| + SkPoint* verts = vertStorage.get();
|
| + SkPoint* texs = verts + vertCount;
|
| + SkAutoTMalloc<uint16_t> indexStorage(indexCount);
|
| + uint16_t* indices = indexStorage.get();
|
| + SkAutoTUnref<SkXfermode> xfer(SkXfermode::Create(mode));
|
| +
|
| + for (int i = 0; i < count; ++i) {
|
| + xform[i].toQuad(texRect[i].width(), texRect[i].height(), verts);
|
| + texRect[i].toQuad(texs);
|
| + append_quad_indices(indices, i);
|
| + verts += 4;
|
| + texs += 4;
|
| + indices += 6;
|
| + }
|
| +
|
| + verts = vertStorage.get();
|
| + texs = verts + vertCount;
|
| + indices = indexStorage.get();
|
| + this->drawVertices(d, SkCanvas::kTriangles_VertexMode, vertCount, verts, texs, colors, xfer,
|
| + indices, indexCount, p);
|
| +}
|
| +
|
| +///////////////////////////////////////////////////////////////////////////////
|
| +
|
| void SkGpuDevice::drawText(const SkDraw& draw, const void* text,
|
| size_t byteLength, SkScalar x, SkScalar y,
|
| const SkPaint& paint) {
|
|
|