mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 05:33:36 +00:00
wg_engine: fixed resource leaks
issue: https://github.com/thorvg/thorvg/issues/2808
This commit is contained in:
parent
1b599d82c4
commit
a72ed0ddfa
6 changed files with 29 additions and 4 deletions
|
@ -435,7 +435,7 @@ struct WgWindow : Window
|
||||||
|
|
||||||
virtual ~WgWindow()
|
virtual ~WgWindow()
|
||||||
{
|
{
|
||||||
//wgpuSurfaceRelease(surface);
|
wgpuSurfaceRelease(surface);
|
||||||
wgpuInstanceRelease(instance);
|
wgpuInstanceRelease(instance);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,7 @@ struct WgCanvas::Impl
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
#ifdef THORVG_WG_RASTER_SUPPORT
|
#ifdef THORVG_WG_RASTER_SUPPORT
|
||||||
WgCanvas::WgCanvas() : Canvas(WgRenderer::gen()), pImpl(new Impl)
|
WgCanvas::WgCanvas() : Canvas(WgRenderer::gen()), pImpl(nullptr)
|
||||||
#else
|
#else
|
||||||
WgCanvas::WgCanvas() : Canvas(nullptr), pImpl(nullptr)
|
WgCanvas::WgCanvas() : Canvas(nullptr), pImpl(nullptr)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -60,6 +60,7 @@ void WgContext::release()
|
||||||
releaseSampler(samplerLinearRepeat);
|
releaseSampler(samplerLinearRepeat);
|
||||||
releaseSampler(samplerNearestRepeat);
|
releaseSampler(samplerNearestRepeat);
|
||||||
releaseBuffer(bufferIndexFan);
|
releaseBuffer(bufferIndexFan);
|
||||||
|
releaseQueue(queue);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -258,3 +259,11 @@ void WgContext::releaseBuffer(WGPUBuffer& buffer)
|
||||||
buffer = nullptr;
|
buffer = nullptr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WgContext::releaseQueue(WGPUQueue queue)
|
||||||
|
{
|
||||||
|
if (queue) {
|
||||||
|
wgpuQueueRelease(queue);
|
||||||
|
queue = nullptr;
|
||||||
|
}
|
||||||
|
}
|
|
@ -63,6 +63,7 @@ struct WgContext {
|
||||||
void releaseTextureView(WGPUTextureView& textureView);
|
void releaseTextureView(WGPUTextureView& textureView);
|
||||||
void releaseTexture(WGPUTexture& texture);
|
void releaseTexture(WGPUTexture& texture);
|
||||||
void releaseSampler(WGPUSampler& sampler);
|
void releaseSampler(WGPUSampler& sampler);
|
||||||
|
void releaseQueue(WGPUQueue queue);
|
||||||
|
|
||||||
// create buffer objects (return true, if buffer handle was changed)
|
// create buffer objects (return true, if buffer handle was changed)
|
||||||
bool allocateBufferUniform(WGPUBuffer& buffer, const void* data, uint64_t size);
|
bool allocateBufferUniform(WGPUBuffer& buffer, const void* data, uint64_t size);
|
||||||
|
|
|
@ -59,6 +59,7 @@ void WgRenderer::release()
|
||||||
adapter = nullptr;
|
adapter = nullptr;
|
||||||
gpuOwner = false;
|
gpuOwner = false;
|
||||||
}
|
}
|
||||||
|
releaseSurfaceTexture();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -247,13 +248,24 @@ bool WgRenderer::clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void WgRenderer::releaseSurfaceTexture()
|
||||||
|
{
|
||||||
|
if (surfaceTexture.texture) {
|
||||||
|
wgpuTextureRelease(surfaceTexture.texture);
|
||||||
|
surfaceTexture.texture = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool WgRenderer::sync()
|
bool WgRenderer::sync()
|
||||||
{
|
{
|
||||||
disposeObjects();
|
disposeObjects();
|
||||||
if (!surface) return false;
|
if (!surface) return false;
|
||||||
// get current texture
|
|
||||||
WGPUSurfaceTexture surfaceTexture{};
|
releaseSurfaceTexture();
|
||||||
|
|
||||||
wgpuSurfaceGetCurrentTexture(surface, &surfaceTexture);
|
wgpuSurfaceGetCurrentTexture(surface, &surfaceTexture);
|
||||||
|
|
||||||
WGPUTextureView dstView = mContext.createTextureView(surfaceTexture.texture);
|
WGPUTextureView dstView = mContext.createTextureView(surfaceTexture.texture);
|
||||||
|
|
||||||
// create command encoder
|
// create command encoder
|
||||||
|
|
|
@ -67,6 +67,9 @@ private:
|
||||||
void initialize();
|
void initialize();
|
||||||
void release();
|
void release();
|
||||||
void disposeObjects();
|
void disposeObjects();
|
||||||
|
void releaseSurfaceTexture();
|
||||||
|
|
||||||
|
WGPUSurfaceTexture surfaceTexture{};
|
||||||
|
|
||||||
WGPUCommandEncoder mCommandEncoder{};
|
WGPUCommandEncoder mCommandEncoder{};
|
||||||
WgRenderDataShapePool mRenderDataShapePool;
|
WgRenderDataShapePool mRenderDataShapePool;
|
||||||
|
|
Loading…
Add table
Reference in a new issue