Voici ce qui se passe:Quelles sont les causes de la fluctuation des temps d'exécution lors de la présentation du Renderbuffer? (OpenGL)
La fonction drawGL est appelée à la fin exacte du cadre grâce à un
usleep
, comme l'a suggéré. Cela maintient déjà un framerate stable. La présentation réelle du rendu est effectuée avecdrawGL()
. La mesure du temps nécessaire pour cela, me donne des temps d'exécution variables, ce qui entraîne un bégaiement dans mon animation. Cette minuterie utilise mach_absolute_time donc c'est extrêmement précis. À la fin de mon cadre, je mesuretimeDifference
. Oui, il est en moyenne 1 milliseconde, mais il dévie beaucoup, allant de 0,8 millisecondes à 1,2 avec des pics allant jusqu'à plus de 2 millisecondes.
Exemple:
// Every something of a second I call tick
-(void)tick
{
drawGL();
}
- (void)drawGL
{
// startTime using mach_absolute_time;
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
// endTime using mach_absolute_time;
// timeDifference = endTime - startTime;
}
Ma compréhension est que, une fois le framebuffer a été créé, présentant le renderbuffer doit toujours prendre le même effort, quelle que soit la complexité du cadre? Est-ce vrai? Et sinon, comment puis-je empêcher cela? Par ailleurs, ceci est un exemple pour une application iPhone. Nous parlons ici d'OpenGL ES, bien que je ne pense pas que ce soit un problème spécifique à une plate-forme. Si c'est le cas, que se passe-t-il? Et ne devrait-il pas s'agir de et non de? Et encore une fois, si oui, comment puis-je empêcher cela?
Je chronomètre d'ailleurs déjà mes calculs afin de maintenir un framerate stable. Le dessin actuel a toujours lieu exactement à la fin du cadre. (J'utilise une minuterie de sommeil pour cela) Je vais clarifier la question pour cela. – Kriem