我创建了一个空的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"
感谢您的时间。
答案 0 :(得分:0)
至于第一个问题,我不知道GLView初始化程序的管道,但必须在制作渲染缓冲区之前设置内容比例(通常在renderbufferStorage::
方法之前)。要查看缓冲区的尺寸是否正确(应为960x640),请使用功能:
GLint width;
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width)
即使缓冲区是视网膜并且尺寸正确,如果您不使用任何类型的抗锯齿,这些多边形可能仍然是锯齿状的。在iOS中制作抗锯齿GL视图的最简单方法可能是多重采样,尝试搜索glResolveMultisampleFramebufferAPPLE()
(除此之外还需要更多行)。