[英]How do I keep the title of the webpage visible when the navigation bar is hidden, like in iOS Safari?
[英]How do I keep the title bar from causing rendering issues in Metal?
当我绘制任何形状(无论是否有纹理)时,当我将 go 全屏并在我将鼠标移动到顶部时显示标题栏时,它都会闪烁。 它会变得更轻,然后像一瞬间一样变回来。 我不知道实心 colors 是否会发生这种情况,但是当我为顶点着色并绘制渐变或应用纹理时,就会发生这种情况。 这很烦人,即使它很微妙。 我该如何解决?
如何重现:在 Metal 中创建一个形状,或者为顶点着色以创建渐变,或者对其应用纹理,然后使 window 全屏显示。 将 cursor 移动到 window 的顶部。 当标题栏出现时,形状/纹理将短暂地 flash。 我该如何解决?
我正在使用 macOS 1.15 Catalina。
即使使用 Xcode 的示例金属游戏也可以证明这一点。 只需 go 到全屏,显示标题栏,显示和取消显示标题栏时会变得不流畅。
更新:我已经意识到,如果我将绘图代码放在viewDidLoad()
而不是draw()
中,这种行为将会停止。 我怎样才能使它不出错而不必只渲染一帧?
另一个更新:它确实发生在固体 colors 上。
这是一个非常困难的问题,因为我不知道该尝试什么。 这个错误也很难修复,因为它只是偶尔发生。
这个问题也只回答了一半,因为事实证明我设法解决了标题栏阻塞帧率的问题,但白色 flash 仍然存在问题。
看了你的视频,我明白你的问题是什么了。 在您的情况下,UI(Tittle Bar)阻塞了主线程,这是正常行为,因为MTKView呈现发生在主应用程序线程上。 您需要创建自定义金属视图并在后台线程上实现渲染循环。
最好的办法是将此作为错误报告给 Apple。 我试图研究,似乎没有关于这个错误的结果。
我假设您想要修复,但我得到的只是一个解决方法:
当绘图代码仅在viewDidLoad
中运行一次时,它似乎不会发生。 也许你可以把它留在那里,然后手动调用 MetalView 的draw
方法每秒 60 次。 我想出了如何让我所说的工作。 将绘图代码保留在draw
中,但确保将首选帧速率设置为 0。然后每秒手动重绘 60 次。 因为draw
方法自动重绘在这个意义上是错误的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.