From 7de221ddcea3838e94b041786a324355e66338ae Mon Sep 17 00:00:00 2001 From: gaozheng Date: Thu, 25 Jun 2026 15:40:24 +0800 Subject: [PATCH] =?UTF-8?q?perf(gpr=5Fpoc):=20view-all=20=E6=8B=96?= =?UTF-8?q?=E5=8A=A8=E4=B8=AD=E5=8F=AA=E8=A7=86=E9=94=A5=E8=A3=81=E5=89=AA?= =?UTF-8?q?=E4=B8=8D=E9=87=8D=E5=BB=BA,=E4=BF=AE=E8=BD=AC=E5=8A=A8/?= =?UTF-8?q?=E7=BC=A9=E6=94=BEthrash=E5=8D=A1=E6=AD=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 拖动中 viewAllOnInteracting 原每次都提交20条体引擎目标→反复异步重建+上传GPU→ GPU100% thrash→转一下卡死. 改为拖动中只做视锥裁剪(切可见性,便宜)、绝不重建; 重建只在松手EndInteraction触发一次(异步+supersede,快速缩放自动只建最后目标). --- tools/gpr_poc/main.cpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/tools/gpr_poc/main.cpp b/tools/gpr_poc/main.cpp index 2dcd9fd..fc58e75 100644 --- a/tools/gpr_poc/main.cpp +++ b/tools/gpr_poc/main.cpp @@ -4140,10 +4140,18 @@ void viewAllRefreshFrustum(ViewAllState* st) { } } -// 交互进行中:只重算视锥可见性 + 提交目标(非阻塞),主线程立即继续响应输入。 +// 交互进行中:只做视锥裁剪(便宜,仅切可见性),绝不提交引擎目标/重建纹理。 +// 拖动中频繁提交=20 条体反复重建+上传 GPU→GPU 100% thrash→卡死。拖动只渲已有 +// 纹理(mapper 降采样保流畅);重建只在松手(EndInteraction)触发一次。 void viewAllOnInteracting(vtkObject*, unsigned long, void* clientData, void*) { auto* st = static_cast(clientData); - viewAllRefreshFrustum(st); + double planes[24]; + st->cam->GetFrustumPlanes(st->aspect, planes); + for (PlacedSource& ps : *st->lines) { + const bool outside = aabbOutsideFrustum(ps.worldBounds, planes); + ps.culled = outside; + ps.volume->SetVisibility(outside ? 0 : 1); + } } // 定时器:非阻塞拉取各可见线后台已就绪的新高清纹理换上 → 有新图才重渲。