7 #include "flutter/display_list/dl_builder.h"
8 #include "flutter/display_list/dl_paint.h"
9 #include "flutter/display_list/effects/dl_color_source.h"
10 #include "flutter/display_list/effects/dl_image_filter.h"
11 #include "flutter/display_list/effects/dl_runtime_effect.h"
20 std::shared_ptr<DlColorSource> MakeRuntimeEffect(
22 std::string_view name,
23 const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {},
24 const std::vector<std::shared_ptr<DlColorSource>>& samplers = {}) {
25 auto runtime_stages = test->OpenAssetAsRuntimeStage(name.data());
28 FML_CHECK(runtime_stage);
29 FML_CHECK(runtime_stage->IsDirty());
31 auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage);
33 return DlColorSource::MakeRuntimeEffect(dl_runtime_effect, samplers,
43 } frag_uniforms = {.iResolution =
Vector2(400, 400), .iTime = 100.0};
44 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
45 uniform_data->resize(
sizeof(FragUniforms));
46 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
50 MakeRuntimeEffect(
this,
"runtime_stage_example.frag.iplr", uniform_data));
52 DisplayListBuilder builder;
54 builder.ClipRoundRect(
55 DlRoundRect::MakeRectXY(DlRect::MakeXYWH(0, 0, 400, 400), 10.0, 10.0),
56 DlClipOp::kIntersect);
57 builder.DrawRect(DlRect::MakeXYWH(0, 0, 400, 400), paint);
60 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
67 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
68 uniform_data->resize(
sizeof(FragUniforms));
69 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
73 MakeRuntimeEffect(
this,
"gradient.frag.iplr", uniform_data));
75 DisplayListBuilder builder;
77 builder.Scale(GetContentScale().
x, GetContentScale().y);
78 builder.DrawPaint(paint);
81 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
86 OpenAssetAsRuntimeStage(
"runtime_stage_filter_example.frag.iplr");
88 std::shared_ptr<RuntimeStage> runtime_stage =
90 ASSERT_TRUE(runtime_stage);
91 ASSERT_TRUE(runtime_stage->IsDirty());
93 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
96 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
97 uniform_data->resize(
sizeof(
Vector2));
100 paint.setColor(DlColor::kAqua());
101 paint.setImageFilter(DlImageFilter::MakeRuntimeEffect(
102 DlRuntimeEffect::MakeImpeller(runtime_stage), sampler_inputs,
105 DisplayListBuilder builder;
106 builder.DrawRect(DlRect::MakeXYWH(0, 0, 400, 400), paint);
108 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
115 std::vector<flutter::DlColor> colors = {flutter::DlColor::kBlue(),
116 flutter::DlColor::kRed()};
117 const float stops[2] = {0.0, 1.0};
118 auto linear = flutter::DlColorSource::MakeLinear({0.0, 0.0}, {300.0, 300.0},
119 2, colors.data(), stops,
120 flutter::DlTileMode::kClamp);
121 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
125 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
126 uniform_data->resize(
sizeof(
Vector2));
129 paint.setColorSource(
130 MakeRuntimeEffect(
this,
"runtime_stage_filter_example.frag.iplr",
131 uniform_data, sampler_inputs));
133 DisplayListBuilder builder;
134 builder.DrawPaint(paint);
136 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
TEST_P(AiksTest, DrawAtlasNoColor)
constexpr RuntimeStageBackend PlaygroundBackendToRuntimeStageBackend(PlaygroundBackend backend)
static constexpr TSize MakeWH(Type width, Type height)