diff --git a/src/renderer/gl_engine/tvgGlRenderer.cpp b/src/renderer/gl_engine/tvgGlRenderer.cpp index f6e0b2c1..ab2e8918 100644 --- a/src/renderer/gl_engine/tvgGlRenderer.cpp +++ b/src/renderer/gl_engine/tvgGlRenderer.cpp @@ -864,7 +864,7 @@ bool GlRenderer::sync() RenderRegion GlRenderer::region(RenderData data) { - if (currentPass()->isEmpty()) return {}; + if (!data || currentPass()->isEmpty()) return {}; auto shape = reinterpret_cast(data); auto bounds = shape->geometry.getBounds(); diff --git a/src/renderer/sw_engine/tvgSwRenderer.cpp b/src/renderer/sw_engine/tvgSwRenderer.cpp index d6d8e28b..b7429b7a 100644 --- a/src/renderer/sw_engine/tvgSwRenderer.cpp +++ b/src/renderer/sw_engine/tvgSwRenderer.cpp @@ -50,7 +50,6 @@ struct SwTask : Task const RenderRegion& bounds() { - //Can we skip the synchronization? done(); return bbox; } @@ -488,7 +487,8 @@ bool SwRenderer::blend(BlendMethod method) RenderRegion SwRenderer::region(RenderData data) { - return static_cast(data)->bounds(); + if (data) return static_cast(data)->bounds(); + return {}; } diff --git a/src/renderer/tvgPaint.h b/src/renderer/tvgPaint.h index 3070178d..05ddbe53 100644 --- a/src/renderer/tvgPaint.h +++ b/src/renderer/tvgPaint.h @@ -120,7 +120,6 @@ namespace tvg uint8_t unrefx(bool free) { if (refCnt > 0) --refCnt; - else TVGERR("RENDERER", "Corrupted Reference Count!"); if (free && refCnt == 0) { delete(paint); diff --git a/src/renderer/tvgPicture.h b/src/renderer/tvgPicture.h index 6c8d280d..ab01d633 100644 --- a/src/renderer/tvgPicture.h +++ b/src/renderer/tvgPicture.h @@ -265,9 +265,8 @@ struct PictureImpl : Picture RenderRegion bounds(RenderMethod* renderer) { - if (impl.rd) return renderer->region(impl.rd); if (vector) return vector->pImpl->bounds(renderer); - return {}; + return renderer->region(impl.rd); } Result load(ImageLoader* loader) diff --git a/src/renderer/tvgShape.h b/src/renderer/tvgShape.h index 378f4c7f..6f494e3d 100644 --- a/src/renderer/tvgShape.h +++ b/src/renderer/tvgShape.h @@ -115,7 +115,6 @@ struct ShapeImpl : Shape RenderRegion bounds(RenderMethod* renderer) { - if (!impl.rd) return {}; return renderer->region(impl.rd); } diff --git a/src/renderer/wg_engine/tvgWgRenderer.cpp b/src/renderer/wg_engine/tvgWgRenderer.cpp index 66ae499a..d1cb1a7c 100644 --- a/src/renderer/wg_engine/tvgWgRenderer.cpp +++ b/src/renderer/wg_engine/tvgWgRenderer.cpp @@ -270,6 +270,7 @@ void WgRenderer::dispose(RenderData data) { RenderRegion WgRenderer::region(RenderData data) { + if (!data) return {}; auto renderData = (WgRenderDataPaint*)data; if (renderData->type() == Type::Shape) { auto& v1 = renderData->aabb.min;