0

我刚刚开始使用 OpenGL ES,主要是在 iPad 上,并注意到一些我无法找到答案的问题。首先,我尝试在同一个窗口中使用两个使用不同渲染器的 EAGLView。基本上认为 XCode 中的 OpenGL ES 示例项目,但有两个 EAGLViews 和两个渲染器等。现在这似乎在模拟器中不起作用,它只显示一个视图(它似乎运行渲染代码,但只有一个视图是用 openGL 显示),但是当在设备(使用 iOS 4.2 的 iPad)上运行时,它确实可以工作,至少这会导致下一个问题。

在这两个视图上使用 CADisplayLink 触发对渲染的更新。然而,这确实会导致一些问题。大多数情况下,片刻之后,其中一个视图的更新停止,其 CADisplayLink 停止触发。这只发生在设备上而不是模拟器中。它可以通过使用计时器而不是 CADisplayLink 来“修复”,或者在一个视图上使用计时器,在另一个视图上使用 DisplayLink,我想知道是什么原因造成的。我正在创建这样的显示链接(在两个视图中):

self.displayLink = [NSClassFromString(@"CADisplayLink") displayLinkWithTarget:self selector:@selector(drawView:)];

[displayLink setFrameInterval:animationFrameInterval];

[displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

现在最后一个问题是关于我注意到的一件奇怪的事情。当在 iPad 模拟器中运行 Xcode 中提供的 OpenGL ES 示例项目时,视图的宽度调整为低于 760,它不会将任何内容呈现到屏幕上,它只涉及宽度,高度可以以任何方式调整大小。它只发生在模拟器中,而不是设备上。

所以问题基本上是上面提到的事情是错误、功能还是我做错了?

谢谢/j0h

4

1 回答 1

0

我发现一次运行两个 OpenGL 视图的类似问题,每个视图都在单独的 CADisplayLink 上运行,两者都运行 forMode: NSDefaultRunLoopMode。在运行 iOS 5.1 的 iPhone 4S 上进行测试时,除了退出 MPMediaPickerController 时,没有任何问题,其中一个视图会停止渲染。但是,在运行 iOS 5.0.1 的第三代 iPod Touch 上,我确实注意到一个或另一个视图会随机停止渲染的问题(由于 CADisplayLink 未触发)。我能够通过为两个视图切换到 NSTimer 来修复它(只为一个或另一个做这件事是行不通的)。将大小调整为 32 的倍数对我来说没有任何区别。

于 2012-06-07T22:50:51.743 回答