我一年前開發了一款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上glDrawArrays崩潰
所以我覺得這很奇怪,因爲它在我上次工作時確實運行得很好。然後我嘗試在iOS 4.3上運行,它工作正常! 發現它從iOS崩潰。 5.0及以上。我也嘗試過構建更高版本的目標操作系統版本,但這沒有任何區別。
該應用程序在由glDrawArrays執行的gleRunVertexSubmitImmediate調用(具有EXC_BAD_ACCESS消息,地址0x0)時崩潰。它在第一次調用glDrawArrays時總是出錯,因爲如果我評論第一個glDrawArrays,它會正常運行(黑屏),直到我啓動應該是第二次glDrawArrays調用的應用程序並再次崩潰。
對加載的數組(紋理指針,頂點,gl上下文)進行了一些檢查,但我無法找到任何空引用。 運行殭屍啓用不提供更多信息。
我想知道是否有人遇到同樣的問題或有任何想法可能導致它。
編輯:代碼示例是請求。它發生在Apple的問題GLTexture.m(v1.7)中,因爲這是調用glDrawArrays的代碼中的第一個點。
- (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模擬器運行良好。
帖子相關的代碼,請。 – Tim
檢查您的數據是否存在繪圖 – SAKrisT
此渲染代碼是否都在同一線程上運行,或者您是否可能從多個線程訪問OpenGL ES上下文?您可能會遇到舊版iOS版本中避免的爭用情況。 –