Skip to content

Commit a800e76

Browse files
author
Jonah Williams
authored
[Impeller] make VerticesGeometry delegate to the DL class (flutter#37835)
* [Impeller] make VerticesGeometry delegate to the DL class * ++ * ++ * licenses * ++
1 parent 10da1a1 commit a800e76

19 files changed

+395
-563
lines changed

ci/licenses_golden/licenses_flutter

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1144,10 +1144,10 @@ FILE: ../../../flutter/impeller/display_list/display_list_image_impeller.h
11441144
FILE: ../../../flutter/impeller/display_list/display_list_playground.cc
11451145
FILE: ../../../flutter/impeller/display_list/display_list_playground.h
11461146
FILE: ../../../flutter/impeller/display_list/display_list_unittests.cc
1147+
FILE: ../../../flutter/impeller/display_list/display_list_vertices_geometry.cc
1148+
FILE: ../../../flutter/impeller/display_list/display_list_vertices_geometry.h
11471149
FILE: ../../../flutter/impeller/display_list/nine_patch_converter.cc
11481150
FILE: ../../../flutter/impeller/display_list/nine_patch_converter.h
1149-
FILE: ../../../flutter/impeller/display_list/vertices_converter.cc
1150-
FILE: ../../../flutter/impeller/display_list/vertices_converter.h
11511151
FILE: ../../../flutter/impeller/docs/assets/launch-app.png
11521152
FILE: ../../../flutter/impeller/docs/assets/read_frame_captures/image1.png
11531153
FILE: ../../../flutter/impeller/docs/assets/read_frame_captures/image10.png
@@ -1355,8 +1355,6 @@ FILE: ../../../flutter/impeller/geometry/type_traits.cc
13551355
FILE: ../../../flutter/impeller/geometry/type_traits.h
13561356
FILE: ../../../flutter/impeller/geometry/vector.cc
13571357
FILE: ../../../flutter/impeller/geometry/vector.h
1358-
FILE: ../../../flutter/impeller/geometry/vertices.cc
1359-
FILE: ../../../flutter/impeller/geometry/vertices.h
13601358
FILE: ../../../flutter/impeller/image/backends/skia/compressed_image_skia.cc
13611359
FILE: ../../../flutter/impeller/image/backends/skia/compressed_image_skia.h
13621360
FILE: ../../../flutter/impeller/image/compressed_image.cc

impeller/aiks/canvas.cc

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#include "impeller/entity/contents/vertices_contents.h"
1919
#include "impeller/entity/geometry.h"
2020
#include "impeller/geometry/path_builder.h"
21-
#include "impeller/geometry/vertices.h"
2221

2322
namespace impeller {
2423

@@ -373,11 +372,9 @@ void Canvas::DrawTextFrame(const TextFrame& text_frame,
373372
GetCurrentPass().AddEntity(entity);
374373
}
375374

376-
void Canvas::DrawVertices(const Vertices& vertices,
375+
void Canvas::DrawVertices(std::unique_ptr<VerticesGeometry> vertices,
377376
BlendMode blend_mode,
378377
Paint paint) {
379-
auto geometry = Geometry::MakeVertices(vertices);
380-
381378
Entity entity;
382379
entity.SetTransformation(GetCurrentTransformation());
383380
entity.SetStencilDepth(GetStencilDepth());
@@ -386,15 +383,15 @@ void Canvas::DrawVertices(const Vertices& vertices,
386383
if (paint.color_source.has_value()) {
387384
auto& source = paint.color_source.value();
388385
auto contents = source();
389-
contents->SetGeometry(std::move(geometry));
386+
contents->SetGeometry(std::move(vertices));
390387
contents->SetAlpha(paint.color.alpha);
391388
entity.SetContents(paint.WithFilters(std::move(contents), true));
392389
} else {
393390
std::shared_ptr<VerticesContents> contents =
394391
std::make_shared<VerticesContents>();
395392
contents->SetColor(paint.color);
396393
contents->SetBlendMode(blend_mode);
397-
contents->SetGeometry(std::move(geometry));
394+
contents->SetGeometry(std::move(vertices));
398395
entity.SetContents(paint.WithFilters(std::move(contents), true));
399396
}
400397

impeller/aiks/canvas.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,11 @@
1414
#include "impeller/aiks/paint.h"
1515
#include "impeller/aiks/picture.h"
1616
#include "impeller/entity/entity_pass.h"
17+
#include "impeller/entity/geometry.h"
1718
#include "impeller/geometry/matrix.h"
1819
#include "impeller/geometry/path.h"
1920
#include "impeller/geometry/point.h"
2021
#include "impeller/geometry/vector.h"
21-
#include "impeller/geometry/vertices.h"
2222
#include "impeller/renderer/sampler_descriptor.h"
2323
#include "impeller/typographer/glyph_atlas.h"
2424
#include "impeller/typographer/text_frame.h"
@@ -97,7 +97,7 @@ class Canvas {
9797
Point position,
9898
const Paint& paint);
9999

100-
void DrawVertices(const Vertices& vertices,
100+
void DrawVertices(std::unique_ptr<VerticesGeometry> vertices,
101101
BlendMode blend_mode,
102102
Paint paint);
103103

impeller/display_list/BUILD.gn

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ impeller_component("display_list") {
1010
"display_list_dispatcher.h",
1111
"display_list_image_impeller.cc",
1212
"display_list_image_impeller.h",
13+
"display_list_vertices_geometry.cc",
14+
"display_list_vertices_geometry.h",
1315
"nine_patch_converter.cc",
1416
"nine_patch_converter.h",
15-
"vertices_converter.cc",
16-
"vertices_converter.h",
1717
]
1818

1919
public_deps = [

impeller/display_list/display_list_dispatcher.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,8 @@
2020
#include "flutter/fml/logging.h"
2121
#include "flutter/fml/trace_event.h"
2222
#include "impeller/display_list/display_list_image_impeller.h"
23+
#include "impeller/display_list/display_list_vertices_geometry.h"
2324
#include "impeller/display_list/nine_patch_converter.h"
24-
#include "impeller/display_list/vertices_converter.h"
2525
#include "impeller/entity/contents/filters/filter_contents.h"
2626
#include "impeller/entity/contents/filters/inputs/filter_input.h"
2727
#include "impeller/entity/contents/linear_gradient_contents.h"
@@ -35,7 +35,6 @@
3535
#include "impeller/geometry/path_builder.h"
3636
#include "impeller/geometry/scalar.h"
3737
#include "impeller/geometry/sigma.h"
38-
#include "impeller/geometry/vertices.h"
3938
#include "impeller/renderer/formats.h"
4039
#include "impeller/typographer/backends/skia/text_frame_skia.h"
4140

@@ -1104,7 +1103,8 @@ void DisplayListDispatcher::drawSkVertices(const sk_sp<SkVertices> vertices,
11041103
// |flutter::Dispatcher|
11051104
void DisplayListDispatcher::drawVertices(const flutter::DlVertices* vertices,
11061105
flutter::DlBlendMode dl_mode) {
1107-
canvas_.DrawVertices(ToVertices(vertices), ToBlendMode(dl_mode), paint_);
1106+
canvas_.DrawVertices(DLVerticesGeometry::MakeVertices(vertices),
1107+
ToBlendMode(dl_mode), paint_);
11081108
}
11091109

11101110
// |flutter::Dispatcher|

impeller/display_list/display_list_unittests.cc

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1054,5 +1054,71 @@ TEST_P(DisplayListTest, MaskBlursApplyCorrectlyToColorSources) {
10541054
ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
10551055
}
10561056

1057+
TEST_P(DisplayListTest, DrawVerticesSolidColorTrianglesWithoutIndices) {
1058+
std::vector<SkPoint> positions = {SkPoint::Make(100, 300),
1059+
SkPoint::Make(200, 100),
1060+
SkPoint::Make(300, 300)};
1061+
std::vector<flutter::DlColor> colors = {flutter::DlColor::kWhite(),
1062+
flutter::DlColor::kGreen(),
1063+
flutter::DlColor::kWhite()};
1064+
1065+
auto vertices = flutter::DlVertices::Make(
1066+
flutter::DlVertexMode::kTriangles, 3, positions.data(),
1067+
/*texture_coorindates=*/nullptr, colors.data());
1068+
1069+
flutter::DisplayListBuilder builder;
1070+
flutter::DlPaint paint;
1071+
1072+
paint.setColor(flutter::DlColor::kRed().modulateOpacity(0.5));
1073+
builder.drawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint);
1074+
1075+
ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
1076+
}
1077+
1078+
TEST_P(DisplayListTest, DrawVerticesLinearGradientWithoutIndices) {
1079+
std::vector<SkPoint> positions = {SkPoint::Make(100, 300),
1080+
SkPoint::Make(200, 100),
1081+
SkPoint::Make(300, 300)};
1082+
1083+
auto vertices = flutter::DlVertices::Make(
1084+
flutter::DlVertexMode::kTriangles, 3, positions.data(),
1085+
/*texture_coorindates=*/nullptr, /*colors=*/nullptr);
1086+
1087+
std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
1088+
flutter::DlColor::kRed()};
1089+
const float stops[2] = {0.0, 1.0};
1090+
1091+
auto linear = flutter::DlColorSource::MakeLinear(
1092+
{100.0, 100.0}, {300.0, 300.0}, 2, colors.data(), stops,
1093+
flutter::DlTileMode::kRepeat);
1094+
1095+
flutter::DisplayListBuilder builder;
1096+
flutter::DlPaint paint;
1097+
1098+
paint.setColorSource(linear);
1099+
builder.drawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint);
1100+
1101+
ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
1102+
}
1103+
1104+
TEST_P(DisplayListTest, DrawVerticesSolidColorTrianglesWithIndices) {
1105+
std::vector<SkPoint> positions = {
1106+
SkPoint::Make(100, 300), SkPoint::Make(200, 100), SkPoint::Make(300, 300),
1107+
SkPoint::Make(200, 500)};
1108+
std::vector<uint16_t> indices = {0, 1, 2, 0, 2, 3};
1109+
1110+
auto vertices = flutter::DlVertices::Make(
1111+
flutter::DlVertexMode::kTriangles, 6, positions.data(),
1112+
/*texture_coorindates=*/nullptr, /*colors=*/nullptr, 6, indices.data());
1113+
1114+
flutter::DisplayListBuilder builder;
1115+
flutter::DlPaint paint;
1116+
1117+
paint.setColor(flutter::DlColor::kWhite());
1118+
builder.drawVertices(vertices, flutter::DlBlendMode::kSrcOver, paint);
1119+
1120+
ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
1121+
}
1122+
10571123
} // namespace testing
10581124
} // namespace impeller

0 commit comments

Comments
 (0)