2009-08-04 29 views
0

私はOpenGLESを使って簡単なゲームを作ろうとしています。 私は2つのEAGLView(メニューとゲームビュー)を持っています。 各ビューには独自のviewControllerがあります。ビューの初期化は、viewControllerのinitWithNIBNameメソッドによって行われます。 ビューを表示したいときは、単にメインウィンドウのaddSubviewメソッドを使用します。 ゲームビューは、起動時に1回だけ初期化されます。メニュービューは、必要な場合にのみ初期化されます。問題は、私がゲームビューからメニューに戻って戻って、ゲームビューを再描画すると、何かがうまくいかないことです。 (描画する前にdrawViewメソッドでEAGLContextを設定しているので、コンテキストが正しいかもしれません)。 問題がどこにあるのか分かりませんか? または、全体の切り替えが間違って管理されている場合は、私に助言してください。 返信いただきありがとうございます。openglesビュー切り替えの問題

答えて

1

テクスチャが正しく表示されない場合がありますか?

OpenGLの背後にある本当のことはわかりませんが、これは私の仮説です。 EAGLViewに戻るたびに、EAGLViewのEAGLContextが変更されます。 (OpenGLESテンプレートからコピー&ペーストしている場合)テクスチャは、コンテキストが正しい状態になった後にのみロードすることができます。そうでなければ、テクスチャをロードできません。コーダ(NSCoder *)::

context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1]; 

    if (!context || ![EAGLContext setCurrentContext:context]) { 
     [self release]; 
     return nil; 
    } 

だから、どのように我々は、このコンテキストを保存することができます今、EAGLViewを残し、そして戻ってくることで、あなたはinitWithCoderから新しいEAGLContextをインスタンス化していますか?私はそれをグローバルにする。そのような単純な。また、EAGLViewをもう一度インスタンス化するときは、 "global" EAGLContextがnilであるかどうかをチェックしてください。それが無ければ、インスタンス化するだけです。それ以外は何もしません。プログラムを終了しない限り、このグローバルEAGLContextを解放したりdeallocしたりすることはありません。

これは私には当てはまりますが、上記の私の仮説は正しくないかもしれません。誰かが本当のことを知っているなら、私に講演してください。私はまた、謙虚に指導を必要としています。私は本当になぜこれが起こるのかを知りたいのですが、なぜこれを行う必要があるのでしょうか。

そして、これはあなたの質問に答えていますか、Jenicek?

+0

ビューを切り替え、異なるOpenGLビューが画面に表示されているときは、正しいOpenGLコンテキストで[EAGLContext setCurrentContext:context]を呼び出す必要があります。それ以外の場合は、gl *呼び出しは他のOpenGLビューの内容を変更します。 –

関連する問題