1

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

1) 如何在 iPhone 4 上启用高分辨率视网膜模式?目前我正在使用以下代码来检查设备:

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://farm8.staticflickr.com/7358/8725549609_e2ed1e0e2a_b.jpg

有没有办法将分辨率设置为 960x640 而不是默认的 480x320 ?

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

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

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

感谢您的时间。

4

1 回答 1

0

至于第一个问题,我不知道 GLView 初始化程序的管道,但必须在制作渲染缓冲区之前设置内容比例(通常在renderbufferStorage::方法之前)。要查看缓冲区的尺寸是否正确(应为 960x640),请使用以下函数:

GLint width;
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width)

即使缓冲区是视网膜并且尺寸正确,如果您不使用任何类型的抗锯齿,这些多边形仍可能是锯齿状的。在 iOS 中制作抗锯齿 GL 视图的最简单方法可能是多重采样,尝试搜索glResolveMultisampleFramebufferAPPLE()(尽管您需要在此之外再添加几行)。

于 2013-05-13T07:27:00.937 回答