ipad2帧缓冲区初始化为视网膜大小

时间:2012-10-29 22:22:40

标签: iphone ios ipad opengl-es framebuffer

我正在使用设置为空的iPhone / ipad应用程序来使用我的EAGLView类。 我使用:

初始化帧缓冲区
self.contentScaleFactor = [[UIScreen mainScreen] scale];
self.layer.contentsScale = [[UIScreen mainScreen] scale]; //this is 1.0
glGenFramebuffersOES(1, &defaultFramebuffer);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer);
    glGenRenderbuffersOES(1, &colorRenderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer);
    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*)self.layer];

    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &framebufferWidth);
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &framebufferHeight);

之后,framebufferWidth为1568,framebufferHeight为1216。 我的设备由[[UIDevice currentDevice] model]报告为@“ipad”,iOS 4.3.5。 Xcode 4.5.1,SDK 6,部署目标4.3。

任何人都知道为什么我有这个尺码而不是1024x768?

感谢。

稍后编辑:相同的代码与Xcode 3.x和SDK 4.3完美配合,部署目标为4.0。

2 个答案:

答案 0 :(得分:1)

1568x1216必须是EAGLView的大小 - 您是从NIB加载还是以编程方式创建它?假设前者,它的大小是多少,你的弹簧和支柱是如何设置的?我会打赌,如果你记录视图的框架,你会看到这些数字。

在iOS 5或更新版本中,你应该只使用GLKView而不是自己动手; 4.3部署仍然对您很重要吗?

答案 1 :(得分:1)

我找到的一个解决方案是在我的EAGLView对象的layoutSubviews中放入一些代码:

- (void)layoutSubviews

{     //将在下一个setFramebuffer方法调用的开头重新创建帧缓冲区。     [self deleteFramebuffer];

CGRect  rect = [[UIScreen mainScreen] bounds];
self.layer.frame = rect;
self.frame = rect;

}

现在它正常工作,但在调用时仍然遇到一个openGL错误1282:

glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGBA8_OES, framebufferWidth, framebufferHeight);

我还在调查这个错误,有什么想法吗? 谢谢,