5 #ifndef FLUTTER_IMPELLER_DISPLAY_LIST_DL_DISPATCHER_H_
6 #define FLUTTER_IMPELLER_DISPLAY_LIST_DL_DISPATCHER_H_
11 #include "flutter/display_list/dl_op_receiver.h"
12 #include "flutter/display_list/geometry/dl_geometry_types.h"
13 #include "flutter/display_list/geometry/dl_path.h"
14 #include "flutter/display_list/utils/dl_receiver_utils.h"
15 #include "fml/logging.h"
22 #include "flutter/display_list/image/dl_image.h"
78 void setColor(flutter::DlColor color)
override;
93 void setColorSource(
const flutter::DlColorSource* source)
override;
96 void setColorFilter(
const flutter::DlColorFilter* filter)
override;
105 void setMaskFilter(
const flutter::DlMaskFilter* filter)
override;
108 void setImageFilter(
const flutter::DlImageFilter* filter)
override;
111 void save(uint32_t total_content_depth)
override;
115 const flutter::SaveLayerOptions& options,
116 uint32_t total_content_depth,
117 flutter::DlBlendMode max_content_mode,
118 const flutter::DlImageFilter* backdrop,
119 std::optional<int64_t> backdrop_id)
override;
167 flutter::DlClipOp clip_op,
168 bool is_aa)
override;
172 flutter::DlClipOp clip_op,
173 bool is_aa)
override;
177 flutter::DlClipOp clip_op,
178 bool is_aa)
override;
182 flutter::DlClipOp clip_op,
183 bool is_aa)
override;
187 flutter::DlClipOp clip_op,
188 bool is_aa)
override;
191 void drawColor(flutter::DlColor color, flutter::DlBlendMode mode)
override;
239 void drawVertices(
const std::shared_ptr<flutter::DlVertices>& vertices,
240 flutter::DlBlendMode dl_mode)
override;
243 void drawImage(
const sk_sp<flutter::DlImage> image,
245 flutter::DlImageSampling sampling,
246 bool render_with_attributes)
override;
252 flutter::DlImageSampling sampling,
253 bool render_with_attributes,
254 flutter::DlSrcRectConstraint constraint)
override;
260 flutter::DlFilterMode filter,
261 bool render_with_attributes)
override;
264 void drawAtlas(
const sk_sp<flutter::DlImage> atlas,
267 const flutter::DlColor colors[],
269 flutter::DlBlendMode mode,
270 flutter::DlImageSampling sampling,
272 bool render_with_attributes)
override;
279 void drawText(
const std::shared_ptr<flutter::DlText>& text,
285 const flutter::DlColor color,
287 bool transparent_occluder,
294 std::shared_ptr<Texture>
GetTexture(
const sk_sp<flutter::DlImage>& image);
314 bool has_root_backdrop_filter,
315 flutter::DlBlendMode max_root_blend_mode,
320 void SetBackdropData(std::unordered_map<int64_t, BackdropData> backdrop,
321 size_t backdrop_count);
333 const flutter::SaveLayerOptions options,
334 const flutter::DlImageFilter* backdrop,
335 std::optional<int64_t> backdrop_id)
override {
345 void drawVertices(
const std::shared_ptr<flutter::DlVertices>& vertices,
346 flutter::DlBlendMode dl_mode)
override;
352 Canvas& GetCanvas()
override;
360 public flutter::IgnoreClipDispatchHelper,
361 public flutter::IgnoreDrawDispatchHelper {
364 const Matrix& initial_matrix,
365 const Rect cull_rect);
369 void save()
override;
372 const flutter::SaveLayerOptions options,
373 const flutter::DlImageFilter* backdrop,
374 std::optional<int64_t> backdrop_id)
override;
403 void drawText(
const std::shared_ptr<flutter::DlText>& text,
414 void setColor(flutter::DlColor color)
override;
429 void setImageFilter(
const flutter::DlImageFilter* filter)
override;
431 std::pair<std::unordered_map<int64_t, BackdropData>,
size_t>
435 const Rect GetCurrentLocalCullingBounds()
const;
439 std::vector<Matrix> stack_;
440 std::unordered_map<int64_t, BackdropData> backdrop_data_;
442 std::vector<Rect> cull_rect_state_;
443 bool has_image_filter_ =
false;
444 size_t backdrop_count_ = 0;
450 const sk_sp<flutter::DisplayList>& display_list,
453 bool reset_host_buffer =
true,
454 bool generate_mips =
false,
455 std::optional<PixelFormat> target_pixel_format = std::nullopt);
463 const sk_sp<flutter::DisplayList>& display_list,
465 bool reset_host_buffer,
466 bool is_onscreen =
true);
void saveLayer(const DlRect &bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter *backdrop, std::optional< int64_t > backdrop_id) override
CanvasDlDispatcher(ContentContext &renderer, RenderTarget &render_target, bool is_onscreen, bool has_root_backdrop_filter, flutter::DlBlendMode max_root_blend_mode, IRect32 cull_rect)
void drawVertices(const std::shared_ptr< flutter::DlVertices > &vertices, flutter::DlBlendMode dl_mode) override
void SetBackdropData(std::unordered_map< int64_t, BackdropData > backdrop, size_t backdrop_count)
~CanvasDlDispatcher()=default
void drawLine(const DlPoint &p0, const DlPoint &p1) override
void drawText(const std::shared_ptr< flutter::DlText > &text, DlScalar x, DlScalar y) override
void drawAtlas(const sk_sp< flutter::DlImage > atlas, const RSTransform xform[], const DlRect tex[], const flutter::DlColor colors[], int count, flutter::DlBlendMode mode, flutter::DlImageSampling sampling, const DlRect *cull_rect, bool render_with_attributes) override
void drawPoints(flutter::DlPointMode mode, uint32_t count, const DlPoint points[]) override
virtual Canvas & GetCanvas()=0
void drawDashedLine(const DlPoint &p0, const DlPoint &p1, DlScalar on_length, DlScalar off_length) override
void drawOval(const DlRect &bounds) override
void setImageFilter(const flutter::DlImageFilter *filter) override
void drawPath(const DlPath &path) override
void setStrokeCap(flutter::DlStrokeCap cap) override
void clipOval(const DlRect &bounds, flutter::DlClipOp clip_op, bool is_aa) override
std::shared_ptr< Texture > GetTexture(const sk_sp< flutter::DlImage > &image)
void drawRoundSuperellipse(const DlRoundSuperellipse &rse) override
void clipRoundRect(const DlRoundRect &rrect, flutter::DlClipOp clip_op, bool is_aa) override
void skew(DlScalar sx, DlScalar sy) override
void clipRect(const DlRect &rect, flutter::DlClipOp clip_op, bool is_aa) override
void setAntiAlias(bool aa) override
void transformFullPerspective(DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt) override
void setStrokeWidth(DlScalar width) override
void drawDiffRoundRect(const DlRoundRect &outer, const DlRoundRect &inner) override
void drawRoundRect(const DlRoundRect &rrect) override
void drawPaint() override
void setStrokeJoin(flutter::DlStrokeJoin join) override
void rotate(DlScalar degrees) override
void setColorFilter(const flutter::DlColorFilter *filter) override
void scale(DlScalar sx, DlScalar sy) override
void setDrawStyle(flutter::DlDrawStyle style) override
void drawShadow(const DlPath &path, const flutter::DlColor color, const DlScalar elevation, bool transparent_occluder, DlScalar dpr) override
void drawImage(const sk_sp< flutter::DlImage > image, const DlPoint &point, flutter::DlImageSampling sampling, bool render_with_attributes) override
void clipPath(const DlPath &path, flutter::DlClipOp clip_op, bool is_aa) override
void drawImageRect(const sk_sp< flutter::DlImage > image, const DlRect &src, const DlRect &dst, flutter::DlImageSampling sampling, bool render_with_attributes, flutter::DlSrcRectConstraint constraint) override
void clipRoundSuperellipse(const DlRoundSuperellipse &rse, flutter::DlClipOp clip_op, bool is_aa) override
void drawArc(const DlRect &oval_bounds, DlScalar start_degrees, DlScalar sweep_degrees, bool use_center) override
virtual ~DlDispatcherBase()=default
void saveLayer(const DlRect &bounds, const flutter::SaveLayerOptions &options, uint32_t total_content_depth, flutter::DlBlendMode max_content_mode, const flutter::DlImageFilter *backdrop, std::optional< int64_t > backdrop_id) override
void drawDisplayList(const sk_sp< flutter::DisplayList > display_list, DlScalar opacity) override
void transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) override
void setInvertColors(bool invert) override
virtual const ContentContext & GetContentContext() const =0
void setColor(flutter::DlColor color) override
void save(uint32_t total_content_depth) override
void setStrokeMiter(DlScalar limit) override
void translate(DlScalar tx, DlScalar ty) override
void drawVertices(const std::shared_ptr< flutter::DlVertices > &vertices, flutter::DlBlendMode dl_mode) override
void drawCircle(const DlPoint ¢er, DlScalar radius) override
void setMaskFilter(const flutter::DlMaskFilter *filter) override
void setColorSource(const flutter::DlColorSource *source) override
void drawImageNine(const sk_sp< flutter::DlImage > image, const DlIRect ¢er, const DlRect &dst, flutter::DlFilterMode filter, bool render_with_attributes) override
void transformReset() override
void setBlendMode(flutter::DlBlendMode mode) override
void drawColor(flutter::DlColor color, flutter::DlBlendMode mode) override
void drawRect(const DlRect &rect) override
static void SimplifyOrDrawPath(Canvas &canvas, const DlPath &cache, const Paint &paint)
void setColor(flutter::DlColor color) override
void setStrokeCap(flutter::DlStrokeCap cap) override
void saveLayer(const DlRect &bounds, const flutter::SaveLayerOptions options, const flutter::DlImageFilter *backdrop, std::optional< int64_t > backdrop_id) override
void setDrawStyle(flutter::DlDrawStyle style) override
std::pair< std::unordered_map< int64_t, BackdropData >, size_t > TakeBackdropData()
void rotate(DlScalar degrees) override
void setImageFilter(const flutter::DlImageFilter *filter) override
void setStrokeMiter(DlScalar limit) override
void transformFullPerspective(DlScalar mxx, DlScalar mxy, DlScalar mxz, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myz, DlScalar myt, DlScalar mzx, DlScalar mzy, DlScalar mzz, DlScalar mzt, DlScalar mwx, DlScalar mwy, DlScalar mwz, DlScalar mwt) override
void drawText(const std::shared_ptr< flutter::DlText > &text, DlScalar x, DlScalar y) override
void scale(DlScalar sx, DlScalar sy) override
void translate(DlScalar tx, DlScalar ty) override
void skew(DlScalar sx, DlScalar sy) override
FirstPassDispatcher(const ContentContext &renderer, const Matrix &initial_matrix, const Rect cull_rect)
void drawDisplayList(const sk_sp< flutter::DisplayList > display_list, DlScalar opacity) override
void setStrokeWidth(DlScalar width) override
void setStrokeJoin(flutter::DlStrokeJoin join) override
void transformReset() override
void transform2DAffine(DlScalar mxx, DlScalar mxy, DlScalar mxt, DlScalar myx, DlScalar myy, DlScalar myt) override
std::shared_ptr< Texture > DisplayListToTexture(const sk_sp< flutter::DisplayList > &display_list, ISize size, AiksContext &context, bool reset_host_buffer, bool generate_mips, std::optional< PixelFormat > target_pixel_format)
Render the provided display list to a texture with the given size.
flutter::DlRoundRect DlRoundRect
flutter::DlRoundSuperellipse DlRoundSuperellipse
bool RenderToTarget(ContentContext &context, RenderTarget render_target, const sk_sp< flutter::DisplayList > &display_list, Rect cull_rect, bool reset_host_buffer, bool is_onscreen)
Render the provided display list to the render target.
flutter::DlScalar DlScalar
std::shared_ptr< ContextGLES > context
A 4x4 matrix using column-major storage.
std::vector< Point > points