diff --git a/impeller/entity/contents/clip_contents.cc b/impeller/entity/contents/clip_contents.cc index 8779ab9b44a49..514d42f5f062f 100644 --- a/impeller/entity/contents/clip_contents.cc +++ b/impeller/entity/contents/clip_contents.cc @@ -62,9 +62,8 @@ Contents::ClipCoverage ClipContents::GetClipCoverage( FML_UNREACHABLE(); } -bool ClipContents::ShouldRender( - const Entity& entity, - const std::optional& clip_coverage) const { +bool ClipContents::ShouldRender(const Entity& entity, + const std::optional clip_coverage) const { return true; } @@ -161,7 +160,7 @@ Contents::ClipCoverage ClipRestoreContents::GetClipCoverage( bool ClipRestoreContents::ShouldRender( const Entity& entity, - const std::optional& clip_coverage) const { + const std::optional clip_coverage) const { return true; } diff --git a/impeller/entity/contents/clip_contents.h b/impeller/entity/contents/clip_contents.h index 410e1a7c2ae2f..eaf156b018ecd 100644 --- a/impeller/entity/contents/clip_contents.h +++ b/impeller/entity/contents/clip_contents.h @@ -35,7 +35,7 @@ class ClipContents final : public Contents { // |Contents| bool ShouldRender(const Entity& entity, - const std::optional& clip_coverage) const override; + const std::optional clip_coverage) const override; // |Contents| bool Render(const ContentContext& renderer, @@ -78,7 +78,7 @@ class ClipRestoreContents final : public Contents { // |Contents| bool ShouldRender(const Entity& entity, - const std::optional& clip_coverage) const override; + const std::optional clip_coverage) const override; // |Contents| bool Render(const ContentContext& renderer, diff --git a/impeller/entity/contents/contents.cc b/impeller/entity/contents/contents.cc index 06178fb601038..58efcf779815e 100644 --- a/impeller/entity/contents/contents.cc +++ b/impeller/entity/contents/contents.cc @@ -131,11 +131,10 @@ bool Contents::ApplyColorFilter( } bool Contents::ShouldRender(const Entity& entity, - const std::optional& clip_coverage) const { + const std::optional clip_coverage) const { if (!clip_coverage.has_value()) { return false; } - auto coverage = GetCoverage(entity); if (!coverage.has_value()) { return false; diff --git a/impeller/entity/contents/contents.h b/impeller/entity/contents/contents.h index 9c40846cff690..d1dbb3349beb2 100644 --- a/impeller/entity/contents/contents.h +++ b/impeller/entity/contents/contents.h @@ -123,7 +123,7 @@ class Contents { const std::string& label = "Snapshot") const; virtual bool ShouldRender(const Entity& entity, - const std::optional& clip_coverage) const; + const std::optional clip_coverage) const; //---------------------------------------------------------------------------- /// @brief Return the color source's intrinsic size, if available. diff --git a/impeller/entity/entity.cc b/impeller/entity/entity.cc index 24bf0efa84958..99f74727f04c8 100644 --- a/impeller/entity/entity.cc +++ b/impeller/entity/entity.cc @@ -71,7 +71,11 @@ Contents::ClipCoverage Entity::GetClipCoverage( } bool Entity::ShouldRender(const std::optional& clip_coverage) const { +#ifdef IMPELLER_CONTENT_CULLING return contents_->ShouldRender(*this, clip_coverage); +#else + return true; +#endif // IMPELLER_CONTENT_CULLING } void Entity::SetContents(std::shared_ptr contents) { diff --git a/impeller/entity/entity_unittests.cc b/impeller/entity/entity_unittests.cc index 520f7a1c203b2..be77915983a0a 100644 --- a/impeller/entity/entity_unittests.cc +++ b/impeller/entity/entity_unittests.cc @@ -1605,6 +1605,20 @@ TEST_P(EntityTest, SolidFillShouldRenderIsCorrect) { } } +TEST_P(EntityTest, DoesNotCullEntitiesByDefault) { + auto fill = std::make_shared(); + fill->SetColor(Color::CornflowerBlue()); + fill->SetGeometry( + Geometry::MakeRect(Rect::MakeLTRB(-1000, -1000, -900, -900))); + + Entity entity; + entity.SetContents(fill); + + // Even though the entity is offscreen, this should still render because we do + // not compute the coverage intersection by default. + EXPECT_TRUE(entity.ShouldRender(Rect::MakeLTRB(0, 0, 100, 100))); +} + TEST_P(EntityTest, ClipContentsShouldRenderIsCorrect) { // For clip ops, `ShouldRender` should always return true.