【发布时间】:2020-01-01 17:18:31
【问题描述】:
我正在尝试将大约 4.5k SCNNode 对象添加到场景中。它们的几何形状是两个SCNPlanes 之一,其材质由CALayers 渲染(但我认为这并不重要,CALayerDelegates 每个只调用一次,所以这似乎不是问题。)性能很糟糕(
启用.showsStatistics 后,我发现我正在执行近3.5k 次绘图调用,根据this WWDC video from 2017,这是我的问题。因此,按照建议,我将所有节点添加到一个父节点并在其上调用.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!
发生了什么事?为什么在具有大约 2.5k 个节点的节点上调用 .flattenedClone() 不会……将其展平?
【问题讨论】:
标签: performance scenekit scnnode scngeometry