【问题标题】:iPhone/iPad, OpenGL ES, CADisplayLinkiPhone/iPad、OpenGL ES、CADisplayLink
【发布时间】:2011-01-11 13:38:44
【问题描述】:

我刚开始使用 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

【问题讨论】:

  • 对于模拟器,其中一个视图的尺寸是否不是 32 的倍数?如果是这样,您可能会遇到这个问题:stackoverflow.com/questions/4430288/…,这会导致 OpenGL 内容不被渲染。
  • 为什么需要两个 OpenGL ES 层?由于合成:developer.apple.com/library/ios/#documentation/3DDrawing/…,您的性能可能会因此受到影响。如果可能的话,我建议将这两个视图合并到一个 OpenGL ES 场景中。
  • 啊,谢谢你的链接!我可以确认宽度问题确实是视图不是 32 的倍数。如果是,则模拟器会按应有的方式渲染,至少只要只有一个 opengl 层。我也想只使用一个层,但是在这种情况下,由于我使用的是使用自己的 OpenGL 层的第 3 方组件,因此我不得不创建自己的层。但再次感谢您的回答!
  • 现在使用两层似乎也可以在模拟器中工作,至少如果一个是全屏的,另一个是 96x96。因此,使用不是 32 倍数的视图大小似乎是这两个问题的原因。再次感谢!

标签: iphone objective-c ipad opengl-es cadisplaylink


【解决方案1】:

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

【讨论】:

  • 另外,非常感谢 NSTimer 的提示。否则我不会轻易找到它!
猜你喜欢
  • 1970-01-01
  • 2011-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多