最新のアプリで深刻な問題が発生しています!!
私は OpenGLES 1 を使用してモデルを画面に描画し、常に更新しています。その後、スクリーンショットを撮って好きなように共有できます。その後、アプリの開始画面に戻って最初からやり直すことができます。
アプリが最初に実行されたときはすべて正常に動作しているようで、クラッシュはありません。しかし、一度実行してからもう一度実行しようとすると、OpenGLES 描画ビューが要素の描画を開始する必要があるとすぐに、私の行EXC_BAD_ACCESS
にエラーが発生します。glDrawElements
今のところこのエラーを修正するのをあきらめました。過去 2 週間は運がありませんでした!!
アプリがバックグラウンドで実行されないように、plist にプロパティを設定しました。一度実行すると、終了して再度ロードすると、完全に正常に実行されます。
だから私が思っていたのは、機能の機能を何とかエミュレートできるかどうかですが、exit(0)
実際にアプリを終了する必要はありませんか?
つまり、ユーザーが共有ページからホーム ページに戻るたびに、アプリはexit
コードを実行し、アプリは最初からやり直すことになります。
これは、少なくとも私の頭の中では、状況に対処するのに最適な方法ではありませんが、迅速な結果が必要であり、実際のエラーの真相を突き止めるまでは、これが良い方法のように思えます。
ありがとう、
マット
編集 1: この修正を適用してストアにアプリを配置するつもりはありません。これは一時的なものです。
編集 2: Bill Dudney の WaveFront .obj ローダーから取得および適用された、私の描画機能を含む投稿されたコード
for(WaveFrontOBJGroup *group in scene.groups)
{
NSString *matPath = [NSString stringWithFormat:@"%@%@.mtl", materialName, modelPart];
NSArray *materialArray = [WaveFrontOBJMaterial materialsFromLibraryFile:matPath];
WaveFrontOBJMaterial *mat = [materialArray objectAtIndex:0];
if(group.smoothing)
glShadeModel(GL_SMOOTH);
else
glShadeModel(GL_FLAT);
// load (if necessary) and bind the vertices
GLuint verticesName = [group verticesName:GL_STATIC_DRAW];
glBindBuffer(GL_ARRAY_BUFFER, verticesName);
glVertexPointer(3, GL_FLOAT, 0, 0);
// load (if necessary) and bind the normals
GLuint normalsName = [group normalsName:GL_STATIC_DRAW];
glBindBuffer(GL_ARRAY_BUFFER, normalsName);
glNormalPointer(GL_FLOAT, 0, 0);
ColorRGBA color = mat.ambientColor;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (GLfloat *)&color);
color = mat.diffuseColor;
if(alpha)
glColor4f(color.red, color.green, color.blue, mat.disolve);
else
glColor4f(color.red, color.green, color.blue, color.alpha);
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, (GLfloat *)&color);
color = mat.specularColor;
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, (GLfloat *)&color);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, mat.shine);
// load (if necessary) and bind the texture
if(group.textureCoordinatesIndexData.length > 0)
{
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
GLuint textureCoordsName = [group textureCoordinatesName:GL_STATIC_DRAW];
glEnable(GL_TEXTURE_2D);
glBindBuffer(GL_ARRAY_BUFFER, textureCoordsName);
glTexCoordPointer([group texCoordSize], GL_FLOAT, 0, 0);
GLuint texId = [mat.diffuseTexture textureName];
glBindTexture(GL_TEXTURE_2D, texId);
}
GLuint indexesName = [group indexesName:GL_STATIC_DRAW];
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, indexesName);
glDrawElements(GL_TRIANGLES, group.indexCount, GL_UNSIGNED_SHORT, NULL);
//^^This line above is where I get the "EXC_BAD_ACCESS" message
if(group.textureCoordinatesIndexData.length > 0)
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
ブレークポイントと NSLogを確認group.indexCount
しましたが、null ではありません。最初に実行したときとまったく同じで、正常に動作します。
必ずしもその行にあるとは限らないことを認識しています。変数がポインターとして初期化されていないことが原因であるという他の話を聞いたことがあります*
-または NSStrings が一致する識別子と値(@"%@ sometext %@", variable);
を持っていませんが、私の中にそれらのいずれも表示されませんもちろん、コードは簡単に見逃す可能性があります。