@@ -43,7 +43,7 @@ void EntityPass::SetDelegate(std::unique_ptr<EntityPassDelegate> delegate) {
43
43
44
44
void EntityPass::AddEntity (Entity entity) {
45
45
if (entity.GetBlendMode () > Entity::kLastPipelineBlendMode ) {
46
- blend_reads_from_pass_texture_ += 1 ;
46
+ advanced_blend_reads_from_pass_texture_ += 1 ;
47
47
}
48
48
elements_.emplace_back (std::move (entity));
49
49
}
@@ -131,10 +131,10 @@ EntityPass* EntityPass::AddSubpass(std::unique_ptr<EntityPass> pass) {
131
131
pass->superpass_ = this ;
132
132
133
133
if (pass->backdrop_filter_proc_ .has_value ()) {
134
- filter_reads_from_pass_texture_ += 1 ;
134
+ backdrop_filter_reads_from_pass_texture_ += 1 ;
135
135
}
136
136
if (pass->blend_mode_ > Entity::kLastPipelineBlendMode ) {
137
- blend_reads_from_pass_texture_ += 1 ;
137
+ advanced_blend_reads_from_pass_texture_ += 1 ;
138
138
}
139
139
140
140
auto subpass_pointer = pass.get ();
@@ -190,15 +190,16 @@ static RenderTarget CreateRenderTarget(ContentContext& renderer,
190
190
);
191
191
}
192
192
193
- uint32_t EntityPass::ComputeTotalReads (ContentContext& renderer) const {
193
+ uint32_t EntityPass::GetTotalPassReads (ContentContext& renderer) const {
194
194
return renderer.GetDeviceCapabilities ().SupportsFramebufferFetch ()
195
- ? filter_reads_from_pass_texture_
196
- : filter_reads_from_pass_texture_ + blend_reads_from_pass_texture_;
195
+ ? backdrop_filter_reads_from_pass_texture_
196
+ : backdrop_filter_reads_from_pass_texture_ +
197
+ advanced_blend_reads_from_pass_texture_;
197
198
}
198
199
199
200
bool EntityPass::Render (ContentContext& renderer,
200
201
const RenderTarget& render_target) const {
201
- if (ComputeTotalReads (renderer) > 0 ) {
202
+ if (GetTotalPassReads (renderer) > 0 ) {
202
203
auto offscreen_target =
203
204
CreateRenderTarget (renderer, render_target.GetRenderTargetSize (), true );
204
205
if (!OnRender (renderer, offscreen_target.GetRenderTargetSize (),
@@ -329,33 +330,25 @@ EntityPass::EntityResult EntityPass::GetEntityForElement(
329
330
if (backdrop_coverage.has_value ()) {
330
331
backdrop_coverage->origin += position;
331
332
332
- if (subpass_coverage.has_value ()) {
333
- subpass_coverage = subpass_coverage->Union (backdrop_coverage.value ());
334
- } else {
335
- subpass_coverage = backdrop_coverage;
336
- }
333
+ subpass_coverage =
334
+ subpass_coverage.has_value ()
335
+ ? subpass_coverage->Union (backdrop_coverage.value ())
336
+ : backdrop_coverage;
337
337
}
338
338
}
339
339
340
- if (subpass_coverage.has_value ()) {
341
- subpass_coverage =
342
- subpass_coverage->Intersection (Rect::MakeSize (root_pass_size));
343
- }
344
-
345
- if (!subpass_coverage.has_value ()) {
340
+ if (!subpass_coverage.has_value () || subpass_coverage->size .IsEmpty ()) {
341
+ // The subpass doesn't contain anything visible, so skip it.
346
342
return EntityPass::EntityResult::Skip ();
347
343
}
348
344
349
- if (subpass_coverage->size .IsEmpty ()) {
350
- // It is not an error to have an empty subpass. But subpasses that can't
351
- // create their intermediates must trip errors.
352
- return EntityPass::EntityResult::Skip ();
353
- }
345
+ subpass_coverage =
346
+ subpass_coverage->Intersection (Rect::MakeSize (root_pass_size));
354
347
355
348
auto subpass_target =
356
349
CreateRenderTarget (renderer, //
357
350
ISize (subpass_coverage->size ), //
358
- subpass->ComputeTotalReads (renderer) > 0 );
351
+ subpass->GetTotalPassReads (renderer) > 0 );
359
352
360
353
auto subpass_texture = subpass_target.GetRenderTargetTexture ();
361
354
@@ -418,7 +411,7 @@ bool EntityPass::OnRender(ContentContext& renderer,
418
411
419
412
auto context = renderer.GetContext ();
420
413
InlinePassContext pass_context (context, render_target,
421
- ComputeTotalReads (renderer),
414
+ GetTotalPassReads (renderer),
422
415
std::move (collapsed_parent_pass));
423
416
if (!pass_context.IsValid ()) {
424
417
return false ;
0 commit comments