mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +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()
|
||||
{
|
||||
//wgpuSurfaceRelease(surface);
|
||||
wgpuSurfaceRelease(surface);
|
||||
wgpuInstanceRelease(instance);
|
||||
}
|
||||
|
||||
|
|
|
@ -40,7 +40,7 @@ struct WgCanvas::Impl
|
|||
/************************************************************************/
|
||||
|
||||
#ifdef THORVG_WG_RASTER_SUPPORT
|
||||
WgCanvas::WgCanvas() : Canvas(WgRenderer::gen()), pImpl(new Impl)
|
||||
WgCanvas::WgCanvas() : Canvas(WgRenderer::gen()), pImpl(nullptr)
|
||||
#else
|
||||
WgCanvas::WgCanvas() : Canvas(nullptr), pImpl(nullptr)
|
||||
#endif
|
||||
|
|
|
@ -60,6 +60,7 @@ void WgContext::release()
|
|||
releaseSampler(samplerLinearRepeat);
|
||||
releaseSampler(samplerNearestRepeat);
|
||||
releaseBuffer(bufferIndexFan);
|
||||
releaseQueue(queue);
|
||||
}
|
||||
|
||||
|
||||
|
@ -258,3 +259,11 @@ void WgContext::releaseBuffer(WGPUBuffer& buffer)
|
|||
buffer = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
void WgContext::releaseQueue(WGPUQueue queue)
|
||||
{
|
||||
if (queue) {
|
||||
wgpuQueueRelease(queue);
|
||||
queue = nullptr;
|
||||
}
|
||||
}
|
|
@ -63,6 +63,7 @@ struct WgContext {
|
|||
void releaseTextureView(WGPUTextureView& textureView);
|
||||
void releaseTexture(WGPUTexture& texture);
|
||||
void releaseSampler(WGPUSampler& sampler);
|
||||
void releaseQueue(WGPUQueue queue);
|
||||
|
||||
// create buffer objects (return true, if buffer handle was changed)
|
||||
bool allocateBufferUniform(WGPUBuffer& buffer, const void* data, uint64_t size);
|
||||
|
|
|
@ -59,6 +59,7 @@ void WgRenderer::release()
|
|||
adapter = nullptr;
|
||||
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()
|
||||
{
|
||||
disposeObjects();
|
||||
if (!surface) return false;
|
||||
// get current texture
|
||||
WGPUSurfaceTexture surfaceTexture{};
|
||||
|
||||
releaseSurfaceTexture();
|
||||
|
||||
wgpuSurfaceGetCurrentTexture(surface, &surfaceTexture);
|
||||
|
||||
WGPUTextureView dstView = mContext.createTextureView(surfaceTexture.texture);
|
||||
|
||||
// create command encoder
|
||||
|
|
|
@ -67,6 +67,9 @@ private:
|
|||
void initialize();
|
||||
void release();
|
||||
void disposeObjects();
|
||||
void releaseSurfaceTexture();
|
||||
|
||||
WGPUSurfaceTexture surfaceTexture{};
|
||||
|
||||
WGPUCommandEncoder mCommandEncoder{};
|
||||
WgRenderDataShapePool mRenderDataShapePool;
|
||||
|
|
Loading…
Add table
Reference in a new issue