2

私は 1 年前に iPhone ゲームを開発し、離れたところから再開することにしました。そこで、Mac OS X 10.7.4 で実行する最新バージョンの Xcode (4.4.1) をダウンロードし、iOS 5.1 SDK (iOS 4.0 用のビルド) を使用してゲームをビルドし、iOS 5.1 のシミュレーターで実行しました。 .. 最初の glDrawArrays() 呼び出しでクラッシュします。

最後に作業したときは完全に問題なく動作していたので、それは奇妙だと思いました。その後、iOS 4.3 で実行してみましたが、問題なく動作します。iOSからクラッシュすることが判明しました。5.0以上。また、より高いターゲット OS バージョン用にビルドしようとしましたが、違いはありません。

アプリケーションは、glDrawArrays によって実行される gleRunVertexSubmitImmediate 呼び出し (EXC_BAD_ACCESS メッセージ、アドレス 0x0 を含む) でクラッシュします。最初の glDrawArrays 呼び出しで常に問題が発生します。最初の呼び出しにコメントすると、2 番目の glDrawArrays 呼び出しであるはずだったものを開始して再びクラッシュするまで正常に実行されます (黒い画面)。

ロードされている配列 (テクスチャポインター、頂点、gl コンテキスト) をいくつか検査しましたが、null 参照を見つけることができません。ゾンビを有効にして実行しても、詳細情報は得られません。

誰かが同じ問題を経験したことがあるのだろうか、または何が原因であると考えているのだろうか.

編集:コード例はリクエストでした。それは、glDrawArrays が呼び出されるコードの最初のポイントであるため、Apple によって発行された GLTexture.m (v1.7) で発生します。

- (void) drawInRect:(CGRect)rect
{
    CLogGL();
    GLfloat  coordinates[] = {  0,      _maxT,
                                _maxS,  _maxT,
                                0,      0,
                                _maxS,  0  };
    GLfloat vertices[] = {  rect.origin.x,                          rect.origin.y,                          0.0,
                            rect.origin.x + rect.size.width,        rect.origin.y,                          0.0,
                            rect.origin.x,                          rect.origin.y + rect.size.height,       0.0,
                            rect.origin.x + rect.size.width,        rect.origin.y + rect.size.height,       0.0 };

    glBindTexture(GL_TEXTURE_2D, _name);
    glVertexPointer(3, GL_FLOAT, 0, vertices);
    glTexCoordPointer(2, GL_FLOAT, 0, coordinates);
    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);  // Crash happens here
}

編集: スタック トレースのスクリーンショット: stacktrace1.jpg stacktrace2.jpg stacktrace3.jpg

編集: 4.2.2 でも (私の iPod touch で) クラッシュするようですが、4.3 シミュレーターでは問題なく動作します。

4

1 に答える 1

2

おそらく、normal_arrayまたはcolor_arrayがどこかで有効になっています。それらを無効にしてみてください:

glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);

それらが有効になっているが設定されていない場合、glDrawArraysはクラッシュします

于 2012-09-18T19:14:38.880 に答える