Opengl es高分辨率iphone 4

时间:2013-05-10 16:58:14

标签: opengl-es

我创建了一个空的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"

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

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

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

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