質問

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ピクセルの倍数になる必要があります。

他のヒント

これはシミュレータにありますか?もしそうなら、それはiOS 4.2シミュレーターの既知のバグです。このバグは、デバイス自体に影響を与えません。

OpenGL-Hostingレイヤーとそれが後方になる見解をどのように設定していますか?私が持っているOpenGLESサンプルアプリケーションを試すとき ここここ, 、両方とも、4.2シミュレーターとデバイスで正常に動作します。

おそらく、これらの例で使用されている初期化を独自の例で比較し、セットアッププロセスで欠落している可能性のあるものがあるかどうかを確認できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top