首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >仅当场景数据发生变化时才重新绘制场景

仅当场景数据发生变化时才重新绘制场景
EN

Stack Overflow用户
提问于 2016-05-25 07:55:19
回答 1查看 130关注 0票数 1

我是从优化您的OpenGL ES应用程序的网页上读到的:

只有当场景数据发生变化时才重新绘制场景:在呈现新帧之前,应用程序应该等到场景中的某些内容发生变化。核心动画缓存显示给用户的最后一幅图像,并继续显示,直到出现新的帧。 即使您的数据发生了更改,也不需要以硬件处理命令的速度呈现帧。对于用户来说,较慢但固定的帧速率往往比快速但可变的帧速率更平滑。固定帧速率为每秒30帧足以满足大多数动画,并有助于降低功耗。

据我所知,有一个事件循环继续运行和再现场景。我们只需重写onDrawFrame方法并将呈现代码放在那里。我无法控制何时调用此方法。那么我怎么能“只有当场景数据发生变化时才重新绘制场景”呢?

在我的例子中,只有当用户交互(点击、捏等)时,场景才会发生变化。理想情况下,当用户不与我的场景交互时,我不想渲染,但是这个函数正在不断地被调用。我很困惑。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-25 13:40:36

在最低曝光水平,有一个包含OpenGL的CoreAnimation层类型,CAEAGLLayer.它可以提供一个颜色缓冲区,可用于构造一个框架缓冲区对象,您可以在您想要的时候绘制该对象,并在您希望的时候呈现它。这就是OpenGL在iOS中的全部流程:当您需要时绘制,在需要时呈现。

然后,该层具有场景的像素副本。正常的核心动画规则适用,所以你从来没有自动要求重新绘制。完整的构图,转换,核心动画,等等,都可以在没有任何工作的情况下发生。

通常的做法是手动或仅仅利用一个CADisplayLink构造来连接一个定时器,通常是一个GLKit。在这种情况下,您试图产生一个帧每计时器滴答。苹果公司建议,将计时器运行到刷新速度的一半是可以接受的,如果你醒来执行一次抽签,意识到你只是在绘制与上次完全相同的画面,一点也不费事。理想的情况下,完全停止计时器,如果你有足够的远见。

根据评论,onDrawFrame的措辞不像目标C或Swift方法,也不是由苹果提供的库提供的。不管是谁发布的--想必是为了让安卓的作者看起来很熟悉--都需要对适当的行为负责。

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

https://stackoverflow.com/questions/37431007

复制
相关文章

相似问题

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