Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 12/11/2012, à 23:40

BlackSlapPower

Python+pygame: gerer des rafraichissements non standards

Bonjour à tous,

Je suis confronté à un problème technique pour lequel je recherche, si ce n'est une solution, du moins quelque conseil éclairé.

Comment vous y prendriez-vous pour vous assurer que vos display.update() (ou fill) assure un rafraichissement de 120Hz à l'écran pour une expérience pointilleuse de psycho-physique avec pygame(j'ai, bien sûr overdrivé les paramètres d'affichage au niveau du pilote de la carte)? J'ai essayé une technique un peu bourine consistant
1) à calculer la durée d'une frame sur la base d'une moyenne de n frames

t0=pygame.time.get_ticks()
n=200.0
for i in range(int(n)):
	pygame.display.flip()
framedur = (pygame.time.get_ticks()-t0)/n

2) créer une fonction convertissant mes temps ms ==> nb de frames

def conv_time(t, framedur):			
	return (int (round(t/framedur)))

3) pour après "poper" sur une liste de display en rafraicchissant frame par frame

display=[[s_markeur,mark_durf,markeur_rect,True], [s_fix, fixdurf, fix_rect, True], [False, inter_fix_cibf, False, False], [False, delayf, False, False], [s_cible, cdurf, sm_rect, True],[False, isif, False, False], [s_mask, mdurf, sm_rect, bool(pres)]]

while len(display0)>0:							
			screen.fill(gris50)
			if display0[0][1]>0 and display0[0][3]:
				screen.blit(display0[0][0], display0[0][2])
			display0[0][1] -=1
			if display0[0][1]<=0:
				display0.pop(0) 
			pygame.display.flip()

Visuellement, tout se passe bien sauf que:
1) lorsque je print mes framedur, j'obtiens des résultats aberrants (entre 400 et 110 selon les dimensions de la surface)
2) ma photodiode se fout de ma g***** m'indique plus volontiers 30ms que les 8ms attendus (écran LCD 3D 60Hz*2)

Je ne peux visiblement pas me fier au get_ticks() pour calculer un framedur. Savez-vous s'il existe une sous-bibliothèque de pygame susceptible de gérer les paramètres hardware d'un peu plus près pour m'assurer du temps, si ce n'est de ce qui se passe sur la dalle, du moins ce qui lui est envoyé?

Merci d'avance aux âmes charitables pour vos conseils (et plus si affinité)


Asus M4A89GTD Pro/ USB/ AMD Phenom II 555/ 8Go RAM  HD6870/ OpenSUSE 12.2 64bits
EeePc 1000 HE/ Kubuntu 12.04 32bits

Hors ligne