我正在使用设置为空的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。
答案 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);
我还在调查这个错误,有什么想法吗? 谢谢,