From 712bfbae92272ad0e2f9e1049f22cbd0be15cb2a Mon Sep 17 00:00:00 2001 From: 21pages Date: Sat, 11 May 2024 11:11:12 +0800 Subject: [PATCH] fix, not unregister gpu texture when closeSession is false (#8018) Signed-off-by: 21pages --- flutter/lib/models/desktop_render_texture.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/flutter/lib/models/desktop_render_texture.dart b/flutter/lib/models/desktop_render_texture.dart index e2bd8e691..3078115bb 100644 --- a/flutter/lib/models/desktop_render_texture.dart +++ b/flutter/lib/models/desktop_render_texture.dart @@ -102,13 +102,15 @@ class _GpuTexture { } } - destroy(FFI ffi) async { + destroy(bool unregisterTexture, FFI ffi) async { // must stop texture render, render unregistered texture cause crash if (!_destroying && support && _sessionId != null && _textureId != -1) { _destroying = true; - platformFFI.registerGpuTexture(_sessionId!, _display, 0); - // sleep for a while to avoid the texture is used after it's unregistered. - await Future.delayed(Duration(milliseconds: 100)); + if (unregisterTexture) { + platformFFI.registerGpuTexture(_sessionId!, _display, 0); + // sleep for a while to avoid the texture is used after it's unregistered. + await Future.delayed(Duration(milliseconds: 100)); + } await gpuTextureRenderer.unregisterTexture(_textureId); _textureId = -1; _destroying = false; @@ -208,7 +210,7 @@ class TextureModel { _pixelbufferRenderTextures.remove(idx); } if (_gpuRenderTextures.containsKey(idx)) { - _gpuRenderTextures[idx]!.destroy(ffi); + _gpuRenderTextures[idx]!.destroy(true, ffi); _gpuRenderTextures.remove(idx); } } @@ -235,7 +237,7 @@ class TextureModel { await texture.destroy(closeSession, ffi); } for (final texture in _gpuRenderTextures.values) { - await texture.destroy(ffi); + await texture.destroy(closeSession, ffi); } }