36 std::shared_ptr<Texture> target,
37 const Matrix& effect_transform) {
39 contents->SetTexture(target);
40 contents->SetLabel(
"Subpass");
43 contents->SetDeferApplyingOpacity(
true);
52 const Matrix& effect_transform)
const {
61 : paint_(
std::move(paint)) {}
102 bool all_can_accept =
true;
103 std::vector<Rect> all_coverages;
105 [&all_coverages, &all_can_accept](
Entity& entity) {
108 all_can_accept = false;
111 auto maybe_coverage = contents->GetCoverage(entity);
112 if (maybe_coverage.has_value()) {
113 auto coverage = maybe_coverage.value();
114 for (const auto& cv : all_coverages) {
115 if (cv.IntersectsWithRect(coverage)) {
116 all_can_accept = false;
120 all_coverages.push_back(coverage);
124 if (had_subpass || !all_can_accept) {
127 auto alpha = paint_.color.alpha;
128 entity_pass->IterateUntilSubpass([&alpha](Entity& entity) {
129 entity.SetInheritedOpacity(alpha);
136 std::shared_ptr<Contents>
137 OpacityPeepholePassDelegate::CreateContentsForSubpassTarget(
138 std::shared_ptr<Texture> target,
139 const Matrix& effect_transform) {
140 auto contents = TextureContents::MakeRect(Rect::MakeSize(target->GetSize()));
141 contents->SetLabel(
"Subpass");
142 contents->SetTexture(target);
143 contents->SetSourceRect(Rect::MakeSize(target->GetSize()));
144 contents->SetOpacity(paint_.color.alpha);
145 contents->SetDeferApplyingOpacity(
true);
147 return paint_.WithFiltersForSubpassTarget(std::move(contents),
152 std::shared_ptr<FilterContents> OpacityPeepholePassDelegate::WithImageFilter(
154 const Matrix& effect_transform)
const {
155 return paint_.WithImageFilter(input, effect_transform,
156 Entity::RenderingMode::kSubpass);