我正在尝试将大约 4.5kSCNNode
对象添加到场景中。它们的几何形状是两个SCNPlane
s 之一,其材质由CALayer
s 渲染(但我认为这并不重要,每个CALayerDelegate
s 只调用一次,所以这似乎不是问题。)性能很糟糕(< 1fps .)
.showsStatistics
启用后,我看到我正在执行近 3.5k 绘制调用,根据 2017 年的 WWDC 视频,这是我的问题。因此,按照建议,我将所有节点添加到一个父节点并.flattenedClone()
在将其添加到场景的根节点之前调用它。这让我的控制台上出现图形损坏和重复错误:
2019-08-28 14:50:39.122937+0200 Breadboard[867:53252] [SceneKit] Error: C3DProgramHashCodeStoreRegisterProgramForRendererElement - index out of capacity (8192 > 8192)
(“x > 8192”中的x每行加一)
如果我将节点分成两组并.flattenedClone()
在将结果添加到根节点之前调用它们,错误就会消失,但我的绘图调用计数上升到近 5k!
这是怎么回事?为什么调用.flattenedClone()
具有大约 2.5k 个节点的节点不会……使其变平?