13 subpass_state_.push_back(SubpassState{
25 return subpass_state_.back().clip_coverage.back().coverage;
29 return !subpass_state_.back().clip_coverage.empty();
34 subpass_state_.push_back(SubpassState{
38 .clip_depth = clip_depth},
44 subpass_state_.pop_back();
47 const std::vector<ClipCoverageLayer>
49 return subpass_state_.back().clip_coverage;
55 size_t clip_depth_floor,
56 Point global_pass_position) {
59 auto& subpass_state = GetCurrentSubpassState();
60 switch (global_clip_coverage.
type) {
65 subpass_state.clip_coverage.push_back(
70 FML_DCHECK(subpass_state.clip_coverage.back().clip_depth ==
71 subpass_state.clip_coverage.front().clip_depth +
72 subpass_state.clip_coverage.size() - 1);
74 if (!op.has_value()) {
81 if (subpass_state.clip_coverage.back().clip_depth <=
88 subpass_state.clip_coverage.front().clip_depth;
89 FML_DCHECK(restoration_index < subpass_state.clip_coverage.size());
93 std::optional<Rect> restore_coverage =
94 (restoration_index + 1 < subpass_state.clip_coverage.size())
95 ? subpass_state.clip_coverage[restoration_index + 1].coverage
97 if (restore_coverage.has_value()) {
99 restore_coverage = restore_coverage->Shift(-global_pass_position);
101 subpass_state.clip_coverage.resize(restoration_index + 1);
106 if (subpass_state.clip_coverage.back().coverage.has_value()) {
112 if (!subpass_state.clip_coverage.back().coverage.has_value()) {
117 auto restore_contents =
124 #ifdef IMPELLER_ENABLE_CAPTURE
126 auto element_entity_coverage = entity.
GetCoverage();
127 if (element_entity_coverage.has_value()) {
128 element_entity_coverage =
129 element_entity_coverage->Shift(global_pass_position);
130 entity.
GetCapture().AddRect(
"Coverage", *element_entity_coverage,
138 subpass_state.clip_coverage.back().coverage);
146 std::optional<Rect> clip_coverage) {
147 auto& subpass_state = GetCurrentSubpassState();
152 subpass_state.rendered_clip_entities.push_back(
153 {.entity = entity.
Clone(), .clip_coverage = clip_coverage});
156 if (!subpass_state.rendered_clip_entities.empty()) {
157 subpass_state.rendered_clip_entities.pop_back();
163 EntityPassClipStack::SubpassState&
164 EntityPassClipStack::GetCurrentSubpassState() {
165 return subpass_state_.back();
168 const std::vector<EntityPassClipStack::ReplayResult>&
170 return subpass_state_.back().rendered_clip_entities;