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"
15 #include "include/core/SkRSXform.h"
16 #include "include/core/SkRefCnt.h"
25 return SkRSXform::Make(1, 0, tx, ty);
28 std::tuple<std::vector<SkRect>, std::vector<SkRSXform>, sk_sp<DlImageImpeller>>
29 CreateTestData(
const AiksTest* test) {
33 auto size = atlas->impeller_texture()->GetSize();
35 Scalar half_width = size.width / 2;
36 Scalar half_height = size.height / 2;
37 std::vector<SkRect> texture_coordinates = {
38 SkRect::MakeLTRB(0, 0, half_width, half_height),
39 SkRect::MakeLTRB(half_width, 0, size.width, half_height),
40 SkRect::MakeLTRB(0, half_height, half_width, size.height),
41 SkRect::MakeLTRB(half_width, half_height, size.width, size.height)};
43 std::vector<SkRSXform> transforms = {
44 MakeTranslation(0, 0), MakeTranslation(half_width, 0),
45 MakeTranslation(0, half_height),
46 MakeTranslation(half_width, half_height)};
47 return std::make_tuple(texture_coordinates, transforms, atlas);
53 DisplayListBuilder builder;
54 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
56 builder.Scale(GetContentScale().x, GetContentScale().y);
57 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
58 nullptr, 4, DlBlendMode::kSrcOver,
59 DlImageSampling::kNearestNeighbor,
nullptr);
61 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
65 DisplayListBuilder builder;
66 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
68 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
69 DlColor::kBlue(), DlColor::kYellow()};
71 builder.Scale(GetContentScale().x, GetContentScale().y);
72 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
73 colors.data(), 4, DlBlendMode::kModulate,
74 DlImageSampling::kNearestNeighbor,
nullptr);
76 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
80 DisplayListBuilder builder;
82 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
84 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
85 DlColor::kBlue(), DlColor::kYellow()};
87 builder.Scale(GetContentScale().x, GetContentScale().y);
88 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
89 colors.data(), 4, DlBlendMode::kSrcATop,
90 DlImageSampling::kNearestNeighbor,
nullptr);
92 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
96 DisplayListBuilder builder;
99 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
103 builder.Scale(GetContentScale().x, GetContentScale().y);
104 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
105 nullptr, 4, DlBlendMode::kSrcOver,
106 DlImageSampling::kNearestNeighbor,
nullptr,
109 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
114 auto size = atlas->impeller_texture()->GetSize();
115 std::vector<SkRect> texture_coordinates = {
116 SkRect::MakeLTRB(0, 0, size.width, size.height)};
117 std::vector<SkRSXform> transforms = {MakeTranslation(0, 0)};
119 DisplayListBuilder builder;
120 builder.Scale(GetContentScale().x, GetContentScale().y);
121 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
122 nullptr, 1, DlBlendMode::kSrcOver,
123 DlImageSampling::kNearestNeighbor,
nullptr);
125 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
130 DisplayListBuilder builder;
132 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
134 builder.Scale(0.25, 0.25);
135 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
136 nullptr, 4, DlBlendMode::kModulate,
137 DlImageSampling::kNearestNeighbor,
nullptr);
139 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
144 DisplayListBuilder builder;
146 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
147 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
148 DlColor::kBlue(), DlColor::kYellow()};
150 builder.Scale(0.25, 0.25);
151 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
152 colors.data(), 4, DlBlendMode::kModulate,
153 DlImageSampling::kNearestNeighbor,
nullptr);
155 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
159 DisplayListBuilder builder;
160 EXPECT_EQ(GetContext()->GetCapabilities()->GetDefaultColorFormat(),
164 auto [texture_coordinates, transforms, atlas] = CreateTestData(
this);
165 std::vector<DlColor> colors = {DlColor::kRed(), DlColor::kGreen(),
166 DlColor::kBlue(), DlColor::kYellow()};
168 builder.DrawAtlas(atlas, transforms.data(), texture_coordinates.data(),
169 colors.data(), 4, DlBlendMode::kPlus,
170 DlImageSampling::kNearestNeighbor,
nullptr);
172 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));