OpenGL ES 2.0:在iOS上启用高分辨率

我创建了一个空的iOS项目,然后添加了一个自定义的GLView类,然后将其添加到AppDelegate。 我有以下问题:

1)如何在iPhone 4上启用高分辨率视网膜模式? 目前我正在使用下面的代码来检查设备。 下面的代码来自AppDelegate,它首先分配GLView,然后设置contentScale。

CGRect screenBounds = [[UIScreen mainScreen] bounds]; self.window = [[[UIWindow alloc] initWithFrame:screenBounds] autorelease]; // Override point for customization after application launch. _view = [[GLView alloc] initWithFrame:screenBounds]; if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { NSLog(@"iPad detected"); } else { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) { NSLog(@"iPhone4 detected"); _view.contentScaleFactor = [[UIScreen mainScreen] scale]; } else { NSLog(@"iPhone detected"); } } self.window.backgroundColor = [UIColor whiteColor]; //self.window.rootViewController = [[[UIViewController alloc] initWithNibName:nil bundle:nil] autorelease]; [self.window addSubview:_view]; 

但是即使在设置了内容因子之后,它也会画出相当差的质量多边形,如下图所示:

http://img.ufgame.com/ios/photo_unavailable_l.png

有没有办法将分辨率设置为960×640,而不是默认的480×320?

请注意,我不能使用“someImage@2x.png”,因为我正在渲染缓冲区中运行时生成图像。

2)我遇到的第二个问题是这个警告信息:

 "Application windows are expected to have a root view controller at the end of application launch" 

感谢您的时间。

编辑:问题解决了。 分配渲染缓冲区内存之前设置contentScale,即:在GLView中,而不是AppDelegate。

您看到的警告是因为您没有将视图控制器添加到您的窗口。 如果你的AppDelegate做的是加载视图的工作,视图控制器是不必要的,但是Apple建议使用它们。 这不是一个重要的警告。

我相信你需要设置支持EAGL层和视图本身的内容比例。 UIView具有layer属性,您可以将其转换为CAEAGLLayer。 因此,在设置视图的内容比例之后,请执行以下操作:

 CAEAGLLayer *eaglLayer = (CAEAGLLayer *)_view.layer; eaglLayer.contentsScale = 2.0f; 

分配渲染缓冲区内存之前设置contentScale,即:在GLView中,而不是AppDelegate。 我从AppDelegate中删除了下面的代码,并将其放置到GLView中:

  if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { NSLog(@"iPad detected"); } else { if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2) { NSLog(@"iPhone4 detected"); eaglLayer.contentsScale = 2.0f; } else { NSLog(@"iPhone detected"); } } 

之前发生的事情是GLView在AppDelegate设置新比例因子之前被初始化。

如果苹果对这个警告没有问题,也不会拒绝这个应用程序:

 "Application windows are expected to have a root view controller at the end of application launch" 

然后问题解决了。 非常感谢 !