OpenGL 呼び出しで Cocoa アプリケーションがクラッシュする
-
21-09-2019 - |
質問
新しいプロジェクトを作成し、ほとんどコピーしました このガイド, 、しかし、OpenGL関数を呼び出すたびに、スポットマークが付けられます // Drawing code here
それはクラッシュします。そこにこれがあります:
glViewport(0, 0, [self bounds].size.width, [self bounds].size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0, [self bounds].size.width, [self bounds].size.height, 0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.375, 0.375, 0.0);
glClearColor(1, 1, 1, 1);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glBegin(GL_LINES);
glVertex2f(10, 10);
glVertex2f(300, 300);
glEnd();
glFlush();
ただし、OpenGL 関数を 1 つ呼び出すだけでクラッシュし、レポートが表示されます。 GDB: Program received signal: "EXC_BAD_ACCESS".
まず第一に、もしうまくいったとしたら、そのコードは良いものでしょうか?呼び出されるたびに、そのようなことをすべて上部で実行するのでしょうか?原点が左上にある 2D 用であるはずです。そしてなぜクラッシュするのでしょうか?CoreVideo と OpenGL をリンクしてインポートしました...ゲーム コードに集中できるように、OpenGL を使用するように Cocoa アプリケーションをセットアップしたいと考えています。
ありがとう。
解決
あなたがリンクした記事は、実際には完全なプロジェクトではありません。これは、CVDisplayLink を使用して描画ループを駆動する方法の単なる説明とサンプルです。おそらく Apple のものから始めたほうがうまくいくでしょう。 OpenGL プログラミング ガイド。
他のヒント
チェックMyOpenGLView.mで Appleのサンプルコードに。彼らは成功しCVDisplayLinkを使用しています。 「ドライビングOpenGLのレンダリングループ」に欠けているものは、あなたが同じOpenGLコンテキストにアクセスする二つのスレッドを避けるために、ミューテックスを追加する必要があるという事実である。
あなたはそれが問題の一部であるかどうかを確認するためにハードコードされた数字で「[自己を境界] .size.width」交換してみてください可能性があります。