Flutter Engine
The Flutter Engine
Loading...
Searching...
No Matches
experimental_canvas.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_AIKS_EXPERIMENTAL_CANVAS_H_
6#define FLUTTER_IMPELLER_AIKS_EXPERIMENTAL_CANVAS_H_
7
8#include <memory>
9#include <optional>
10#include <vector>
11
14#include "impeller/aiks/paint.h"
17
18namespace impeller {
19
20class ExperimentalCanvas : public Canvas {
21 public:
22 ExperimentalCanvas(ContentContext& renderer, RenderTarget& render_target);
23
25 RenderTarget& render_target,
26 Rect cull_rect);
27
29 RenderTarget& render_target,
30 IRect cull_rect);
31
32 ~ExperimentalCanvas() override = default;
33
34 void Save(uint32_t total_content_depth) override;
35
36 void SaveLayer(const Paint& paint,
37 std::optional<Rect> bounds,
38 const std::shared_ptr<ImageFilter>& backdrop_filter,
39 ContentBoundsPromise bounds_promise,
40 uint32_t total_content_depth) override;
41
42 bool Restore() override;
43
44 void EndReplay() {
45 FML_DCHECK(inline_pass_contexts_.size() == 1u);
46 inline_pass_contexts_.back()->EndPass();
47 render_passes_.clear();
48 inline_pass_contexts_.clear();
49 renderer_.GetRenderTargetCache()->End();
50
51 Reset();
53 }
54
55 void DrawTextFrame(const std::shared_ptr<TextFrame>& text_frame,
56 Point position,
57 const Paint& paint) override;
58
63
64 private:
65 ContentContext& renderer_;
66 RenderTarget& render_target_;
67 std::vector<std::unique_ptr<InlinePassContext>> inline_pass_contexts_;
68 std::vector<std::unique_ptr<EntityPassTarget>> entity_pass_targets_;
69 std::vector<SaveLayerState> save_layer_state_;
70 std::vector<std::shared_ptr<RenderPass>> render_passes_;
71
72 void SetupRenderPass();
73
74 void AddRenderEntityToCurrentPass(Entity entity, bool reuse_depth) override;
75 void AddClipEntityToCurrentPass(Entity entity) override;
76
77 Point GetGlobalPassPosition() {
78 if (save_layer_state_.empty()) {
79 return Point(0, 0);
80 }
81 return save_layer_state_.back().coverage.GetOrigin();
82 }
83
84 ExperimentalCanvas(const ExperimentalCanvas&) = delete;
85
86 ExperimentalCanvas& operator=(const ExperimentalCanvas&) = delete;
87};
88
89} // namespace impeller
90
91#endif // FLUTTER_IMPELLER_AIKS_EXPERIMENTAL_CANVAS_H_
void Initialize(std::optional< Rect > cull_rect)
Definition canvas.cc:164
std::optional< Rect > initial_cull_rect_
Definition canvas.h:188
const std::shared_ptr< RenderTargetAllocator > & GetRenderTargetCache() const
void DrawTextFrame(const std::shared_ptr< TextFrame > &text_frame, Point position, const Paint &paint) override
void SaveLayer(const Paint &paint, std::optional< Rect > bounds, const std::shared_ptr< ImageFilter > &backdrop_filter, ContentBoundsPromise bounds_promise, uint32_t total_content_depth) override
~ExperimentalCanvas() override=default
void Save(uint32_t total_content_depth) override
void AddClipEntityToCurrentPass(Entity entity) override
void AddRenderEntityToCurrentPass(Entity entity, bool reuse_depth) override
const Paint & paint
#define FML_DCHECK(condition)
Definition logging.h:103
TPoint< Scalar > Point
Definition point.h:316
ContentBoundsPromise
Definition entity_pass.h:28