3

我目前正在将我的 iPhone 游戏移植到 iPhone 5 分辨率。我包括了 Default-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 屏幕大小的渲染缓冲区吗?

4

2 回答 2

2

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

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

于 2012-09-26T11:10:40.040 回答
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);

得到正确的高度。

于 2014-02-15T18:52:02.953 回答