92 {
94 TryEndRecording();
96 << "Unnecessarily asked to render into a render target when there was "
97 "nothing to render.";
98
99#ifdef IMPELLER_SUPPORTS_RENDERING
100 auto* impeller_target = render_target.GetImpellerRenderTarget();
101 if (impeller_target) {
102 auto aiks_context = render_target.GetAiksContext();
103
104 auto dl_builder = DisplayListBuilder();
105 dl_builder.SetTransform(&surface_transformation_);
106 slice_->render_into(&dl_builder);
107 auto display_list = dl_builder.Build();
108
109#if ENABLE_EXPERIMENTAL_CANVAS
110 auto cull_rect =
114
117 display_list->Dispatch(collector, sk_cull_rect);
118
120 aiks_context->GetContentContext(), *impeller_target, cull_rect);
121 display_list->Dispatch(impeller_dispatcher, sk_cull_rect);
122 impeller_dispatcher.FinishRecording();
123 aiks_context->GetContentContext().GetTransientsBuffer().Reset();
124 aiks_context->GetContentContext().GetLazyGlyphAtlas()->ResetTextFrames();
125
126 return true;
127#else
129 dispatcher.drawDisplayList(display_list, 1);
130 return aiks_context->Render(dispatcher.EndRecordingAsPicture(),
131 *impeller_target, true);
132#endif
133 }
134#endif
135
136 auto skia_surface = render_target.GetSkiaSurface();
137 if (!skia_surface) {
138 return false;
139 }
140
141 FML_DCHECK(render_target.GetRenderTargetSize() == render_surface_size_);
142
143 auto canvas = skia_surface->getCanvas();
144 if (!canvas) {
145 return false;
146 }
147 DlSkCanvasAdapter dl_canvas(canvas);
148 int restore_count = dl_canvas.GetSaveCount();
149 dl_canvas.SetTransform(surface_transformation_);
150 if (clear_surface) {
152 }
153 slice_->render_into(&dl_canvas);
154 dl_canvas.RestoreToCount(restore_count);
155 dl_canvas.Flush();
156
157 return true;
158}
bool HasEngineRenderedContents()
Performs a first pass over the display list to collect all text frames.
#define FML_DCHECK(condition)
static constexpr SkIRect MakeWH(int32_t w, int32_t h)
static constexpr DlColor kTransparent()
A 4x4 matrix using column-major storage.
static constexpr TRect MakeSize(const TSize< U > &size)
#define TRACE_EVENT0(category_group, name)