perf(gpr_poc): view-all 拖动中只视锥裁剪不重建,修转动/缩放thrash卡死
拖动中 viewAllOnInteracting 原每次都提交20条体引擎目标→反复异步重建+上传GPU→ GPU100% thrash→转一下卡死. 改为拖动中只做视锥裁剪(切可见性,便宜)、绝不重建; 重建只在松手EndInteraction触发一次(异步+supersede,快速缩放自动只建最后目标).
This commit is contained in:
parent
f52d38d97b
commit
7de221ddce
|
|
@ -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<ViewAllState*>(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);
|
||||
}
|
||||
}
|
||||
|
||||
// 定时器:非阻塞拉取各可见线后台已就绪的新高清纹理换上 → 有新图才重渲。
|
||||
|
|
|
|||
Loading…
Reference in New Issue