From e8556515005df34e8643b821c9b5df4753a5c769 Mon Sep 17 00:00:00 2001 From: ykcheungab Date: Mon, 29 Jun 2026 10:50:29 +0800 Subject: [PATCH] try to fix wsl open3d crash --- examples/gui/layout.py | 4 ++-- examples/gui/widgets/mesh_viewport.py | 20 ++------------------ 2 files changed, 4 insertions(+), 20 deletions(-) diff --git a/examples/gui/layout.py b/examples/gui/layout.py index e41eb35..85139b0 100644 --- a/examples/gui/layout.py +++ b/examples/gui/layout.py @@ -32,7 +32,7 @@ Performance (3D dashboard; edit DashboardLayout defaults): timer_interval_ms — Qt timer period (16 ≈ 60 Hz tick rate) mesh_render_stride — render 3D mesh every N frames (2 ≈ half mesh cost) chart_update_stride — update force charts every N frames - mesh_async_render — background mesh render (Linux only; Windows uses sync) + mesh_async_render — reserved for future use; mesh rendering currently stays on the UI thread Edit TOP_ROW.slots to reorder or resize panels; set ``enabled=False`` to hide a panel (e.g. arrows). Log sits under charts only (not under mesh). Settings is the rightmost column. @@ -256,7 +256,7 @@ class DashboardLayout: mesh_render_height_px: int = MESH_RENDER_HEIGHT_PX timer_interval_ms: int = 16 - mesh_async_render: bool = True + mesh_async_render: bool = False mesh_render_stride: int = 2 chart_update_stride: int = 2 diff --git a/examples/gui/widgets/mesh_viewport.py b/examples/gui/widgets/mesh_viewport.py index d862955..a3907b7 100644 --- a/examples/gui/widgets/mesh_viewport.py +++ b/examples/gui/widgets/mesh_viewport.py @@ -2,8 +2,6 @@ from __future__ import annotations -import sys - from PyQt5.QtCore import QEvent, Qt from PyQt5.QtGui import QMouseEvent @@ -105,10 +103,6 @@ class MeshViewportWidget(ImagePanel): return self.label.setText("") self._init_renderer(pipeline) - if self._layout.mesh_async_render and sys.platform != "win32": - self._mesh_worker = MeshRenderWorker(self) - self._mesh_worker.rgb_ready.connect(self._on_rgb_ready) - self._mesh_worker.set_renderer(self._renderer) def _init_renderer(self, pipeline) -> None: if not self._enable_3d or pipeline.uv_mesh is None: @@ -156,22 +150,12 @@ class MeshViewportWidget(ImagePanel): self.set_source_pixmap(ndarray_to_pixmap(rgb, bgr=False)) def update_frame(self, frame: FingerFrameView, *, async_render: bool | None = None) -> float: - """Update mesh colors. Returns render wall time (0 when async submit only).""" + """Update mesh colors on the same thread that owns the renderer.""" if not self._enable_3d or self._renderer is None: return 0.0 self._last_frame = frame - use_async = self._layout.mesh_async_render if async_render is None else async_render - if use_async and self._mesh_worker is not None: - self._mesh_worker.submit( - flow=frame.flow, - scalar_map=frame.depth_map, - centroid=frame.centroid, - centroid_found=frame.centroid_found, - fnormal=frame.fnormal, - valid_mask=frame.valid_mask, - ) - return 0.0 + del async_render # Offscreen Open3D renderers are not safe to drive from a QThread. import time