3

そのため、いくつかの OpenglES を使用して iphone 開発を行っていますが、エフェクトで prepareToDraw を呼び出すと、かなり奇妙なエラーが発生します。簡単に言えば、私のプログラムはサイコロを振ることをシミュレートしています (objective-c と opengl を学ぼうとしています)。プログラムはほとんどの部分で正常に動作します。アプリでプログラムしたすべてのことを使用できます (物理学のバグがありますが、後で修正できません)。この問題は、OpenGL を含むパーツを使用した後に発生します。

プログラムには、OpenGL を使用している画面に到達するために通過する必要がある 2 つのメニューが含まれています。アプリの OpenGL 部分を使用して前のメニューに戻り、もう一度 OpenGL 部分に戻ってみると、 GL ERROR: 0x0501 と表示されます。私のエフェクトからprepareToDrawメソッドが原因であると絞り込みました。それに関する他の奇妙な部分は、戻ってから再び進むと、OpenGLが再び機能し、OpenGL部分に入るたびに機能して壊れるために何度も繰り返すことができることです。

私は似たような問題を探していましたが、2 のべき乗テクスチャではないテクスチャの読み込みに関係するたびに、まだテクスチャを使用しておらず、色付きの頂点だけであるため、役に立ちません。

2 つのコード ファイルを問題のある場所に貼り付けました

Dice.m: http://pastebin.com/ze1DEEzs draw メソッドを使用すると、問題のある場所 (prepareToDraw メソッド) がプリントアウトで絞り込まれていることがわかります。(308行目)

RollViewController.m: http://pastebin.com/VycwAh3R このファイルは、エフェクトやコンテキストなどをセットアップする場所なので、OpenGL を 2 回実行するたびに prepareToDraw メソッドを台無しにするために、ここで何か間違ったことをしているに違いありませんプログラムの一部。コンテキストと効果に関係するある種のリソースを手放さないことに関係があると感じていますが、コンテキストと効果の削除については何も見つかりません(おそらく必要がないためですが、よくわかりません)。

同じ問題に遭遇し、私の質問に答えることができる誰かがそこにいることを願っています.

ありがとう

4

2 に答える 2

10

多くの痛みと苦しみの後、私はついに問題の解決策を見つけました。これが問題である理由は正確にはわかりませんが、OpenGL パーツ (別名 RollViewController.m) 内でコンテキストを作成することは、それを行う方法ではありません。代わりに、プログラムの存続期間中に一度作成し、現在のコンテキストを glkview に設定して、作成したコンテキストにする必要があります。コンテキストを再作成することが悪い考えである理由を誰かが教えてくれるかもしれません。

私のコードには、ビューとメニューの間で渡されるプロファイル オブジェクトがあり、それらがすべて同じデータと通信できるようになっているため、プロファイル オブジェクト内にパブリック コンテキストを定義して、作成する代わりにすべてがコンテキストにアクセスできるようにしました。独自の(そして壊れている)。

于 2012-05-28T13:37:55.197 に答える
0

エラーは一般的なようで、さまざまな問題が原因である可能性があります。ミップマップを使用しないことで(今のところ)回避しました。私が持っていた次のコードにコメントしましたが、もうエラーはありません。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST); glGenerateMipmap(GL_TEXTURE_2D)

于 2014-06-09T17:59:59.227 に答える