升级到iOSSDK4.2时,我的应用程序中出现了一些错误行为(另一个问题是
here
). 我要向你求助的是一个OpenGL视图(一个eagleview子类),它不再呈现我正在放置的3d模型。
视图被分配,它似乎可以识别手势,但其内容不是
看得见的
(我已经检查过它是关于风景的,而不是关于
错位
通过给背景上色来显示模型:它不会给模型上色
glClearColor()
).
当我双击它时,它将调整大小(全屏显示,在此之前是一个小的UIVIew),调用此方法:
- (void)animateToGrow{
DNSLog(@"grow");
grow = YES;
oldFrame = self.frame;
oldCenter = self.center;
[UIView beginAnimations:@"MoveAndStrech" context:nil];
[UIView setAnimationDuration:0.5];
[UIView setAnimationBeginsFromCurrentState:YES];
self.frame = CGRectMake(0, 0, WIDTH, HEIGHT);
self.center = CGPointMake(CENTER_X, CENTER_Y);
[UIView commitAnimations];
[self setupGLPerspectiveNear:0.1 far:1000];
}
神奇地
模型出现
,甚至背景也会着色。
我有一个方法可以调整它的大小并使它回到以前的帧和中心位置,当它被调用时,视图变成
'空'
再一次。
之前
有什么建议吗?(如果需要,我可以发布更多代码)
更新
这是在模拟器上发生的(目前无法在设备上测试)。如果这是一个公认的错误,有没有人从苹果文档的参考?
更新2
我使用的是OpenGL ES 1.1而不是2.0。
这是我在伊格维尤做的事
layoutSubViews
:
- (void)layoutSubviews
{
[EAGLContext setCurrentContext:_context];
[self destroyFramebuffer];
[self createFramebuffer];
[self drawView];
}
这是我的
createFramebuffer
- (BOOL)createFramebuffer
{
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);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &_backingWidth);
glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &_backingHeight);
if (_useDepthBuffer)
{
glGenRenderbuffersOES(1, &_depthRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, _depthRenderbuffer);
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, _backingWidth, _backingHeight);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, _depthRenderbuffer);
}
if(glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES)
{
NSLog(@"failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES));
return NO;
}
return YES;
}
更新3
如果我创建一个全屏画面(320x480)的视图,它看起来渲染得很正确。在某种程度上,它与视图尺寸有关