2012-09-17 97 views
2

我一年前開發了一款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模擬器運行良好。

+0

帖子相關的代碼,請。 – Tim

+0

檢查您的數據是否存在繪圖 – SAKrisT

+0

此渲染代碼是否都在同一線程上運行,或者您是否可能從多個線程訪問OpenGL ES上下文?您可能會遇到舊版iOS版本中避免的爭用情況。 –

回答

2

也許你的normal_array或color_array在某處啓用。嘗試禁用它們:

glDisableClientState(GL_COLOR_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 

如果已啓用,但沒有設置調用glDrawArrays會崩潰

+0

是的......當我在1.5年前上一次在項目中工作時,在創建我的glesContext時添加了glEnableClientState(GL_COLOR_ARRAY)。我忘了這一點,它似乎沒有問題,與iOS 4.3 ...但它是有道理的,它會導致內存問題,如果你實際上沒有給一個顏色數組提供GLES :) GL_COLOR_ARRAY狀態啓用現在被刪除,遊戲運行沒有問題!謝謝!!! –

相關問題