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"
14 #include "include/core/SkPath.h"
15 #include "include/core/SkRRect.h"
23 std::shared_ptr<DlColorSource> MakeRuntimeEffect(
25 std::string_view name,
26 const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {},
27 const std::vector<std::shared_ptr<DlColorSource>>& samplers = {}) {
28 auto runtime_stages = test->OpenAssetAsRuntimeStage(name.data());
31 FML_CHECK(runtime_stage);
32 FML_CHECK(runtime_stage->IsDirty());
34 auto dl_runtime_effect = DlRuntimeEffect::MakeImpeller(runtime_stage);
36 return DlColorSource::MakeRuntimeEffect(dl_runtime_effect, samplers,
46 } frag_uniforms = {.iResolution =
Vector2(400, 400), .iTime = 100.0};
47 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
48 uniform_data->resize(
sizeof(FragUniforms));
49 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
53 MakeRuntimeEffect(
this,
"runtime_stage_example.frag.iplr", uniform_data));
55 DisplayListBuilder builder;
58 SkRRect::MakeRectXY(SkRect::MakeXYWH(0, 0, 400, 400), 10.0, 10.0),
59 DlCanvas::ClipOp::kIntersect);
60 builder.DrawRect(SkRect::MakeXYWH(0, 0, 400, 400), paint);
63 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
70 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
71 uniform_data->resize(
sizeof(FragUniforms));
72 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
76 MakeRuntimeEffect(
this,
"gradient.frag.iplr", uniform_data));
78 DisplayListBuilder builder;
80 builder.Scale(GetContentScale().
x, GetContentScale().y);
81 builder.DrawPaint(paint);
84 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
89 OpenAssetAsRuntimeStage(
"runtime_stage_filter_example.frag.iplr");
91 std::shared_ptr<RuntimeStage> runtime_stage =
93 ASSERT_TRUE(runtime_stage);
94 ASSERT_TRUE(runtime_stage->IsDirty());
96 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
99 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
100 uniform_data->resize(
sizeof(
Vector2));
103 paint.setColor(DlColor::kAqua());
104 paint.setImageFilter(DlImageFilter::MakeRuntimeEffect(
105 DlRuntimeEffect::MakeImpeller(runtime_stage), sampler_inputs,
108 DisplayListBuilder builder;
109 builder.DrawRect(SkRect::MakeXYWH(0, 0, 400, 400), paint);
111 ASSERT_TRUE(OpenPlaygroundHere(builder.Build()));
TEST_P(AiksTest, DrawAtlasNoColor)
constexpr RuntimeStageBackend PlaygroundBackendToRuntimeStageBackend(PlaygroundBackend backend)
static constexpr TSize MakeWH(Type width, Type height)