【发布时间】: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