mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 05:33:36 +00:00
wg_engine: fix dispose render data in MT environment
Store desposed object in MT-safe list and then despose objects in sync stage
This commit is contained in:
parent
889d1d1fa2
commit
1932107097
2 changed files with 21 additions and 2 deletions
|
@ -50,6 +50,7 @@ void WgRenderer::initialize()
|
|||
|
||||
void WgRenderer::release()
|
||||
{
|
||||
clearDisposes();
|
||||
WgGeometryData::gMath->release();
|
||||
delete WgGeometryData::gMath;
|
||||
mRenderDataShapePool.release(mContext);
|
||||
|
@ -221,15 +222,25 @@ bool WgRenderer::postRender()
|
|||
}
|
||||
|
||||
|
||||
void WgRenderer::dispose(RenderData data)
|
||||
{
|
||||
void WgRenderer::dispose(RenderData data) {
|
||||
auto renderData = (WgRenderDataPaint*)data;
|
||||
if (renderData) {
|
||||
ScopedLock lock(mDisposed.key);
|
||||
mDisposed.renderDatas.push(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void WgRenderer::clearDisposes()
|
||||
{
|
||||
for (uint32_t i = 0; i < mDisposed.renderDatas.count; i++) {
|
||||
auto renderData = (WgRenderDataPaint*)mDisposed.renderDatas[i];
|
||||
if (renderData->type() == Type::Shape)
|
||||
mRenderDataShapePool.free(mContext, (WgRenderDataShape*)renderData);
|
||||
else
|
||||
renderData->release(mContext);
|
||||
}
|
||||
mDisposed.renderDatas.clear();
|
||||
}
|
||||
|
||||
|
||||
|
@ -277,6 +288,7 @@ bool WgRenderer::clear()
|
|||
|
||||
bool WgRenderer::sync()
|
||||
{
|
||||
clearDisposes();
|
||||
WGPUSurfaceTexture backBuffer{};
|
||||
wgpuSurfaceGetCurrentTexture(mContext.surface, &backBuffer);
|
||||
|
||||
|
|
|
@ -88,6 +88,13 @@ private:
|
|||
Surface mTargetSurface;
|
||||
// current blend method
|
||||
BlendMethod mBlendMethod{};
|
||||
|
||||
// disposed resources, they should be released on synced call.
|
||||
struct {
|
||||
Array<RenderData> renderDatas{};
|
||||
Key key;
|
||||
} mDisposed;
|
||||
void clearDisposes();
|
||||
};
|
||||
|
||||
#endif /* _TVG_WG_RENDERER_H_ */
|
||||
|
|
Loading…
Add table
Reference in a new issue