mirror of
https://gitee.com/openharmony/graphic_graphic_2d
synced 2025-02-17 02:20:59 +00:00
commit
e621ea23e2
@ -35,6 +35,7 @@ namespace OHOS::Rosen::DrawableV2 {
|
||||
RSRenderNodeDrawable::Registrar RSRenderNodeDrawable::instance_;
|
||||
thread_local bool RSRenderNodeDrawable::drawBlurForCache_ = false;
|
||||
thread_local bool RSRenderNodeDrawable::isOpDropped_ = true;
|
||||
thread_local bool RSRenderNodeDrawable::isNeedOffScreenCache_ = false;
|
||||
|
||||
namespace {
|
||||
constexpr int32_t DRAWING_CACHE_MAX_UPDATE_TIME = 3;
|
||||
@ -170,10 +171,13 @@ void RSRenderNodeDrawable::GenerateCacheIfNeed(Drawing::Canvas& canvas, RSRender
|
||||
auto canvasType = curCanvas->GetCacheType();
|
||||
// set canvas type as OFFSCREEN to not draw filter/shadow/filter
|
||||
curCanvas->SetCacheType(RSPaintFilterCanvas::CacheType::OFFSCREEN);
|
||||
bool isNeedOffScreenCacheTemp = isNeedOffScreenCache_;
|
||||
isNeedOffScreenCache_ = true;
|
||||
RS_TRACE_NAME_FMT("UpdateCacheSurface with filter id:%" PRIu64 "", nodeId_);
|
||||
RSRenderNodeDrawableAdapter* root = curDrawingCacheRoot_;
|
||||
curDrawingCacheRoot_ = this;
|
||||
UpdateCacheSurface(canvas, params);
|
||||
isNeedOffScreenCache_ = isNeedOffScreenCacheTemp;
|
||||
curCanvas->SetCacheType(canvasType);
|
||||
curDrawingCacheRoot_ = root;
|
||||
}
|
||||
@ -229,7 +233,7 @@ void RSRenderNodeDrawable::CheckCacheTypeAndDraw(Drawing::Canvas& canvas, const
|
||||
}
|
||||
|
||||
// RSPaintFilterCanvas::CacheType::OFFSCREEN case
|
||||
if (curCanvas->GetCacheType() == RSPaintFilterCanvas::CacheType::OFFSCREEN) {
|
||||
if (isNeedOffScreenCache_) {
|
||||
if (HasFilterOrEffect() && params.GetForegroundFilterCache() == nullptr) {
|
||||
// clip hole for filter/shadow
|
||||
DrawBackgroundWithoutFilterAndEffect(canvas, params);
|
||||
|
@ -206,6 +206,7 @@ private:
|
||||
return isOpincMarkCached_;
|
||||
}
|
||||
bool IsOpincNodeInScreenRect(RSRenderParams& params);
|
||||
static thread_local bool isNeedOffScreenCache_;
|
||||
};
|
||||
} // namespace DrawableV2
|
||||
} // namespace OHOS::Rosen
|
||||
|
@ -504,9 +504,10 @@ HWTEST_F(RSRenderNodeDrawableTest, CheckCacheTypeAndDrawTest, TestSize.Level1)
|
||||
drawable->drawCmdIndex_.shadowIndex_ = 1;
|
||||
drawable->CheckCacheTypeAndDraw(canvas, params);
|
||||
ASSERT_TRUE(drawable->HasFilterOrEffect());
|
||||
curCanvas->SetCacheType(RSPaintFilterCanvas::CacheType::OFFSCREEN);
|
||||
RSRenderNodeDrawable::isNeedOffScreenCache_ = true;
|
||||
params.foregroundFilterCache_ = std::make_shared<RSFilter>();
|
||||
drawable->CheckCacheTypeAndDraw(canvas, params);
|
||||
RSRenderNodeDrawable::isNeedOffScreenCache_ = false;
|
||||
ASSERT_TRUE(params.GetForegroundFilterCache());
|
||||
|
||||
drawable->SetCacheType(DrawableCacheType::NONE);
|
||||
|
Loading…
x
Reference in New Issue
Block a user