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); + } } // 定时器:非阻塞拉取各可见线后台已就绪的新高清纹理换上 → 有新图才重渲。