2010-07-24 4 views
2

Je regarde une WWDC video (session 105) qui parle de multi-tâches avec iOS 4. Quelque chose intéressante vient d'être mentionné:Comment gérer le multitâche dans les applications basées sur OpenGL ES sur iOS 4?

« toute utilisation du GPU alors que votre application est en l'un des états fond résultats dans la fin automatique de l'application.Cela comprend tous les appels à OpenGL. "

Comment gérer cette "condition" si l'application entière est basée sur OpenGL?

Note: J'ai demandé this question parce que mon application OpenGL semble faire du multitâche très bien dans le simulateur mais pas sur l'appareil (iPhone 4) ... l'application est automatiquement terminée lorsqu'elle est exécutée sur l'appareil. Cela peut être dû à une allocation de mémoire "inefficace" (je ne libère aucune ressource quand l'application passe à l'arrière-plan) ... ou cela pourrait être dû à cette restriction "sans utilisation de GPU" dont je viens d'apprendre.

Répondre

3

Vous devez séparer la logique de traitement du dessin et de la mise à jour (appels OpenGL). Ensuite, vous pouvez définir un état global pour votre application en entrant et sortant des états d'arrière-plan (applicationDidEnterBackground/applicationWillEnterForeground) et utiliser cet indicateur pour ignorer vos appels de dessin OpenGL (et tout autre code qui ne devrait pas être exécuté depuis l'arrière-plan).

0

Voir la documentation à OpenGL ES Programming Guide for iOS

En particulier, il convient de noter que devrait être un appel à glFinish() à la suite de applicationDidEnterBackground: et/ou applicationWillResignActive :. Je crois comprendre que vous n'aurez pas besoin d'utiliser un drapeau global "in foreground" si toute l'exécution d'OpenGL ES est le résultat d'une gestion d'événement, puisque votre application ne gérera aucun événement en arrière-plan.

Questions connexes