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)) {}
101 bool all_can_accept =
true;
102 std::vector<Rect> all_coverages;
104 [&all_coverages, &all_can_accept](
Entity& entity) {
107 all_can_accept = false;
110 auto maybe_coverage = contents->GetCoverage(entity);
111 if (maybe_coverage.has_value()) {
112 auto coverage = maybe_coverage.value();
113 for (const auto& cv : all_coverages) {
114 if (cv.IntersectsWithRect(coverage)) {
115 all_can_accept = false;
119 all_coverages.push_back(coverage);
123 if (had_subpass || !all_can_accept) {
126 auto alpha = paint_.color.alpha;
127 entity_pass->IterateUntilSubpass([&alpha](Entity& entity) {
128 entity.SetInheritedOpacity(alpha);
135 std::shared_ptr<Contents>
136 OpacityPeepholePassDelegate::CreateContentsForSubpassTarget(
137 std::shared_ptr<Texture> target,
138 const Matrix& effect_transform) {
139 auto contents = TextureContents::MakeRect(Rect::MakeSize(target->GetSize()));
140 contents->SetLabel(
"Subpass");
141 contents->SetTexture(target);
142 contents->SetSourceRect(Rect::MakeSize(target->GetSize()));
143 contents->SetOpacity(paint_.color.alpha);
144 contents->SetDeferApplyingOpacity(
true);
146 return paint_.WithFiltersForSubpassTarget(std::move(contents),
151 std::shared_ptr<FilterContents> OpacityPeepholePassDelegate::WithImageFilter(
153 const Matrix& effect_transform)
const {
154 return paint_.WithImageFilter(input, effect_transform,
155 Entity::RenderingMode::kSubpass);