wg_engine: clear bbox mesh lists

when cleaning the geometry of an object, it is also necessary to clean the bounding boxes and store them in the pool
This commit is contained in:
Sergii Liebodkin 2024-06-12 16:45:23 +03:00 committed by Hermet Park
parent 41ffcf2bdf
commit 23d50fcda5
2 changed files with 6 additions and 3 deletions

View file

@ -388,7 +388,9 @@ WgRenderDataShape* WgRenderDataShapePool::allocate(WgContext& context)
void WgRenderDataShapePool::free(WgContext& context, WgRenderDataShape* dataShape)
{
dataShape->meshGroupShapes.release(context);
dataShape->meshGroupShapesBBox.release(context);
dataShape->meshGroupStrokes.release(context);
dataShape->meshGroupStrokesBBox.release(context);
mPool.push(dataShape);
}

View file

@ -74,13 +74,14 @@ RenderData WgRenderer::prepare(const RenderShape& rshape, RenderData data, const
auto renderDataShape = (WgRenderDataShape*)data;
if (!renderDataShape)
renderDataShape = mRenderDataShapePool.allocate(mContext);
// update geometry
if (flags & (RenderUpdateFlag::Path | RenderUpdateFlag::Stroke))
if ((!data) || (flags & (RenderUpdateFlag::Path | RenderUpdateFlag::Stroke))) {
renderDataShape->updateMeshes(mContext, rshape);
}
// update paint settings
if (flags & (RenderUpdateFlag::Transform | RenderUpdateFlag::Blend)) {
if ((!data) || (flags & (RenderUpdateFlag::Transform | RenderUpdateFlag::Blend))) {
WgShaderTypeMat4x4f modelMat(transform);
WgShaderTypeBlendSettings blendSettings(mTargetSurface.cs, opacity);
renderDataShape->bindGroupPaint.initialize(mContext.device, mContext.queue, modelMat, blendSettings);