12 subpass_state_.push_back(SubpassState{
24 return subpass_state_.back().clip_coverage.back().coverage;
28 return !subpass_state_.back().clip_coverage.empty();
33 subpass_state_.push_back(SubpassState{
37 .clip_height = clip_height},
43 subpass_state_.pop_back();
46 const std::vector<ClipCoverageLayer>
48 return subpass_state_.back().clip_coverage;
54 size_t clip_height_floor,
55 Point global_pass_position) {
58 auto& subpass_state = GetCurrentSubpassState();
59 switch (global_clip_coverage.
type) {
66 size_t previous_clip_height = 0;
67 if (!subpass_state.clip_coverage.empty()) {
68 previous_clip_height = subpass_state.clip_coverage.back().clip_height;
72 previous_clip_height = clip_height_floor;
75 subpass_state.clip_coverage.push_back(
77 .clip_height = previous_clip_height + 1});
80 FML_DCHECK(subpass_state.clip_coverage.back().clip_height ==
81 subpass_state.clip_coverage.front().clip_height +
82 subpass_state.clip_coverage.size() - 1);
84 if (!op.has_value()) {
95 if (subpass_state.clip_coverage.back().clip_height <= restore_height) {
100 auto restoration_index =
101 restore_height - subpass_state.clip_coverage.front().clip_height;
102 FML_DCHECK(restoration_index < subpass_state.clip_coverage.size());
106 std::optional<Rect> restore_coverage =
107 (restoration_index + 1 < subpass_state.clip_coverage.size())
108 ? subpass_state.clip_coverage[restoration_index + 1].coverage
110 if (restore_coverage.has_value()) {
112 restore_coverage = restore_coverage->Shift(-global_pass_position);
114 subpass_state.clip_coverage.resize(restoration_index + 1);
118 if (subpass_state.clip_coverage.back().coverage.has_value()) {
127 subpass_state.clip_coverage.back().coverage);
135 std::optional<Rect> clip_coverage) {
136 auto& subpass_state = GetCurrentSubpassState();
141 subpass_state.rendered_clip_entities.push_back(
142 {.entity = entity.
Clone(), .clip_coverage = clip_coverage});
145 if (!subpass_state.rendered_clip_entities.empty()) {
146 subpass_state.rendered_clip_entities.pop_back();
152 EntityPassClipStack::SubpassState&
153 EntityPassClipStack::GetCurrentSubpassState() {
154 return subpass_state_.back();
157 const std::vector<EntityPassClipStack::ReplayResult>&
159 return subpass_state_.back().rendered_clip_entities;