5 #include "display_list/dl_sampling_options.h"
8 #include "flutter/display_list/dl_blend_mode.h"
9 #include "flutter/display_list/dl_builder.h"
10 #include "flutter/display_list/dl_color.h"
11 #include "flutter/display_list/dl_paint.h"
12 #include "flutter/testing/testing.h"
19 #include "include/core/SkRSXform.h"
20 #include "include/core/SkRefCnt.h"
29 return SkRSXform::Make(1, 0, tx, ty);
32 std::tuple<std::vector<SkRect>, std::vector<SkRSXform>, sk_sp<DlImageImpeller>>
33 CreateTestData(
const AiksTest* test) {
37 auto size = atlas->impeller_texture()->GetSize();
39 Scalar half_width = size.width / 2;
40 Scalar half_height = size.height / 2;
41 std::vector<SkRect> texture_coordinates = {
42 SkRect::MakeLTRB(0, 0, half_width, half_height),
43 SkRect::MakeLTRB(half_width, 0, size.width, half_height),
44 SkRect::MakeLTRB(0, half_height, half_width, size.height),
45 SkRect::MakeLTRB(half_width, half_height, size.width, size.height)};
47 std::vector<SkRSXform> transforms = {
48 MakeTranslation(0, 0), MakeTranslation(half_width, 0),
49 MakeTranslation(0, half_height),
50 MakeTranslation(half_width, half_height)};
51 return std::make_tuple(texture_coordinates, transforms, atlas);
54 std::tuple<std::vector<DlRect>, std::vector<SkRSXform>, sk_sp<DlImageImpeller>>
55 CreateDlTestData(
const AiksTest* test) {
59 auto size = atlas->impeller_texture()->GetSize();
61 Scalar half_width = size.width / 2;
62 Scalar half_height = size.height / 2;
63 std::vector<DlRect> texture_coordinates = {
64 DlRect::MakeLTRB(0, 0, half_width, half_height),
65 DlRect::MakeLTRB(half_width, 0, size.width, half_height),
66 DlRect::MakeLTRB(0, half_height, half_width, size.height),
67 DlRect::MakeLTRB(half_width, half_height, size.width, size.height)};
69 std::vector<SkRSXform> transforms = {
70 MakeTranslation(0, 0), MakeTranslation(half_width, 0),
71 MakeTranslation(0, half_height),
72 MakeTranslation(half_width, half_height)};
73 return std::make_tuple(texture_coordinates, transforms, atlas);
79 DisplayListBuilder builder;
80 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
82 builder.Scale(GetContentScale().x, GetContentScale().y);
83 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
84 nullptr, 4, DlBlendMode::kSrcOver,
85 DlImageSampling::kNearestNeighbor,
nullptr);
87 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
91 DisplayListBuilder builder;
92 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
94 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
95 DlColor::kBlue(), DlColor::kYellow()};
97 builder.Scale(GetContentScale().x, GetContentScale().y);
98 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
99 colors.data(), 4, DlBlendMode::kModulate,
100 DlImageSampling::kNearestNeighbor,
nullptr);
102 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
106 DisplayListBuilder builder;
108 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
110 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
111 DlColor::kBlue(), DlColor::kYellow()};
113 builder.Scale(GetContentScale().x, GetContentScale().y);
114 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
115 colors.data(), 4, DlBlendMode::kSrcATop,
116 DlImageSampling::kNearestNeighbor,
nullptr);
118 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
122 DisplayListBuilder builder;
125 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
129 builder.Scale(GetContentScale().x, GetContentScale().y);
130 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
131 nullptr, 4, DlBlendMode::kSrcOver,
132 DlImageSampling::kNearestNeighbor,
nullptr,
135 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
140 auto size = atlas->impeller_texture()->GetSize();
141 std::vector<SkRect> texture_coordinates = {
142 SkRect::MakeLTRB(0, 0, size.width, size.height)};
143 std::vector<SkRSXform> transforms = {MakeTranslation(0, 0)};
145 DisplayListBuilder builder;
146 builder.Scale(GetContentScale().x, GetContentScale().y);
147 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
148 nullptr, 1, DlBlendMode::kSrcOver,
149 DlImageSampling::kNearestNeighbor,
nullptr);
151 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
156 DisplayListBuilder builder;
158 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
160 builder.Scale(0.25, 0.25);
161 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
162 nullptr, 4, DlBlendMode::kModulate,
163 DlImageSampling::kNearestNeighbor,
nullptr);
165 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
170 DisplayListBuilder builder;
172 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
173 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
174 DlColor::kBlue(), DlColor::kYellow()};
176 builder.Scale(0.25, 0.25);
177 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
178 colors.data(), 4, DlBlendMode::kModulate,
179 DlImageSampling::kNearestNeighbor,
nullptr);
181 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
185 DisplayListBuilder builder;
186 EXPECT_EQ(GetContext()->GetCapabilities()->GetDefaultColorFormat(),
190 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
191 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
192 DlColor::kBlue(), DlColor::kYellow()};
194 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
195 colors.data(), 4, DlBlendMode::kPlus,
196 DlImageSampling::kNearestNeighbor,
nullptr);
198 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
202 auto [texture_coordinates, transforms, atlas] = CreateDlTestData(
this);
205 texture_coordinates.data(),
nullptr, transforms.size(),
216 EXPECT_EQ(vertex_buffer.vertex_count, texture_coordinates.size() * 6);
220 auto [texture_coordinates, transforms, atlas] = CreateDlTestData(
this);
222 std::vector<DlColor> colors;
223 colors.reserve(texture_coordinates.size());
224 for (
auto i = 0u; i < texture_coordinates.size(); i++) {
225 colors.push_back(DlColor::ARGB(0.5, 1, 1, 1));
228 texture_coordinates.data(), colors.data(),
240 EXPECT_EQ(vertex_buffer.vertex_count, texture_coordinates.size() * 6);
244 auto [texture_coordinates, transforms, atlas] = CreateDlTestData(
this);
246 std::vector<DlColor> colors;
247 colors.reserve(texture_coordinates.size());
248 for (
auto i = 0u; i < texture_coordinates.size(); i++) {
249 colors.push_back(DlColor::ARGB(0.5, 1, 1, 1));
252 texture_coordinates.data(), colors.data(),
261 auto [texture_coordinates, transforms, atlas] = CreateDlTestData(
this);
263 std::vector<DlColor> colors;
264 colors.reserve(texture_coordinates.size());
265 for (
auto i = 0u; i < texture_coordinates.size(); i++) {
266 colors.push_back(DlColor::ARGB(0.5, 1, 1, 1));
269 texture_coordinates.data(), colors.data(),