Sprite Kit是在后台渲染还是在主线程上渲染?它是如何工作的?

 芹牵一线 发布于 2023-02-13 16:09

该文档显示了Sprite Kit的简化runloop.

我试图了解他们是如何实现它的.一个SKView呼吁-更新:在SKScene.然后首先评估动作,然后模拟物理,并让子类调整场景.在对场景进行更改后,SKView最终将节点树渲染到屏幕.

我不明白的是细节.Sprite Kit是否通过使用不同的线程或GCD队列将场景计算与场景渲染分离?它是在后台执行所有OpenGL渲染调用,还是在主线程上发生了所有事情?Sprite Kit在后台和主线程之间来回切换,以及如何同步处理场景并渲染场景呢?场景更新花费的时间过长会发生什么?

1 个回答
  • 链接文档中的饼图显示了Sprite Kit的渲染循环.循环的每个部分在主线程上同步执行.OpenGL渲染由渲染循环结束时的SKView执行.

    与任何渲染循环非常相似,如果更新部分花费的时间太长,则会超出帧时间间隔.这将导致帧在下一个vsync上呈现,即帧速率降低.

    渲染本身与GLKit一样执行:渲染循环使用a同步到显示刷新率CADisplayLink,frameInterval属性控制每个渲染循环有多少显示刷新.模型更新完成后,GL状态随后被发送到GPU并被[EAGLContext presentRenderbuffer:]调用以显示SKView渲染缓冲区.循环现在已完成,并且在显示链接触发之前不会再次启动,表示前一帧已呈现,另一帧可以发送到屏幕.

    渲染是否发生在主线程之外没有记录,也不可能知道,但它只是一个实现细节.如果它确实发生在不同的线程上,则整个模型树必须在渲染线程中重复,或者足够的状态,以便可以渲染一个帧,同时为下一帧更新模型.最有可能的是它只是在主线程上同步.如果要在完成渲染之前阻止主线程访问状态,那么锁定将毫无意义,您可以在主线程上进行渲染.

    2023-02-13 16:11 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有