7#include "absl/status/statusor.h"
20#include "third_party/abseil-cpp/absl/status/status_matchers.h"
28absl::StatusOr<std::shared_ptr<DlColorSource>> MakeRuntimeEffect(
30 std::string_view
name,
31 const std::shared_ptr<std::vector<uint8_t>>& uniform_data = {},
32 const std::vector<std::shared_ptr<DlColorSource>>& samplers = {}) {
33 auto runtime_stages_result = test->OpenAssetAsRuntimeStage(
name.data());
34 if (!runtime_stages_result.ok()) {
35 return runtime_stages_result.status();
37 std::shared_ptr<RuntimeStage> runtime_stage =
38 runtime_stages_result.
value()[test->GetRuntimeStageBackend()];
40 return absl::InternalError(
"Runtime stage not found for backend.");
42 if (!runtime_stage->IsDirty()) {
43 return absl::InternalError(
"Runtime stage is not dirty.");
58 } frag_uniforms = {.iResolution =
Vector2(400, 400), .iTime = 100.0};
59 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
60 uniform_data->resize(
sizeof(FragUniforms));
61 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
65 MakeRuntimeEffect(
this,
"runtime_stage_example.frag.iplr", uniform_data);
66 ABSL_ASSERT_OK(effect);
73 DlClipOp::kIntersect);
77 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
84 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
85 uniform_data->resize(
sizeof(FragUniforms));
86 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
89 auto effect = MakeRuntimeEffect(
this,
"gradient.frag.iplr", uniform_data);
90 ABSL_ASSERT_OK(effect);
95 builder.
Scale(GetContentScale().
x, GetContentScale().
y);
99 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
103 auto runtime_stages_result =
104 OpenAssetAsRuntimeStage(
"runtime_stage_filter_example.frag.iplr");
105 ABSL_ASSERT_OK(runtime_stages_result);
106 std::shared_ptr<RuntimeStage> runtime_stage =
107 runtime_stages_result.value()[GetRuntimeStageBackend()];
108 ASSERT_TRUE(runtime_stage);
109 ASSERT_TRUE(runtime_stage->IsDirty());
111 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
114 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
115 uniform_data->resize(
sizeof(
Vector2));
126 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
135 const float stops[2] = {0.0, 1.0};
137 2, colors.data(), stops,
139 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
143 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
144 uniform_data->resize(
sizeof(
Vector2));
148 MakeRuntimeEffect(
this,
"runtime_stage_filter_example.frag.iplr",
149 uniform_data, sampler_inputs);
150 ABSL_ASSERT_OK(effect);
156 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
173 std::shared_ptr<DlImageFilter> color_filter =
176 auto runtime_stages_result =
177 OpenAssetAsRuntimeStage(
"runtime_stage_filter_warp.frag.iplr");
178 ABSL_ASSERT_OK(runtime_stages_result);
179 std::shared_ptr<RuntimeStage> runtime_stage =
180 runtime_stages_result.value()[GetRuntimeStageBackend()];
181 ASSERT_TRUE(runtime_stage);
182 ASSERT_TRUE(runtime_stage->IsDirty());
184 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
187 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
188 uniform_data->resize(
sizeof(
Vector2));
195 builder.
Scale(0.7, 0.7);
201 DlImageSampling::kNearestNeighbor, &paint);
205 builder.
DrawLine({100, 100}, {200, 100}, green);
206 builder.
DrawLine({100, 100}, {100, 200}, green);
208 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
212 auto runtime_stages_result =
213 OpenAssetAsRuntimeStage(
"runtime_stage_filter_warp.frag.iplr");
214 ABSL_ASSERT_OK(runtime_stages_result);
215 std::shared_ptr<RuntimeStage> runtime_stage =
216 runtime_stages_result.value()[GetRuntimeStageBackend()];
217 ASSERT_TRUE(runtime_stage);
218 ASSERT_TRUE(runtime_stage->IsDirty());
223 bool compare =
false;
225 auto callback = [&]() -> sk_sp<DisplayList> {
227 ImGuiWindowFlags_AlwaysAutoResize)) {
228 ImGui::SliderFloat(
"xoffset", &xoffset, -50, 50);
229 ImGui::SliderFloat(
"yoffset", &yoffset, -50, 50);
230 ImGui::SliderFloat(
"xscale", &xscale, 0, 1);
231 ImGui::SliderFloat(
"yscale", &yscale, 0, 1);
232 ImGui::Checkbox(
"compare", &compare);
248 std::shared_ptr<DlImageFilter> color_filter =
251 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
254 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
255 uniform_data->resize(
sizeof(
Vector2));
262 builder.
Scale(xscale, yscale);
268 DlImageSampling::kNearestNeighbor, &paint);
274 DlImageSampling::kNearestNeighbor, &paint);
278 DlImageSampling::kNearestNeighbor, &paint);
283 builder.
DrawLine({100, 100}, {200, 100}, green);
284 builder.
DrawLine({100, 100}, {100, 200}, green);
286 builder.
DrawLine({800, 100}, {900, 100}, green);
287 builder.
DrawLine({800, 100}, {800, 200}, green);
288 builder.
DrawLine({100, 800}, {200, 800}, green);
289 builder.
DrawLine({100, 800}, {100, 900}, green);
292 return builder.
Build();
295 ASSERT_TRUE(OpenPlaygroundHere(
callback));
299 auto runtime_stages_result =
300 OpenAssetAsRuntimeStage(
"runtime_stage_filter_circle.frag.iplr");
301 ABSL_ASSERT_OK(runtime_stages_result);
302 std::shared_ptr<RuntimeStage> runtime_stage =
303 runtime_stages_result.value()[GetRuntimeStageBackend()];
304 ASSERT_TRUE(runtime_stage);
305 ASSERT_TRUE(runtime_stage->IsDirty());
308 auto callback = [&]() -> sk_sp<DisplayList> {
310 ImGuiWindowFlags_AlwaysAutoResize)) {
311 ImGui::SliderFloat(
"sigma", &sigma, 0, 20);
322 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
326 struct FragUniforms {
329 } frag_uniforms = {.size =
Vector2(1, 1), .origin =
Vector2(30.f, 30.f)};
330 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
331 uniform_data->resize(
sizeof(FragUniforms));
332 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
344 DlImageSampling::kNearestNeighbor, &paint);
348 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
353 builder.
DrawLine({100, 100}, {200, 100}, green);
354 builder.
DrawLine({100, 100}, {100, 200}, green);
356 return builder.
Build();
359 ASSERT_TRUE(OpenPlaygroundHere(
callback));
363 auto runtime_stages_result =
364 OpenAssetAsRuntimeStage(
"runtime_stage_filter_circle.frag.iplr");
365 ABSL_ASSERT_OK(runtime_stages_result);
366 std::shared_ptr<RuntimeStage> runtime_stage =
367 runtime_stages_result.value()[GetRuntimeStageBackend()];
368 ASSERT_TRUE(runtime_stage);
369 ASSERT_TRUE(runtime_stage->IsDirty());
372 auto callback = [&]() -> sk_sp<DisplayList> {
374 ImGuiWindowFlags_AlwaysAutoResize)) {
375 ImGui::SliderFloat(
"sigma", &sigma, 0, 20);
386 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
389 struct FragUniforms {
392 } frag_uniforms = {.size =
Vector2(1, 1), .origin =
Vector2(30.f, 30.f)};
393 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
394 uniform_data->resize(
sizeof(FragUniforms));
395 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
407 DlImageSampling::kNearestNeighbor, &paint);
411 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
416 builder.
DrawLine({100, 100}, {200, 100}, green);
417 builder.
DrawLine({100, 100}, {100, 200}, green);
419 return builder.
Build();
422 ASSERT_TRUE(OpenPlaygroundHere(
callback));
426 auto runtime_stages_result =
427 OpenAssetAsRuntimeStage(
"runtime_stage_filter_circle.frag.iplr");
428 ABSL_ASSERT_OK(runtime_stages_result);
429 std::shared_ptr<RuntimeStage> runtime_stage =
430 runtime_stages_result.value()[GetRuntimeStageBackend()];
431 ASSERT_TRUE(runtime_stage);
432 ASSERT_TRUE(runtime_stage->IsDirty());
438 auto callback = [&]() -> sk_sp<DisplayList> {
440 ImGuiWindowFlags_AlwaysAutoResize)) {
441 ImGui::SliderFloat(
"sigma", &sigma, 0, 20);
442 ImGui::SliderFloat(
"clip_x", &clip_origin.
x, 0, 2048.f);
443 ImGui::SliderFloat(
"clip_y", &clip_origin.
y, 0, 1536.f);
444 ImGui::SliderFloat(
"clip_width", &clip_size.
x, 0, 2048.f);
445 ImGui::SliderFloat(
"clip_height", &clip_size.
y, 0, 1536.f);
446 ImGui::SliderFloat(
"circle_x", &circle_origin.
x, 0.f, 2048.f);
447 ImGui::SliderFloat(
"circle_y", &circle_origin.
y, 0.f, 1536.f);
458 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
461 struct FragUniforms {
464 } frag_uniforms = {.size =
Vector2(1, 1), .origin = circle_origin};
465 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
466 uniform_data->resize(
sizeof(FragUniforms));
467 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
482 DlImageSampling::kNearestNeighbor, &paint);
486 builder.
SaveLayer(std::nullopt, &save_paint, backdrop_filter.get());
491 builder.
DrawLine({100, 100}, {200, 100}, green);
492 builder.
DrawLine({100, 100}, {100, 200}, green);
494 return builder.
Build();
497 ASSERT_TRUE(OpenPlaygroundHere(
callback));
501 struct FragUniforms {
503 } frag_uniforms = {.uSize =
Vector2(400, 400)};
504 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
505 uniform_data->resize(
sizeof(FragUniforms));
506 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
508 auto runtime_stages_result =
509 OpenAssetAsRuntimeStage(
"runtime_stage_border.frag.iplr");
510 ABSL_ASSERT_OK(runtime_stages_result);
511 std::shared_ptr<RuntimeStage> runtime_stage =
512 runtime_stages_result.value()[GetRuntimeStageBackend()];
513 ASSERT_TRUE(runtime_stage);
514 ASSERT_TRUE(runtime_stage->IsDirty());
516 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
547 builder.
SaveLayer(std::nullopt, &save_paint, runtime_filter.get());
555 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
560 auto size =
image->GetBounds().GetSize();
562 struct FragUniforms {
564 } frag_uniforms = {.size =
Size(
size.width,
size.height)};
565 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
566 uniform_data->resize(
sizeof(FragUniforms));
567 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
569 auto runtime_stages_result = OpenAssetAsRuntimeStage(
"gradient.frag.iplr");
570 ABSL_ASSERT_OK(runtime_stages_result);
571 std::shared_ptr<RuntimeStage> runtime_stage =
572 runtime_stages_result.value()[GetRuntimeStageBackend()];
573 ASSERT_TRUE(runtime_stage);
574 ASSERT_TRUE(runtime_stage->IsDirty());
576 std::vector<std::shared_ptr<DlColorSource>> sampler_inputs = {
586 auto callback = [&]() -> sk_sp<DisplayList> {
588 ImGuiWindowFlags_AlwaysAutoResize)) {
589 ImGui::SliderFloat(
"rotation", &rotation, 0, 360);
600 DlImageSampling::kNearestNeighbor, &paint);
602 return builder.
Build();
605 ASSERT_TRUE(OpenPlaygroundHere(
callback));
609 constexpr float kDimension = 400.0f;
610 struct FragUniforms {
613 } frag_uniforms = {.iResolution =
Vector2(kDimension, kDimension),
614 .iValues =
Vector4(0.25, 0.50, 0.75, 1.0)};
615 auto uniform_data = std::make_shared<std::vector<uint8_t>>();
616 uniform_data->resize(
sizeof(FragUniforms));
617 memcpy(uniform_data->data(), &frag_uniforms,
sizeof(FragUniforms));
620 auto effect = MakeRuntimeEffect(
this,
"runtime_stage_vector_array.frag.iplr",
622 ABSL_ASSERT_OK(effect);
628 ASSERT_TRUE(OpenPlaygroundHere(builder.
Build()));
void ClipRect(const DlRect &rect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void DrawImage(const sk_sp< DlImage > &image, const DlPoint &point, DlImageSampling sampling, const DlPaint *paint=nullptr) override
void SaveLayer(const std::optional< DlRect > &bounds, const DlPaint *paint=nullptr, const DlImageFilter *backdrop=nullptr, std::optional< int64_t > backdrop_id=std::nullopt) override
void DrawLine(const DlPoint &p0, const DlPoint &p1, const DlPaint &paint) override
void ClipRoundRect(const DlRoundRect &rrect, DlClipOp clip_op=DlClipOp::kIntersect, bool is_aa=false) override
void Rotate(DlScalar degrees) override
void Scale(DlScalar sx, DlScalar sy) override
void Translate(DlScalar tx, DlScalar ty) override
void DrawPaint(const DlPaint &paint) override
sk_sp< DisplayList > Build()
void DrawRect(const DlRect &rect, const DlPaint &paint) override
static std::shared_ptr< const DlColorFilter > MakeMatrix(const float matrix[20])
static std::shared_ptr< DlColorSource > MakeLinear(const DlPoint start_point, const DlPoint end_point, uint32_t stop_count, const DlColor *colors, const float *stops, DlTileMode tile_mode, const DlMatrix *matrix=nullptr)
static std::shared_ptr< DlColorSource > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
static std::shared_ptr< DlImageFilter > MakeBlur(DlScalar sigma_x, DlScalar sigma_y, DlTileMode tile_mode)
static std::shared_ptr< DlImageFilter > MakeRuntimeEffect(sk_sp< DlRuntimeEffect > runtime_effect, std::vector< std::shared_ptr< DlColorSource > > samplers, std::shared_ptr< std::vector< uint8_t > > uniform_data)
static std::shared_ptr< DlImageFilter > MakeColorFilter(const std::shared_ptr< const DlColorFilter > &filter)
static std::shared_ptr< DlImageFilter > MakeCompose(const std::shared_ptr< DlImageFilter > &outer, const std::shared_ptr< DlImageFilter > &inner)
DlPaint & setColor(DlColor color)
DlPaint & setBlendMode(DlBlendMode mode)
DlPaint & setImageFilter(std::nullptr_t filter)
DlPaint & setColorSource(std::nullptr_t source)
static sk_sp< DlRuntimeEffect > Make(std::shared_ptr< impeller::RuntimeStage > runtime_stage)
static bool ImGuiBegin(const char *name, bool *p_open, ImGuiWindowFlags flags)
static sk_sp< DlImageImpeller > Make(std::shared_ptr< Texture > texture, OwningContext owning_context=OwningContext::kIO)
FlutterVulkanImage * image
FlutterDesktopBinaryReply callback
it will be possible to load the file into Perfetto s trace viewer use test Running tests that layout and measure text will not yield consistent results across various platforms Enabling this option will make font resolution default to the Ahem test font on all disable asset Prevents usage of any non test fonts unless they were explicitly Loaded via prefetched default font Indicates whether the embedding started a prefetch of the default font manager before creating the engine run In non interactive keep the shell running after the Dart script has completed enable serial On low power devices with low core running concurrent GC tasks on threads can cause them to contend with the UI thread which could potentially lead to jank This option turns off all concurrent GC activities domain network JSON encoded network policy per domain This overrides the DisallowInsecureConnections switch Embedder can specify whether to allow or disallow insecure connections at a domain level old gen heap size
DEF_SWITCHES_START aot vmservice shared library name
TEST_P(AiksTest, DrawAtlasNoColor)
static constexpr DlColor kWhite()
static constexpr DlColor kBlue()
static constexpr DlColor kAqua()
static constexpr DlColor kRed()
static constexpr DlColor kGreen()
static RoundRect MakeRectXY(const Rect &rect, Scalar x_radius, Scalar y_radius)
static constexpr TRect MakeXYWH(Type x, Type y, Type width, Type height)
static constexpr TSize MakeWH(Type width, Type height)