Programme basé sur le Temps

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Anonyme

Programme basé sur le Temps

Message par Anonyme »

J'ai un p'tit problème que je ne comprend pas du tout.
J'essaye de brider ma boucle principale a 12ms (environ 85 tours par secondes) sans le bridage mon programme tourne à ~87fps

une fois que j'ajoute le "bridage" je passe à 30 fps :

Code : Tout sélectionner

repeat

 If ProgrammeTimming<ElapsedMilliseconds()
 ProgrammeTimming=ElapsedMilliseconds()+12

 ; Code divers

 Flipbuffers()
endif

forever
Si j'augemente la variable "ProgrammeTimming" de 0 à la place de 12 , le programme reste figé à 30fps, en revanche si j'enlève le bridage, le fps repasse à ~87fps.

est ce que c'est le fait d'avoir le code principale dans un "if-endif" qui fait descendre le fps ? ou alors je mis prend mal pour brider le programme.

@+
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Tu as peut-être un conflit avec le fait que ton prog est déjà bridé par flipbuffers(), qui attend la synchro d'affichage. Le problème c'est que tu n'auras pas forcément la même fréquence sur toutes les configs (par ex mon moniteur refuse catégoriquement de dépasser le 75 Hz).

Tu peux essayer d'utiliser flipbuffer(0), pour ne pas attendre la synchro... Reste à voir si tes graphismes n'en souffrent pas !


Tu as peut-être aussi des soucis avec le manque précision de ellapsedmilliseconds(), qui n'est pas vraiment à la milliseconde près...
Tu peux essayer l'api QueryPerformanceCounter_(), pour plus de précision. Comme cette api utilise les entiers 64bits, voici un petit "wrapper" maison:

Code : Tout sélectionner


;Cette variable est là pour retenir la précision du timer
Global _hrtimerfreq.large_integer

;Cette ligne doit être exécutée une fois au début du prog pour connaître la précision du compteur
QueryPerformanceFrequency_(@_hrtimerfreq)


;cette proc renvoie un timer en secondes (pas milli) sous forme de flottant (pas entier!!) 
Procedure.f secs()
   QueryPerformanceCounter_(@hrnow.large_integer)
   !fild qword[esp]
   !fild qword[v__hrtimerfreq]
   !fdivp
   ProcedureReturn
EndProcedure

Voilà, j'espère que ça va dans la bonne direction^^
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Répondre