我正在项目中的for循环中生成新的多体植物。如果我多次运行它,我的程序会崩溃并显示错误:
Maximum number of clients reached bad X server connection vtkXOpenGLRenderWindow
我认为错误就在这里:
scene_graph.AddRenderer(renderer_name, MakeRenderEngineVtk(RenderEngineVtkParams()))
我不确定在使用多体实例后如何干净地删除渲染器。有什么想法吗?
谢谢
萨维什
简短回答:您无法从SceneGraph
中删除渲染器。可能是应该解决的缺陷。
更长的答案:
- 不仅仅是注册了渲染器的
SceneGraph
副本,您还可以在分配的每个Context
中获得一个副本。因此,场景图的数量 + 上下文的数量就是您正在燃烧的 OpenGl 上下文数量。 - 现在让我们探索一下你正在做什么,看看是否有更好的方法来实现同样的目标。
- 如果要使用
MultibodyPlant
和SceneGraph
创建大量Diagram
,是否需要为每个渲染器添加渲染器?您的短期解决方案是仅在要使用渲染器时才添加渲染器。 - 更元的问题是你为什么要用
MultibodyPlant
和SceneGraph
创建大量Diagrams
?主要理由是MultibodyPlant
中的模型在图表之间略有不同(因为MultibodyPlant
对您来说没有足够的可变性)。 - 如果事实证明确实有充分的理由创建带有渲染器的所有
Diagram
,那么您需要同时保持多少个活动状态。销毁Context
和Diagram
应该会减少对有限资源的使用。
- 如果要使用