我目前正在将我的iPhone游戏移植到iPhone 5分辨率。我包括默认568h@2x.png和
[[UIscreen mainScreen] bounds].size;
给了我iPhone 5分辨率(320x568px)。但是我在OpenglES 1.1中创建的renderBuffer只能获得旧的iPhone分辨率(640x960px)。我创建渲染缓冲区的方式如下所示:
glGenFramebuffersOES(1, &viewFramebuffer);
glGenRenderbuffersOES(1, &viewRenderbuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, viewRenderbuffer);
GLint frameBufferWidth, frameBufferHeight;
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &frameBufferWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &frameBufferHeight);
当我在iPhone 5上运行游戏时,游戏仅覆盖屏幕的前960像素并被挤压。
有人知道如何创建适合iPhone 5屏幕大小的渲染缓冲区吗?
我找到了解决方案。这不是一个开放的问题。将 Xcode 升级到 v4.5 后,我的应用程序主窗口的界面生成器中没有设置大小选项。将选项设置为"Retina 3.5全屏"解决了问题(通过这样做,主视图会自动缩放到iPhone屏幕的3.5或4英寸)。
这篇文章帮助了我:如何在界面构建器中使 uitableview 与 4 英寸 iPhone
实际上,如果你想得到通用的解决方案,你应该改变CAEAGLLayer类参数。在我的一个旧项目中,我也遇到了同样的问题。但是,如果您更改iPhone 5的XIB文件中的分辨率,iPhone 4将拉伸图像。
- (id) initWithCoder:(NSCoder*)coder {
if ((self = [super initWithCoder:coder])) {
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.opaque = TRUE;
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:FALSE], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
所以,这里我们需要改变分辨率:
if ([[UIScreen mainScreen] bounds].size.height == 568) {
eaglLayer.bounds = CGRectMake(eaglLayer.bounds.origin.x, eaglLayer.bounds.origin.y, 320, 568);
eaglLayer.position = CGPointMake(160, 284);
}
之后这段代码
GLint frameBufferWidth, frameBufferHeight;
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &frameBufferWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &frameBufferHeight);
获得正确的高度。