Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(106)

Side by Side Diff: experimental/AndroidPathRenderer/GrAndroidPathRenderer.cpp

Issue 1160863006: delete experimental path renderers (Closed) Base URL: https://skia.googlesource.com/skia.git@map-buffer-option
Patch Set: Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1
2 /*
3 * Copyright 2012 Google Inc.
4 *
5 * Use of this source code is governed by a BSD-style license that can be
6 * found in the LICENSE file.
7 */
8
9 #include "GrAndroidPathRenderer.h"
10 #include "AndroidPathRenderer.h"
11 #include "Vertex.h"
12
13 GrAndroidPathRenderer::GrAndroidPathRenderer() {
14 }
15
16 bool GrAndroidPathRenderer::canDrawPath(const SkPath& path,
17 const SkStrokeRec& stroke,
18 const GrDrawTarget* target,
19 bool antiAlias) const {
20 return ((stroke.isFillStyle() || stroke.getStyle() == SkStrokeRec::kStroke_S tyle)
21 && !path.isInverseFillType() && path.isConvex());
22 }
23
24 struct ColorVertex {
25 SkPoint pos;
26 GrColor color;
27 };
28
29 bool GrAndroidPathRenderer::onDrawPath(const SkPath& origPath,
30 const SkStrokeRec& stroke,
31 GrDrawTarget* target,
32 bool antiAlias) {
33
34 // generate verts using Android algorithm
35 android::uirenderer::VertexBuffer vertices;
36 android::uirenderer::PathRenderer::ConvexPathVertices(origPath, stroke, anti Alias, NULL,
37 &vertices);
38
39 // set vertex attributes depending on anti-alias
40 GrDrawState* drawState = target->drawState();
41 if (antiAlias) {
42 // position + coverage
43 GrVertexAttrib attribs[] = {
44 GrVertexAttrib(kVec2f_GrVertexAttribType, 0),
45 GrVertexAttrib(kVec4ub_GrVertexAttribType, sizeof(GrPoint))
46 };
47 drawState->setVertexAttribs(attribs, SK_ARRAY_COUNT(attribs));
48 drawState->setAttribIndex(GrDrawState::kPosition_AttribIndex, 0);
49 drawState->setAttribIndex(GrDrawState::kCoverage_AttribIndex, 1);
50 drawState->setAttribBindings(GrDrawState::kCoverage_AttribBindingsBit);
51 } else {
52 drawState->setDefaultVertexAttribs();
53 }
54
55 // allocate our vert buffer
56 int vertCount = vertices.getSize();
57 GrDrawTarget::AutoReleaseGeometry geo(target, vertCount, 0);
58 if (!geo.succeeded()) {
59 SkDebugf("Failed to get space for vertices!\n");
60 return false;
61 }
62
63 // copy android verts to our vertex buffer
64 if (antiAlias) {
65 SkASSERT(sizeof(ColorVertex) == drawState->getVertexSize());
66 ColorVertex* outVert = reinterpret_cast<ColorVertex*>(geo.vertices());
67 android::uirenderer::AlphaVertex* inVert =
68 reinterpret_cast<android::uirenderer::AlphaVertex*>(vertices.getBuff er());
69
70 for (int i = 0; i < vertCount; ++i) {
71 // copy vertex position
72 outVert->pos.set(inVert->position[0], inVert->position[1]);
73 // copy alpha
74 int coverage = static_cast<int>(inVert->alpha * 0xff);
75 outVert->color = GrColorPackRGBA(coverage, coverage, coverage, cover age);
76 ++outVert;
77 ++inVert;
78 }
79 } else {
80 size_t vsize = drawState->getVertexSize();
81 size_t copySize = vsize*vertCount;
82 memcpy(geo.vertices(), vertices.getBuffer(), copySize);
83 }
84
85 // render it
86 target->drawNonIndexed(kTriangleStrip_GrPrimitiveType, 0, vertCount);
87
88 return true;
89 }
OLDNEW
« no previous file with comments | « experimental/AndroidPathRenderer/GrAndroidPathRenderer.h ('k') | experimental/AndroidPathRenderer/Vertex.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698