Skip to content

Commit 9d6048a

Browse files
committed
Expose C API for tessellator, move to own subdir (flutter#18)
1 parent c81fbbd commit 9d6048a

17 files changed

+446
-16
lines changed

impeller/BUILD.gn

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ group("impeller") {
2121
"geometry",
2222
"image",
2323
"renderer",
24+
"tessellator",
2425
"typographer",
2526
]
2627

impeller/entity/contents/linear_gradient_contents.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include "impeller/entity/contents/content_context.h"
88
#include "impeller/entity/entity.h"
99
#include "impeller/renderer/render_pass.h"
10-
#include "impeller/renderer/tessellator.h"
10+
#include "impeller/tessellator/tessellator.h"
1111

1212
namespace impeller {
1313

impeller/entity/contents/solid_color_contents.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
#include "impeller/entity/entity.h"
99
#include "impeller/geometry/path.h"
1010
#include "impeller/renderer/render_pass.h"
11-
#include "impeller/renderer/tessellator.h"
11+
#include "impeller/tessellator/tessellator.h"
1212

1313
namespace impeller {
1414

impeller/entity/contents/text_contents.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "impeller/geometry/path_builder.h"
1010
#include "impeller/renderer/render_pass.h"
1111
#include "impeller/renderer/sampler_library.h"
12-
#include "impeller/renderer/tessellator.h"
12+
#include "impeller/tessellator/tessellator.h"
1313
#include "impeller/typographer/glyph_atlas.h"
1414

1515
namespace impeller {

impeller/entity/contents/texture_contents.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#include "impeller/entity/texture_fill.vert.h"
1111
#include "impeller/renderer/render_pass.h"
1212
#include "impeller/renderer/sampler_library.h"
13-
#include "impeller/renderer/tessellator.h"
13+
#include "impeller/tessellator/tessellator.h"
1414

1515
namespace impeller {
1616

impeller/renderer/BUILD.gn

+1-4
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,6 @@ impeller_component("renderer") {
9191
"shader_types.h",
9292
"surface.h",
9393
"surface.cc",
94-
"tessellator.cc",
95-
"tessellator.h",
9694
"texture.h",
9795
"texture.cc",
9896
"texture_descriptor.h",
@@ -109,10 +107,9 @@ impeller_component("renderer") {
109107
"../base",
110108
"../geometry",
111109
"../image",
110+
"../tessellator",
112111
]
113112

114-
deps = [ "//third_party/libtess2" ]
115-
116113
frameworks = [ "Metal.framework" ]
117114
}
118115

impeller/renderer/command.h

+1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "impeller/renderer/texture.h"
2121
#include "impeller/renderer/vertex_buffer.h"
2222
#include "impeller/renderer/vertex_buffer_builder.h"
23+
#include "impeller/tessellator/tessellator.h"
2324

2425
namespace impeller {
2526

impeller/renderer/formats.h

-5
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,6 @@ enum class TextureUsage : TextureUsageMask {
131131
kRenderTarget = 1 << 2,
132132
};
133133

134-
enum class WindingOrder {
135-
kClockwise,
136-
kCounterClockwise,
137-
};
138-
139134
enum class CullMode {
140135
kNone,
141136
kFrontFace,

impeller/renderer/renderer_unittests.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
#include "impeller/renderer/sampler_descriptor.h"
2222
#include "impeller/renderer/sampler_library.h"
2323
#include "impeller/renderer/surface.h"
24-
#include "impeller/renderer/tessellator.h"
24+
#include "impeller/tessellator/tessellator.h"
2525
#include "impeller/renderer/vertex_buffer_builder.h"
2626

2727
namespace impeller {

impeller/renderer/tessellator.cc

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
// Use of this source code is governed by a BSD-style license that can be
33
// found in the LICENSE file.
44

5-
#include "impeller/renderer/tessellator.h"
5+
#include "impeller/tessellator/tessellator.h"
66

77
#include "flutter/fml/logging.h"
88
#include "flutter/fml/trace_event.h"

impeller/tessellator/BUILD.gn

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# Copyright 2013 The Flutter Authors. All rights reserved.
2+
# Use of this source code is governed by a BSD-style license that can be
3+
# found in the LICENSE file.
4+
5+
import("//flutter/impeller/tools/impeller.gni")
6+
7+
impeller_component("tessellator") {
8+
sources = [
9+
"tessellator.cc",
10+
"tessellator.h",
11+
]
12+
13+
public_deps = [ "../geometry" ]
14+
15+
deps = [ "//third_party/libtess2" ]
16+
}
17+
18+
shared_library("tessellator_shared") {
19+
output_name = "tessellator"
20+
21+
sources = [
22+
"c/tessellator.h",
23+
"c/tessellator.cc",
24+
"tessellator.cc",
25+
"tessellator.h",
26+
]
27+
28+
deps = [
29+
"../geometry",
30+
"//flutter/fml",
31+
"//third_party/libtess2",
32+
]
33+
}

impeller/tessellator/c/tessellator.cc

+68
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#include "tessellator.h"
6+
7+
#include <vector>
8+
9+
namespace impeller {
10+
PathBuilder* CreatePathBuilder() {
11+
return new PathBuilder();
12+
}
13+
14+
void DestroyPathBuilder(PathBuilder* builder) {
15+
delete builder;
16+
}
17+
18+
void MoveTo(PathBuilder* builder, Scalar x, Scalar y) {
19+
builder->MoveTo(Point(x, y));
20+
}
21+
22+
void LineTo(PathBuilder* builder, Scalar x, Scalar y) {
23+
builder->LineTo(Point(x, y));
24+
}
25+
26+
void CubicTo(PathBuilder* builder,
27+
Scalar x1,
28+
Scalar y1,
29+
Scalar x2,
30+
Scalar y2,
31+
Scalar x3,
32+
Scalar y3) {
33+
builder->CubicCurveTo(Point(x1, y1), Point(x2, y2), Point(x3, y3));
34+
}
35+
36+
void Close(PathBuilder* builder) {
37+
builder->Close();
38+
}
39+
40+
struct Vertices* Tessellate(PathBuilder* builder) {
41+
auto path = builder->CopyPath();
42+
auto polyline = path.CreatePolyline();
43+
44+
std::vector<float> points;
45+
if (!Tessellator{path.GetFillType()}.Tessellate(polyline,
46+
[&points](Point vertex) {
47+
points.push_back(vertex.x);
48+
points.push_back(vertex.y);
49+
})) {
50+
return nullptr;
51+
}
52+
53+
Vertices* vertices = new Vertices();
54+
vertices->points = new float[points.size()];
55+
if (!vertices->points) {
56+
return nullptr;
57+
}
58+
vertices->length = points.size();
59+
std::copy(points.begin(), points.end(), vertices->points);
60+
return vertices;
61+
}
62+
63+
void DestroyVertices(Vertices* vertices) {
64+
delete vertices->points;
65+
delete vertices;
66+
}
67+
68+
} // namespace impeller

impeller/tessellator/c/tessellator.h

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
#pragma once
6+
7+
#include "impeller/geometry/path_builder.h"
8+
#include "impeller/tessellator/tessellator.h"
9+
10+
#define IMPELLER_API __attribute__((visibility("default")))
11+
12+
extern "C" {
13+
14+
namespace impeller {
15+
16+
struct IMPELLER_API Vertices {
17+
float* points;
18+
uint32_t length;
19+
};
20+
21+
IMPELLER_API PathBuilder* CreatePathBuilder();
22+
23+
IMPELLER_API void DestroyPathBuilder(PathBuilder* builder);
24+
25+
IMPELLER_API void MoveTo(PathBuilder* builder, Scalar x, Scalar y);
26+
27+
IMPELLER_API void LineTo(PathBuilder* builder, Scalar x, Scalar y);
28+
29+
IMPELLER_API void CubicTo(PathBuilder* builder,
30+
Scalar x1,
31+
Scalar y1,
32+
Scalar x2,
33+
Scalar y2,
34+
Scalar x3,
35+
Scalar y3);
36+
37+
IMPELLER_API void Close(PathBuilder* builder);
38+
39+
IMPELLER_API struct Vertices* Tessellate(PathBuilder* builder);
40+
41+
IMPELLER_API void DestroyVertices(Vertices* vertices);
42+
43+
} // namespace impeller
44+
}

0 commit comments

Comments
 (0)