2012-09-25 24 views
3

我目前正在将我的iPhone游戏移植到iPhone 5的分辨率。我包括[email protected]opengl 1.1 renderbuffer generation只有960px而不是1136px宽度

[[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屏幕大小的渲染缓冲区?

回答

2

我找到了解决方案。这不是一个opengl问题。将Xcode升级到v4.5后,我的应用程序主窗口的界面构建器中的大小选项未设置。将选项设置为“Retina 3.5全屏”解决了问题(通过这样做,主视图会自动缩放到3.5英寸或4英寸的iPhone屏幕)。

这篇文章帮我: How to make a uitableview in interface builder compatible with a 4 inch iPhone

+0

您是否在模拟指标部分设置了大小选项?因为这似乎只影响界面构建器中显示的大小,而不影响设备上实际运行的大小。 –

+0

我可以问你给我看一个你的MainWindow和EAGLView属性的截图,我无法得到这个工作正常。谢谢。 – Marc

0

其实,如果你想获得通用的解决方案,你应该改变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); 

得到正确的高度。

相关问题