5#ifndef FLUTTER_IMPELLER_ENTITY_ENTITY_PASS_H_
6#define FLUTTER_IMPELLER_ENTITY_ENTITY_PASS_H_
54 using Element = std::variant<Entity, std::unique_ptr<EntityPass>>;
58 const Matrix& effect_transform,
65 void SetDelegate(std::shared_ptr<EntityPassDelegate> delgate);
79 std::optional<Rect> bounds_limit,
101 void PopClips(
size_t num_clips, uint64_t depth);
178 required_mip_count_ = mip_count;
200 std::optional<Rect> coverage_limit)
const;
203 std::optional<Rect> coverage_limit)
const;
206 struct EntityResult {
224 static EntityResult Success(Entity
e) {
return {std::move(
e),
kSuccess}; }
226 static EntityResult Skip() {
return {{},
kSkip}; }
229 bool RenderElement(Entity& element_entity,
230 size_t clip_height_floor,
231 InlinePassContext& pass_context,
234 EntityPassClipStack& clip_coverage_stack,
235 Point global_pass_position)
const;
239 InlinePassContext& pass_context,
240 ISize root_pass_size,
241 Point global_pass_position,
243 EntityPassClipStack& clip_coverage_stack,
244 size_t clip_height_floor)
const;
303 bool OnRender(ContentContext&
renderer,
304 ISize root_pass_size,
305 EntityPassTarget& pass_target,
306 Point global_pass_position,
307 Point local_pass_position,
309 EntityPassClipStack& clip_coverage_stack,
310 size_t clip_height_floor = 0,
311 std::shared_ptr<Contents> backdrop_filter_contents =
nullptr,
312 const std::optional<InlinePassContext::RenderPassResult>&
313 collapsed_parent_pass = std::nullopt)
const;
317 std::vector<Element> elements_;
323 std::vector<size_t> active_clips_;
327 size_t clip_height_ = 0u;
328 uint32_t clip_depth_ = 1u;
330 bool flood_clip_ =
false;
331 std::optional<Rect> bounds_limit_;
333 int32_t required_mip_count_ = 1;
343 bool advanced_blend_reads_from_pass_texture_ =
false;
344 bool backdrop_filter_reads_from_pass_texture_ =
false;
346 bool DoesBackdropGetRead(ContentContext&
renderer)
const;
350 std::shared_ptr<EntityPassDelegate> delegate_ =
static std::unique_ptr< EntityPassDelegate > MakeDefault()
bool IterateUntilSubpass(const std::function< bool(Entity &)> &iterator)
Iterate entities in this pass up until the first subpass is found. This is useful for limiting look-a...
void SetElements(std::vector< Element > elements)
void IterateAllElements(const std::function< bool(Element &)> &iterator)
Iterate all elements (entities and subpasses) in this pass, recursively including elements of child p...
std::variant< Entity, std::unique_ptr< EntityPass > > Element
size_t GetElementCount() const
Return the number of elements on this pass.
void SetRequiredMipCount(int32_t mip_count)
bool GetBoundsLimitMightClipContent() const
Indicates if the bounds limit set using |SetBoundsLimit()| might clip the contents of the pass.
void SetBoundsLimit(std::optional< Rect > bounds_limit, ContentBoundsPromise bounds_promise=ContentBoundsPromise::kUnknown)
Set the bounds limit, which is provided by the user when creating a SaveLayer. This is a hint that al...
Color GetClearColorOrDefault(ISize size=ISize::Infinite()) const
Return the premultiplied clear color of the pass entities.
void SetClipDepth(size_t clip_depth)
void AddEntity(Entity entity)
Add an entity to the current entity pass.
size_t GetClipHeight() const
void SetBackdropFilter(BackdropFilterProc proc)
bool GetBoundsLimitIsSnug() const
Indicates if the bounds limit set using |SetBoundsLimit()| is a reasonably tight estimate of the boun...
std::optional< Rect > GetBoundsLimit() const
Get the bounds limit, which is provided by the user when creating a SaveLayer.
EntityPass * GetSuperpass() const
size_t GetSubpassesDepth() const
void PopClips(size_t num_clips, uint64_t depth)
int32_t GetRequiredMipCount() const
void SetClipHeight(size_t clip_height)
std::optional< Color > GetClearColor(ISize size=ISize::Infinite()) const
Return the premultiplied clear color of the pass entities, if any.
void SetBlendMode(BlendMode blend_mode)
void SetTransform(Matrix transform)
void IterateAllEntities(const std::function< bool(Entity &)> &iterator)
Iterate all entities in this pass, recursively including entities of child passes....
std::optional< Rect > GetSubpassCoverage(const EntityPass &subpass, std::optional< Rect > coverage_limit) const
Computes the coverage of a given subpass. This is used to determine the texture size of a given subpa...
void PopAllClips(uint64_t depth)
EntityPass * AddSubpass(std::unique_ptr< EntityPass > pass)
Appends a given pass as a subpass.
void SetDelegate(std::shared_ptr< EntityPassDelegate > delgate)
bool Render(ContentContext &renderer, const RenderTarget &render_target) const
std::optional< Rect > GetElementsCoverage(std::optional< Rect > coverage_limit) const
void PushClip(Entity entity)
uint32_t GetClipDepth() const
std::function< std::shared_ptr< FilterContents >(FilterInput::Ref, const Matrix &effect_transform, Entity::RenderingMode rendering_mode)> BackdropFilterProc
Dart_NativeFunction function
static TTSTestCase Failure(const TTSTestCase &original)
@ kFailure
Failed to make the egl context for the surface current.
it will be possible to load the file into Perfetto s trace viewer 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
@ kUnknown
The caller makes no claims related to the size of the bounds.
@ kMayClipContents
The caller claims the bounds are a subset of an estimate of the reasonably tight bounds but likely cl...
@ kContainsContents
The caller claims the bounds are a reasonably tight estimate of the coverage of the contents and shou...
SK_API sk_sp< PrecompileColorFilter > Matrix()
static SkColor4f transform(SkColor4f c, SkColorSpace *src, SkColorSpace *dst)
A 4x4 matrix using column-major storage.
static constexpr TSize Infinite()