iOS SDK 4.2 へのアップグレード アプリケーションでいくつかの誤動作が発生しています (別の動作についてはこちらで質問されます)。私があなたの助けを求めるつもりのものは、私が入れている 3d モデルをレンダリングしない OpenGL ビュー (EAGLView サブクラス) に関するものです。
ビューが割り当てられ、ジェスチャを認識しているように見えますが、その内容は表示されません(背景に色を付けてモデルを配置するのではなく、ビューに関するものであることを確認しました: 色を付けません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];
}
すると魔法のようにモデルが現れ、背景まで色がつきます。
サイズを変更して前のフレームと中央の位置に戻すメソッドがあり、呼び出されるとビューが再び「空」になります。
提案の前に?(必要に応じてさらにコードを投稿できます)
更新 これはシミュレーターで発生しています (現時点ではデバイスでテストできません)。これが既知のバグである場合、誰かが Apple ドキュメントから参照していますか?
更新 2 OpenGL ES 2.0 ではなく 1.1 を使用しています。
EAGLView で行うことは次の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) を指定してビューを作成すると、正しくレンダリングされたように見えます。何らかの形でビューの寸法に関連しています