@@ -144,7 +144,8 @@ EntityPass* EntityPass::AddSubpass(std::unique_ptr<EntityPass> pass) {
144144
145145static EntityPassTarget CreateRenderTarget (ContentContext& renderer,
146146 ISize size,
147- bool readable) {
147+ bool readable,
148+ const Color& clear_color) {
148149 auto context = renderer.GetContext ();
149150
150151 // / All of the load/store actions are managed by `InlinePassContext` when
@@ -163,7 +164,7 @@ static EntityPassTarget CreateRenderTarget(ContentContext& renderer,
163164 .resolve_storage_mode = StorageMode::kDevicePrivate ,
164165 .load_action = LoadAction::kDontCare ,
165166 .store_action = StoreAction::kMultisampleResolve ,
166- }, // color_attachment_config
167+ . clear_color = clear_color }, // color_attachment_config
167168 RenderTarget::AttachmentConfig{
168169 .storage_mode = readable ? StorageMode::kDevicePrivate
169170 : StorageMode::kDeviceTransient ,
@@ -203,13 +204,18 @@ uint32_t EntityPass::GetTotalPassReads(ContentContext& renderer) const {
203204
204205bool EntityPass::Render (ContentContext& renderer,
205206 const RenderTarget& render_target) const {
207+ if (render_target.GetColorAttachments ().empty ()) {
208+ VALIDATION_LOG << " The root RenderTarget must have a color attachment." ;
209+ return false ;
210+ }
211+
206212 StencilCoverageStack stencil_coverage_stack = {StencilCoverageLayer{
207213 .coverage = Rect::MakeSize (render_target.GetRenderTargetSize ()),
208214 .stencil_depth = 0 }};
209215
210216 if (GetTotalPassReads (renderer) > 0 ) {
211- auto offscreen_target =
212- CreateRenderTarget ( renderer, render_target.GetRenderTargetSize (), true );
217+ auto offscreen_target = CreateRenderTarget (
218+ renderer, render_target.GetRenderTargetSize (), true , clear_color_ );
213219
214220 if (!OnRender (renderer, // renderer
215221 offscreen_target.GetRenderTarget ()
@@ -269,18 +275,25 @@ bool EntityPass::Render(ContentContext& renderer,
269275 return true ;
270276 }
271277
278+ // Set up the clear color of the root pass.
279+ auto color0 = render_target.GetColorAttachments ().find (0 )->second ;
280+ color0.clear_color = clear_color_;
281+
282+ auto root_render_target = render_target;
283+ root_render_target.SetColorAttachment (color0, 0 );
284+
272285 EntityPassTarget pass_target (
273- render_target ,
286+ root_render_target ,
274287 renderer.GetDeviceCapabilities ().SupportsReadFromResolve ());
275288
276- return OnRender ( //
277- renderer, // renderer
278- render_target .GetRenderTargetSize (), // root_pass_size
279- pass_target, // pass_target
280- Point (), // global_pass_position
281- Point (), // local_pass_position
282- 0 , // pass_depth
283- stencil_coverage_stack); // stencil_coverage_stack
289+ return OnRender ( //
290+ renderer, // renderer
291+ root_render_target .GetRenderTargetSize (), // root_pass_size
292+ pass_target, // pass_target
293+ Point (), // global_pass_position
294+ Point (), // local_pass_position
295+ 0 , // pass_depth
296+ stencil_coverage_stack); // stencil_coverage_stack
284297}
285298
286299EntityPass::EntityResult EntityPass::GetEntityForElement (
@@ -386,9 +399,10 @@ EntityPass::EntityResult EntityPass::GetEntityForElement(
386399 subpass_coverage->Intersection (Rect::MakeSize (root_pass_size));
387400
388401 auto subpass_target =
389- CreateRenderTarget (renderer, //
390- ISize (subpass_coverage->size ), //
391- subpass->GetTotalPassReads (renderer) > 0 );
402+ CreateRenderTarget (renderer, //
403+ ISize (subpass_coverage->size ), //
404+ subpass->GetTotalPassReads (renderer) > 0 , //
405+ clear_color_);
392406
393407 auto subpass_texture =
394408 subpass_target.GetRenderTarget ().GetRenderTargetTexture ();
@@ -739,6 +753,14 @@ void EntityPass::SetBlendMode(BlendMode blend_mode) {
739753 cover_whole_screen_ = Entity::IsBlendModeDestructive (blend_mode);
740754}
741755
756+ void EntityPass::SetClearColor (Color clear_color) {
757+ clear_color_ = clear_color;
758+ }
759+
760+ Color EntityPass::GetClearColor () const {
761+ return clear_color_;
762+ }
763+
742764void EntityPass::SetBackdropFilter (std::optional<BackdropFilterProc> proc) {
743765 if (superpass_) {
744766 VALIDATION_LOG << " Backdrop filters cannot be set on EntityPasses that "
0 commit comments