OpenGLESを使って簡単なゲームを作ろうとしています。2 つの EAGLViews (メニューとゲーム ビュー) があります。各ビューには独自の viewController があります。ビューの初期化は、viewController の initWithNIBName メソッドによって行われます。ビューを表示したいときは、メイン ウィンドウの addSubview メソッドを使用するだけです。ゲーム ビューは、起動時に 1 回だけ初期化されます。メニュー ビューは、必要な場合にのみ初期化されます。問題は、ゲーム ビューからメニューに移動してから戻ると、ゲーム ビューを再描画すると何か問題が発生することです。(描画前に drawView メソッドで EAGLContext を設定しているので、コンテキストが合っているかもしれません)。どこに問題があるかわかりませんか?または、切り替え全体が間違って管理されている場合は、アドバイスをお願いします。返信ありがとうございます。
1 に答える
テクスチャが正しく表示されないという問題が発生していると思いますか?
OpenGL の背後にある本当のことはわかりませんが、これは私の仮説です: EAGLView に戻るたびに、EAGLView の EAGLContext が変更されます。(OpenGLES テンプレートからコピーして貼り付けた場合) テクスチャは、コンテキストが正しい状態になった後にのみロードできます。そうしないと、テクスチャをロードできません。ここで、EAGLView を離れて戻ってくると、initWithCoder:(NSCoder*)coder から新しい EAGLContext をインスタンス化しています。
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES1];
if (!context || ![EAGLContext setCurrentContext:context]) {
[self release];
return nil;
}
では、このコンテキストを維持するにはどうすればよいでしょうか。私はそれをグローバルにします。そのような単純な。そして、EAGLView が再度インスタンス化される場合、「グローバル」EAGLContext が nil であるかどうかをチェックします。nil の場合はインスタンス化するだけで、そうでない場合は何もしません。また、プログラムを終了したい場合を除き、このグローバル EAGLContext を決して解放したり解放したりしないでください。
これは私にとってはうまくいきますが、上記の仮説は正しくない可能性があります。本当のことを知っている人がいたら教えてください。また、何卒ご指導を賜りますようお願い申し上げます。なぜこれが起こるのか、なぜこれをしなければならないのかを本当に知りたいです。
ところで、これはあなたの質問に答えていますか、Jenicek?