Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
dl_dispatcher.h
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef FLUTTER_IMPELLER_DISPLAY_LIST_DL_DISPATCHER_H_
6#define FLUTTER_IMPELLER_DISPLAY_LIST_DL_DISPATCHER_H_
7
9#include "flutter/display_list/dl_op_receiver.h"
10#include "fml/logging.h"
13#include "impeller/aiks/paint.h"
15
16namespace impeller {
17
19 public:
21
22 // |flutter::DlOpReceiver|
23 bool PrefersImpellerPaths() const override { return true; }
24
25 // |flutter::DlOpReceiver|
26 void setAntiAlias(bool aa) override;
27
28 // |flutter::DlOpReceiver|
29 void setDrawStyle(flutter::DlDrawStyle style) override;
30
31 // |flutter::DlOpReceiver|
32 void setColor(flutter::DlColor color) override;
33
34 // |flutter::DlOpReceiver|
35 void setStrokeWidth(SkScalar width) override;
36
37 // |flutter::DlOpReceiver|
38 void setStrokeMiter(SkScalar limit) override;
39
40 // |flutter::DlOpReceiver|
41 void setStrokeCap(flutter::DlStrokeCap cap) override;
42
43 // |flutter::DlOpReceiver|
44 void setStrokeJoin(flutter::DlStrokeJoin join) override;
45
46 // |flutter::DlOpReceiver|
47 void setColorSource(const flutter::DlColorSource* source) override;
48
49 // |flutter::DlOpReceiver|
50 void setColorFilter(const flutter::DlColorFilter* filter) override;
51
52 // |flutter::DlOpReceiver|
53 void setInvertColors(bool invert) override;
54
55 // |flutter::DlOpReceiver|
56 void setBlendMode(flutter::DlBlendMode mode) override;
57
58 // |flutter::DlOpReceiver|
59 void setPathEffect(const flutter::DlPathEffect* effect) override;
60
61 // |flutter::DlOpReceiver|
62 void setMaskFilter(const flutter::DlMaskFilter* filter) override;
63
64 // |flutter::DlOpReceiver|
65 void setImageFilter(const flutter::DlImageFilter* filter) override;
66
67 // |flutter::DlOpReceiver|
68 void save(uint32_t total_content_depth) override;
69
70 // |flutter::DlOpReceiver|
71 void saveLayer(const SkRect& bounds,
73 uint32_t total_content_depth,
74 const flutter::DlImageFilter* backdrop) override;
75
76 // |flutter::DlOpReceiver|
77 void restore() override;
78
79 // |flutter::DlOpReceiver|
80 void translate(SkScalar tx, SkScalar ty) override;
81
82 // |flutter::DlOpReceiver|
83 void scale(SkScalar sx, SkScalar sy) override;
84
85 // |flutter::DlOpReceiver|
86 void rotate(SkScalar degrees) override;
87
88 // |flutter::DlOpReceiver|
89 void skew(SkScalar sx, SkScalar sy) override;
90
91 // |flutter::DlOpReceiver|
93 SkScalar mxy,
94 SkScalar mxt,
95 SkScalar myx,
96 SkScalar myy,
97 SkScalar myt) override;
98
99 // |flutter::DlOpReceiver|
101 SkScalar mxy,
102 SkScalar mxz,
103 SkScalar mxt,
104 SkScalar myx,
105 SkScalar myy,
106 SkScalar myz,
107 SkScalar myt,
108 SkScalar mzx,
109 SkScalar mzy,
110 SkScalar mzz,
111 SkScalar mzt,
112 SkScalar mwx,
113 SkScalar mwy,
114 SkScalar mwz,
115 SkScalar mwt) override;
116
117 // |flutter::DlOpReceiver|
118 void transformReset() override;
119
120 // |flutter::DlOpReceiver|
121 void clipRect(const SkRect& rect, ClipOp clip_op, bool is_aa) override;
122
123 // |flutter::DlOpReceiver|
124 void clipRRect(const SkRRect& rrect, ClipOp clip_op, bool is_aa) override;
125
126 // |flutter::DlOpReceiver|
127 void clipPath(const SkPath& path, ClipOp clip_op, bool is_aa) override;
128
129 // |flutter::DlOpReceiver|
130 void clipPath(const CacheablePath& cache,
131 ClipOp clip_op,
132 bool is_aa) override;
133
134 // |flutter::DlOpReceiver|
136
137 // |flutter::DlOpReceiver|
138 void drawPaint() override;
139
140 // |flutter::DlOpReceiver|
141 void drawLine(const SkPoint& p0, const SkPoint& p1) override;
142
143 // |flutter::DlOpReceiver|
144 void drawRect(const SkRect& rect) override;
145
146 // |flutter::DlOpReceiver|
147 void drawOval(const SkRect& bounds) override;
148
149 // |flutter::DlOpReceiver|
150 void drawCircle(const SkPoint& center, SkScalar radius) override;
151
152 // |flutter::DlOpReceiver|
153 void drawRRect(const SkRRect& rrect) override;
154
155 // |flutter::DlOpReceiver|
156 void drawDRRect(const SkRRect& outer, const SkRRect& inner) override;
157
158 // |flutter::DlOpReceiver|
159 void drawPath(const SkPath& path) override;
160
161 // |flutter::DlOpReceiver|
162 void drawPath(const CacheablePath& cache) override;
163
164 // |flutter::DlOpReceiver|
165 void drawArc(const SkRect& oval_bounds,
166 SkScalar start_degrees,
167 SkScalar sweep_degrees,
168 bool use_center) override;
169
170 // |flutter::DlOpReceiver|
171 void drawPoints(PointMode mode,
172 uint32_t count,
173 const SkPoint points[]) override;
174
175 // |flutter::DlOpReceiver|
176 void drawVertices(const flutter::DlVertices* vertices,
177 flutter::DlBlendMode dl_mode) override;
178
179 // |flutter::DlOpReceiver|
181 const SkPoint point,
183 bool render_with_attributes) override;
184
185 // |flutter::DlOpReceiver|
187 const SkRect& src,
188 const SkRect& dst,
190 bool render_with_attributes,
191 SrcRectConstraint constraint) override;
192
193 // |flutter::DlOpReceiver|
195 const SkIRect& center,
196 const SkRect& dst,
198 bool render_with_attributes) override;
199
200 // |flutter::DlOpReceiver|
201 void drawAtlas(const sk_sp<flutter::DlImage> atlas,
202 const SkRSXform xform[],
203 const SkRect tex[],
204 const flutter::DlColor colors[],
205 int count,
208 const SkRect* cull_rect,
209 bool render_with_attributes) override;
210
211 // |flutter::DlOpReceiver|
212 void drawDisplayList(const sk_sp<flutter::DisplayList> display_list,
213 SkScalar opacity) override;
214
215 // |flutter::DlOpReceiver|
216 void drawTextBlob(const sk_sp<SkTextBlob> blob,
217 SkScalar x,
218 SkScalar y) override;
219
220 // |flutter::DlOpReceiver|
221 void drawTextFrame(const std::shared_ptr<impeller::TextFrame>& text_frame,
222 SkScalar x,
223 SkScalar y) override;
224
225 // |flutter::DlOpReceiver|
226 void drawShadow(const SkPath& path,
228 const SkScalar elevation,
229 bool transparent_occluder,
230 SkScalar dpr) override;
231
232 // |flutter::DlOpReceiver|
233 void drawShadow(const CacheablePath& cache,
235 const SkScalar elevation,
236 bool transparent_occluder,
237 SkScalar dpr) override;
238
239 virtual Canvas& GetCanvas() = 0;
240
241 private:
242 Paint paint_;
243 Matrix initial_matrix_;
244
245 static const Path& GetOrCachePath(const CacheablePath& cache);
246
247 static void SimplifyOrDrawPath(Canvas& canvas,
248 const CacheablePath& cache,
249 const Paint& paint);
250};
251
253 public:
255
256 explicit DlDispatcher(IRect cull_rect);
257
258 explicit DlDispatcher(Rect cull_rect);
259
260 ~DlDispatcher() = default;
261
262 // |flutter::DlOpReceiver|
263 void save() override {
264 // This dispatcher is used from test cases that might not supply
265 // a content_depth parameter. Since this dispatcher doesn't use
266 // the value, we just pass through a 0.
268 }
270
271 // |flutter::DlOpReceiver|
272 void saveLayer(const SkRect& bounds,
274 const flutter::DlImageFilter* backdrop) override {
275 // This dispatcher is used from test cases that might not supply
276 // a content_depth parameter. Since this dispatcher doesn't use
277 // the value, we just pass through a 0.
278 DlDispatcherBase::saveLayer(bounds, options, 0u, backdrop);
279 }
281
282 private:
283 Canvas canvas_;
284
285 Canvas& GetCanvas() override;
286};
287
289 public:
291 RenderTarget& render_target,
292 IRect cull_rect);
293
295
296 // |flutter::DlOpReceiver|
297 void save() override {
298 // This dispatcher should never be used with the save() variant
299 // that does not include the content_depth parameter.
301 }
303
304 // |flutter::DlOpReceiver|
305 void saveLayer(const SkRect& bounds,
307 const flutter::DlImageFilter* backdrop) override {
308 // This dispatcher should never be used with the saveLayer() variant
309 // that does not include the content_depth parameter.
311 }
313
314 void FinishRecording() { canvas_.EndReplay(); }
315
316 private:
317 ExperimentalCanvas canvas_;
318
319 Canvas& GetCanvas() override;
320};
321
322/// Performs a first pass over the display list to collect all text frames.
326 public:
327 TextFrameDispatcher(const ContentContext& renderer,
328 const Matrix& initial_matrix);
329 void save() override;
330
331 void saveLayer(const SkRect& bounds,
333 const flutter::DlImageFilter* backdrop) override;
334
335 void restore() override;
336
337 void translate(SkScalar tx, SkScalar ty) override;
338
339 void scale(SkScalar sx, SkScalar sy) override;
340
341 void rotate(SkScalar degrees) override;
342
343 void skew(SkScalar sx, SkScalar sy) override;
344
345 // clang-format off
346 // 2x3 2D affine subset of a 4x4 transform in row major order
347 void transform2DAffine(SkScalar mxx, SkScalar mxy, SkScalar mxt,
348 SkScalar myx, SkScalar myy, SkScalar myt) override;
349
350 // full 4x4 transform in row major order
352 SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt,
353 SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt,
354 SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt,
355 SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) override;
356
357 void transformReset() override;
358
359 void drawTextFrame(const std::shared_ptr<impeller::TextFrame>& text_frame,
360 SkScalar x,
361 SkScalar y) override;
362
363 void drawDisplayList(const sk_sp<flutter::DisplayList> display_list,
364 SkScalar opacity) override;
365
366 private:
367 const ContentContext& renderer_;
368 Matrix matrix_;
369 std::vector<Matrix> stack_;
370};
371
372} // namespace impeller
373
374#endif // FLUTTER_IMPELLER_DISPLAY_LIST_DL_DISPATCHER_H_
const char * options
int count
static const int points[]
SkColor4f color
static SkScalar center(float pos0, float pos1)
Internal API for rendering recorded display lists to backends.
virtual void save()=0
DlCanvas::SrcRectConstraint SrcRectConstraint
DlCanvas::ClipOp ClipOp
DlCanvas::PointMode PointMode
Holds all of the data (both required and optional) for a DisplayList drawVertices call.
Definition dl_vertices.h:71
void transformFullPerspective(SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt, SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt, SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) override
void setImageFilter(const flutter::DlImageFilter *filter) override
void drawVertices(const flutter::DlVertices *vertices, flutter::DlBlendMode dl_mode) override
void drawTextFrame(const std::shared_ptr< impeller::TextFrame > &text_frame, SkScalar x, SkScalar y) override
void setStrokeCap(flutter::DlStrokeCap cap) override
void drawPath(const SkPath &path) override
void saveLayer(const SkRect &bounds, const flutter::SaveLayerOptions &options, uint32_t total_content_depth, const flutter::DlImageFilter *backdrop) override
void setAntiAlias(bool aa) override
void drawPoints(PointMode mode, uint32_t count, const SkPoint points[]) override
void drawLine(const SkPoint &p0, const SkPoint &p1) override
bool PrefersImpellerPaths() const override
void clipRect(const SkRect &rect, ClipOp clip_op, bool is_aa) override
void drawOval(const SkRect &bounds) override
void drawCircle(const SkPoint &center, SkScalar radius) override
void setStrokeJoin(flutter::DlStrokeJoin join) override
void setStrokeWidth(SkScalar width) override
void setColorFilter(const flutter::DlColorFilter *filter) override
void translate(SkScalar tx, SkScalar ty) override
void setDrawStyle(flutter::DlDrawStyle style) override
void clipRRect(const SkRRect &rrect, ClipOp clip_op, bool is_aa) override
void drawShadow(const SkPath &path, const flutter::DlColor color, const SkScalar elevation, bool transparent_occluder, SkScalar dpr) override
void setStrokeMiter(SkScalar limit) override
void setPathEffect(const flutter::DlPathEffect *effect) override
void skew(SkScalar sx, SkScalar sy) override
void clipPath(const SkPath &path, ClipOp clip_op, bool is_aa) override
void setInvertColors(bool invert) override
void drawImage(const sk_sp< flutter::DlImage > image, const SkPoint point, flutter::DlImageSampling sampling, bool render_with_attributes) override
void drawImageNine(const sk_sp< flutter::DlImage > image, const SkIRect &center, const SkRect &dst, flutter::DlFilterMode filter, bool render_with_attributes) override
void drawAtlas(const sk_sp< flutter::DlImage > atlas, const SkRSXform xform[], const SkRect tex[], const flutter::DlColor colors[], int count, flutter::DlBlendMode mode, flutter::DlImageSampling sampling, const SkRect *cull_rect, bool render_with_attributes) override
void drawDRRect(const SkRRect &outer, const SkRRect &inner) override
void drawRect(const SkRect &rect) override
void drawDisplayList(const sk_sp< flutter::DisplayList > display_list, SkScalar opacity) override
void setColor(flutter::DlColor color) override
void drawImageRect(const sk_sp< flutter::DlImage > image, const SkRect &src, const SkRect &dst, flutter::DlImageSampling sampling, bool render_with_attributes, SrcRectConstraint constraint) override
void setMaskFilter(const flutter::DlMaskFilter *filter) override
virtual Canvas & GetCanvas()=0
void setColorSource(const flutter::DlColorSource *source) override
void setBlendMode(flutter::DlBlendMode mode) override
void drawArc(const SkRect &oval_bounds, SkScalar start_degrees, SkScalar sweep_degrees, bool use_center) override
void drawColor(flutter::DlColor color, flutter::DlBlendMode mode) override
void drawTextBlob(const sk_sp< SkTextBlob > blob, SkScalar x, SkScalar y) override
void transform2DAffine(SkScalar mxx, SkScalar mxy, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myt) override
void rotate(SkScalar degrees) override
void drawRRect(const SkRRect &rrect) override
void saveLayer(const SkRect &bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter *backdrop) override
DlDispatcher()
Subclasses.
Canvas & GetCanvas() override
void saveLayer(const SkRect &bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter *backdrop) override
Paths are lightweight objects that describe a collection of linear, quadratic, or cubic segments....
Definition path.h:51
Performs a first pass over the display list to collect all text frames.
void drawDisplayList(const sk_sp< flutter::DisplayList > display_list, SkScalar opacity) override
void rotate(SkScalar degrees) override
void skew(SkScalar sx, SkScalar sy) override
void saveLayer(const SkRect &bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter *backdrop) override
void transform2DAffine(SkScalar mxx, SkScalar mxy, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myt) override
void transformFullPerspective(SkScalar mxx, SkScalar mxy, SkScalar mxz, SkScalar mxt, SkScalar myx, SkScalar myy, SkScalar myz, SkScalar myt, SkScalar mzx, SkScalar mzy, SkScalar mzz, SkScalar mzt, SkScalar mwx, SkScalar mwy, SkScalar mwz, SkScalar mwt) override
void translate(SkScalar tx, SkScalar ty) override
void drawTextFrame(const std::shared_ptr< impeller::TextFrame > &text_frame, SkScalar x, SkScalar y) override
const Paint & paint
sk_sp< SkImage > image
Definition examples.cpp:29
SkBitmap source
Definition examples.cpp:28
float SkScalar
Definition extension.cpp:12
gboolean invert
#define FML_UNREACHABLE()
Definition logging.h:109
double y
double x
DlStrokeJoin
Definition dl_paint.h:38
DlStrokeCap
Definition dl_paint.h:29
DlDrawStyle
Definition dl_paint.h:20
int32_t width
const Scalar scale
A 4x4 matrix using column-major storage.
Definition matrix.h:37