2010-08-03 10 views
2

Je suis un peu novice en matière de threading, donc tout pointeur dans la bonne direction serait d'une grande aide. J'ai un jeu avec à la fois une fonction de mise à jour assez lourde et une fonction de tirage assez lourde. Je suppose que la majorité du poids dans la fonction de tirage va se produire sur le GPU. Pour cette raison, je voudrais commencer à calculer la mise à jour sur la prochaine image pendant que le dessin se passe. En ce moment, ma boucle de jeu est assez simple:Séparer les appels OpenGL de la mise à jour sur l'iPhone

Game->Update1(); 
Game->Update2(); 
Game->Draw(); 

Update1() variables mises à jour qui ne changent pas d'état de jeu, donc il peut fonctionner indépendamment du tirage au sort. C'est-à-dire, il ne devrait y avoir aucun combat sur les données entre les deux. C'est aussi la majeure partie du traitement du processeur.

Update2() met à jour les variables qui Draw a besoin, et il est assez rapide, il semble donc bon de le faire fonctionner en série avec Draw(). De plus, je crois que la fonction Draw() est légère sur le processeur et lourde sur le GPU. Ce que je voudrais faire, c'est que pendant que le GPU est occupé à traiter toutes les fonctionnalités de Draw, le prochain Update1() peut utiliser le CPU pour préparer la mise à jour de l'image suivante. Il ne semble pas que j'obtienne automatiquement cette fonctionnalité - le cycle de dessin semble prendre un peu de temps et bloquer tout jusqu'à ce que ce soit fait, ce qui est loin d'être idéal.

Quelle est la bonne façon de faire cela? Est-ce que cela se produit déjà, et je ne l'observe pas correctement?

Répondre

0

Cela dépend de ce que Draw() contient, vous devriez obtenir le parallélisme CPU-GPU automatiquement, à moins que certains appel à l'intérieur de Draw() synchronise entre CPU et GPU. Un exemple simple utilise glReadPixels.

+0

Ahh, super! Merci! – Perrako