gpt4 book ai didi

iPhone OpenGL 第一帧黑色

转载 作者:行者123 更新时间:2023-12-03 19:42:13 26 4
gpt4 key购买 nike

我的应用程序基于 openGL,支持 ES 1.1 和 ES 2.0。

我的 View Controller 有一个 View ,它是 EAGLView 的实例(根据 Apple 的示例代码),该 View 又为 ES 1.1 或 2.0 使用不同的“渲染器”对象(对于使用过 Xcode 示例的人来说几乎是标准的) )。

我使用 CADisplayLink 来更新屏幕。我的目标至少是 iOS 4.0+,所以应该没有问题。

启动时,显示启动图像 (Default.png) 后的第一帧呈现为黑色。中间有一帧令人讨厌的黑色闪烁。

如果在使窗口成为“关键”和“可见”之前,我“伪造”一轮更新/渲染周期(以便也渲染后台缓冲区,而不是空),闪烁会消失,但只会消失使用 ES 2.0 时

我将 kEAGLDrawablePropertyRetainedBacking 设置为 YES,但这两个值似乎都没有任何区别。

使用 ES 1.1 时,闪烁仍然存在。唯一的区别是,如果我在使窗口可见之前执行“刷新”,屏幕将闪烁为我用 glClearColor() 指定的颜色。但如果我不预刷新,闪烁总是黑色的。

我在 Cocos2d 论坛上一次又一次地看到过关于这个问题的讨论,但即使在那里,这个问题似乎总是在每一个新的 hack 出现后再次出现并困扰你。

尽管如此,我使用的是普通 OpenGL ES(不是 Cocos2d 或任何其他库),但无论我如何搜索,都找不到遇到类似问题的人网络...

有什么提示吗?

最佳答案

问题的原因与您所诊断的差不多 - 当相关 View Controller 立即完成加载时(即,当删除 Default.png 图像时),它还没有任何内容。 CADisplayLink 直到该帧结束时才会触发。

我认为正确的做法是进行完全重绘并呈现在 viewDidLoad: 中,因为这就是您要设置不在 NIB 中的 View 位的位置。假设它们是作为单缓冲区或双缓冲区实现的,那么这不应在任一渲染路径中引入帧延迟。

假设还存在其他一些无法诊断的问题,在一种情况下,我有一个应用程序,由于代码的性质超出了我的控制范围(作为跨平台端口),因此无法提前绘制框架。我只是在做粘合代码)。所以我所做的就是在我的第一个 View Controller 顶部添加一个包含 Default.png 的全屏 UIImageView。然后我等待一帧并删除 UIImageView。无论您的渲染循环如何,这都应该有效。

关于iPhone OpenGL 第一帧黑色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5115408/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com