首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SceneKit顶点着色器制服在使用AppleTV remote时没有正确更新

SceneKit顶点着色器制服在使用AppleTV remote时没有正确更新
EN

Stack Overflow用户
提问于 2016-09-28 09:52:39
回答 1查看 196关注 0票数 1

这可能是目前存在的最疯狂的技术问题,我不太希望得到解决办法,但我还是会尝试的。也许有人会有一个建议,我可以尝试,但也许不解释背后的原因,问题,可能会解决它无论如何。

我有一个SpriteKit游戏,我正在为tvOS开发(Xcode 8.0,MacOS10.12),还有一个SK3DNode,它有一个三角形网格,它使用顶点着色器移动顶点。

顶点着色器有几个mat4制服(尽管这并没有多大区别;即使我使用eg,问题也会发生。)vec4制服),用于将数据从代码传递到着色器,并从当前SKScene的更新方法中传递。我使用的是这个三角形网格的SCNMaterial setValue:forKeyPath:。

这很好,而且很顺利,除非有一件事情发生:当我使用AppleTV遥控器的触屏时,更新这些制服的延迟非常严重(就像更新之间可能会有长达半秒的延迟)。

请注意,我没有说游戏滞后。或者甚至渲染三角形网格、顶点着色器或SKScene更新方法都会滞后。这是字面上和明确地更新新的价值观到那些特殊的制服滞后,没有其他。而且只有当我使用AppleTV遥控器的触摸屏时,才能显式地使用。

是的,这个问题是绝对疯狂的。要理解为什么这是绝对疯狂的,请注意:

  • 我特别确定的是,落后的只是更新我制服的价值,而不是别的。例如,如果除了使用它们之外,我还使用系统提供的u_time制服向顶点着色器中的顶点添加了一些运动,这很好。(换句话说,u_time制服正在进行更新,每秒钟更新60次,但我的mat4制服没有更新,这使得从u_time计算出来的运动完全平滑,而我的制服在上面的额外移动确实是滞后的。)同样,屏幕上没有任何其他东西是滞后的。
  • 是的,我正在设置这些制服的值的更新方法每秒被调用60次。我已经用系统的时钟检查过了。这里没有任何延误。这不是说系统跳过调用我的更新函数,而是导致了问题。它每秒被调用60次,我每次都在更新制服(使用SCNMaterial setValue:forKeyPath:)。我已经彻底检查过了。
  • 而且这也不仅仅是几个跳过的帧。如前所述,我们谈论的是至多半秒甚至更长的延误,最坏的情况是;而且常常是在这种情况下反复发生。(当它们最终到达着色器本身时,更新的值将以相等的数量向前跳。)
  • 是的,只有当我使用AppleTV遥控器的触控板时才会发生这种情况。(我不确定在使用按钮时是否会发生这种情况。也许是这样,但在生理上是不可能把它们压得足够快才能产生效果的。在触控板上滑动会导致输入到系统的连续流,这就是发生这种情况的时候。如果我不使用触控板,制服将以每秒60次的速度更新,并且顶点的移动是平滑的。
  • 这个问题不会发生在游戏垫上。尽管游戏垫的模拟棒产生了类似的输入流,但它似乎不会产生相同的效果。

我怀疑SCNMaterial并没有用它从setValue:forKeyPath: method中获得的值更新制服,因为远程的触控板发生了一些变化。我不知道是什么或为什么,这是一个完全疯狂的问题。

当然,这里的问题是,由于游戏是由遥控器控制的,所以它基本上无法使用。顶点着色器不能正常工作。用触控板改变方向,网格失真开始像mad一样滞后。它无法使用。我不知道为什么会发生这种事,也不知道如何解决。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-29 13:58:06

我怀疑当您的问题发生时,SpriteKit呈现线程的运行循环正在“缓慢”运行。要确保将SceneKit更改“尽快”提交到呈现树,可以将更改包装在显式事务中:

代码语言:javascript
运行
复制
[SCNTransaction begin];
[SCNTransaction setAnimationDuration:0];

// your changes

[SCNTransaction commit];

请注意,在编写“SceneKit”应用程序并直接处理SceneKit的回调时,这样做是不必要的。因为SceneKit将确保在SceneKit回调结束时提交您的更改。但是在这里,您将修改SpriteKit的游戏循环中的SceneKit模型。

不过,这是值得一试的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39743955

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档