私のeaglviewがiOS 4.2でもうレンダリングしないのですか?
質問
iOS SDK 4.2にアップグレードすると、アプリケーションでいくつかの不正行為が発生しています(もう1つは尋ねられます ここ)。私があなたの助けを求めるのは、私が入れている3Dモデルをこれ以上レンダリングしないOpenGLビュー(EAGLVIEWサブクラス)を懸念しています。
ビューは割り当てられており、ジェスチャーを認識しているように見えますが、そのコンテンツはそうではありません 見える (私はそれが見解についてであり、 置き忘れ 背景を着色することでモデルの:それはそれを介して色付けしません glClearColor()
).
ダブルタップすると、サイズ変更します(フルスクリーンになります。
- (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ドキュメントからの参照がありますか?
更新22.0ではなくOpenGL ES 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)を与えるビューを作成すると、正しくレンダリングされているように見えます。何らかの形で、それはビューの寸法に関連しています
解決
これを見つけるのに永遠にかかりました。まったく文書化されていませんが、Apple Docsにあります。 OS 4.2以上では、EAGLVIEWサイズが両方の次元で32ピクセルの倍数になる必要があります。