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 45bf996a19
commit 9f08e4755c
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) void WgRenderDataShapePool::free(WgContext& context, WgRenderDataShape* dataShape)
{ {
dataShape->meshGroupShapes.release(context); dataShape->meshGroupShapes.release(context);
dataShape->meshGroupShapesBBox.release(context);
dataShape->meshGroupStrokes.release(context); dataShape->meshGroupStrokes.release(context);
dataShape->meshGroupStrokesBBox.release(context);
mPool.push(dataShape); mPool.push(dataShape);
} }

View file

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