2013-10-07 4 views
6

Ho lavorato a un gioco e l'ho provato con la versione precedente di iOS, giocato centinaia di volte e non ho visto nemmeno un singolo incidente, dopo che Ho installato iOS7 e aggiornato xcode ho appena provato la mia app e ... ora a volte si blocca. Gli arresti non si verificano in un particolare momento o azione, sono completamente casuali, a volte si bloccano all'istante, a volte dopo 2-3 giochi, ho provato a fare le stesse cose per verificare se è qualcosa in particolare ma sembra non essere, o almeno non qualcosa di apprezzabile in questo modo. Sto usando sprite e batchnode nella scena del gioco.iOS 7 e Cocos2d, exc_bad_access su glDrawElements completamente casuali

Esattamente in questa riga di codice (circa 522) nel file CCTextureAtlas.m:

glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, (GLvoid*) (start*6*sizeof(_indices[0]))); 

dal momento che non ha fatto alcuna modifica al codice dubito fortemente che possa essere qualcosa che ho fatto, probabilmente è qualcosa legato ai cambiamenti in iOS7 che riguardano cocos2d? Non sono nemmeno esperto con OpenGL quindi ho difficoltà a capire cosa sta succedendo ...

ovviamente in un gioco Ho alcune animazioni in corso ...

informazioni aggiuntive:

  • questo NON sta succedendo dopo un avviso di memoria (non ho avvertenze di memoria affatto).
+1

Assicurarsi che non si dispone di qualcosa che causa le chiamate OpenGL su un altro thread/coda che potrebbe danneggiare lo stato del VBO (cosa sta cercando di disegnare glDrawElements), poco prima del richiamo di glDrawElements(). – mattorb

+0

questo succede anche a me ... ma solo nel simulatore (badate bene, 'non vedere' qualcosa è difficile da provare). Quando si esegue in simulatore, dopo l'eccezione, posso riprendere da lì !!! – YvesLeBorg

+1

Ho capito che nel mio caso il problema era causato da CCLabelBMFont, probabilmente dopo che iOS7 è successo qualcosa e mentre disegnandoli c'è la possibilità di avere un crash. In realtà li ho sostituiti con CCLabelTTF e ora va tutto bene, ma poiché non so ancora come risolverlo (è solo una soluzione) non sto inviando una risposta ... Ho scoperto che probabilmente quelli sono le modifiche da apportare ma non ho ancora provato: https://github.com/jllust/cocos2d-x/commit/1f3c1145362c921bf5232c4ffbca4a5245042bae – Adarkuccio

risposta

4

L'aggiunta di ccGLBindVAO(0); dopo ogni chiamata a glDeleteVertexArrays(1, &_VAOname);, ha arrestato gli arresti anomali.

ci sono tre file con questo invito:

CCDrawNode:164 
CCTextureAtlas:142 
CCParticleSystemQuad:164 
CCParticleSystemQuad:229 
CCParticleSystemQuad:492 

Come così in CCTextureAtlas:

#if CC_TEXTURE_ATLAS_USE_VAO 
    glDeleteVertexArrays(1, &_VAOname); 
    ccGLBindVAO(0); 
#endif 

sto usando cocos2d-iphone classico 2.2.

Il codice era qui: https://github.com/jllust/cocos2d-x/commit/1f3c1145362c921bf5232c4ffbca4a5245042bae

ho fatto una richiesta di pull cocos2d-iphone-classico: https://github.com/zeraien/cocos2d-iphone-classic/commit/817a9c14a3aa1d4c162071521e45e2fcce473d77

+0

grazie davvero molto tanto ..... Ho un vecchio progetto ma non posso risolverlo. Sei il mio dio – zszen

+0

Sono contento che sia stato utile :-) – zeraien