Page 1 sur 2
fréquence de rafraichissement
Publié : jeu. 01/oct./2009 20:19
par beauregard
En changeant de disque dur, j'ai donc tout réinstallé, et mes programmes tournaient trop vite les bougres: la fréquence de rafraichissement du l'écran est fixé d'origine à 75Hertz (nvidia). Et il faut donc l'abaisser à 60Hz.
Il y a-t-il un moyen de connaitre cette fréquence avec notre pb d'amour ?...
...puis de forcer la carte à passer à 60 Hz si ce n'est pas le cas ?
en vous remerciant.
Re: fréquence de rafraichissement
Publié : jeu. 01/oct./2009 22:03
par Backup
voir :
SetFrameRate(ImagesParSeconde)
SetRefreshRate(TauxDeRafraichissement)
Re: fréquence de rafraichissement
Publié : jeu. 01/oct./2009 22:19
par beauregard
Dobro a écrit :voir :
SetFrameRate(ImagesParSeconde)
SetRefreshRate(TauxDeRafraichissement)
Content de te lire, ton départ m'attriste, comme ne plus revoir un prof qu'on a bien aimé, c'est pas glop.
Je pense que les jeux commerciaux force l'écran à 60Hz, me trompe-je ?
Re: fréquence de rafraichissement
Publié : ven. 02/oct./2009 7:34
par flaith
beauregard a écrit :Je pense que les jeux commerciaux force l'écran à 60Hz, me trompe-je ?
Normalement on doit avoir le choix entre 50 ou 60Hz
Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 13:36
par beauregard
flaith a écrit :beauregard a écrit :Je pense que les jeux commerciaux force l'écran à 60Hz, me trompe-je ?
Normalement on doit avoir le choix entre 50 ou 60Hz
mmh, ici j'ai le choix entre 60, 65 et 75 Hz.
50 Hz, j'imagine que c'est pour les regrettés écrans cathodiques d'antan ?
Chez moi je n'arrive pas à forcer la carte réglé à 75Hz à passer à 60Hz, voilà une nouvelle épine dans le pied.

Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 16:13
par Le Soldat Inconnu
non, en fait, il faut laisser l'écran à 75Hz mais mettre le taux de rafraichissement à 60 images par seconde ou moins avec SetFrameRate()
Moi, dans mes jeux, je colle un écran de 75Hz (sinon mon cathodique aime pas bien plus bas) et je mets un SetFrameRate(40) donc 40 images par seconde ce qui est largement suffisant (la télé, c'est 25 images par seconde) et ça passe qlque soit l'écran (LCD 60hz par exemple)
Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 21:31
par beauregard
Le Soldat Inconnu a écrit :non, en fait, il faut laisser l'écran à 75Hz mais mettre le taux de rafraichissement à 60 images par seconde ou moins avec SetFrameRate()
Moi, dans mes jeux, je colle un écran de 75Hz (sinon mon cathodique aime pas bien plus bas) et je mets un SetFrameRate(40) donc 40 images par seconde ce qui est largement suffisant (la télé, c'est 25 images par seconde) et ça passe qlque soit l'écran (LCD 60hz par exemple)
mmh, je me rend compte que je ne sais pas où mettre SetFrameRate()
tu met cette commande juste après OpenWindow ? ou après OpenWindowedScreen ? ou encore dans la boucle principale ?
Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 22:20
par Le Soldat Inconnu
une seule fois après OpenWindowedScreen

ou OpenScreen
Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 23:13
par beauregard
Le Soldat Inconnu a écrit :une seule fois après OpenWindowedScreen

ou OpenScreen
effectivement, en testant avec le jeu Oldskull 2 Revamped ! de kelebrindae, cette commande fonctionne à merveille.
Seulement, si on met le joyeux directx9 en sous-système, patatra, cette commande n'a plus d'effet ! Voilà pourquoi çà ne marche pas avec mes codes. D'un côté çà me rassure, car le mystère est enfin résolu, "grâce à nos petites cellules grises" comme dirai Hercule poirot, à l'horripilante moustache.
Bon, maintenant, c'est quand même embêtant, car je n'ai pas beaucoup progressé.
C'est normal que cette commande ne fonctionne pas en directx9 en sous-système, ou c'est, comme je le crains, un bug facétieux

Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 23:33
par Anonyme
Bloque ton FPS à la main , tu limites le nombre d'appel à FlipBuffers() , ( 50hz ) devrais donner quelque chose de fluides sur toute les machines.

Re: fréquence de rafraichissement
Publié : sam. 03/oct./2009 23:49
par beauregard
Cpl.Bator a écrit :Bloque ton FPS à la main , tu limites le nombre d'appel à FlipBuffers() , ( 50hz ) devrais donner quelque chose de fluides sur toute les machines.

le problème c'est que soit j'ai du 20 image/s, soit du 63 image/s, mais j'arrive pas à obtenir du 50 i/s
en 75Hz j'ai de vilaines petites saccades, et ceux quel que soit le fps
tu met Flipbuffers en noSynchronization ?
...non, avec noSynchronization, je n'arrive pas à obtenir un truc aussi fluide qu'en WaitSynchronisation, chuis une belle quiche moi.

dommage, parcequ'en noSynchronization, le cpu se tourne les pouce...
dernière découverte:
avec pb4.40beta3, que l'on choisisse:
FlipBuffers(#PB_Screen_WaitSynchronization )
ou
FlipBuffers ( #PB_Screen_SmartSynchronization )
, cela ne fait plus de différence.
voir pour exemple code de Dobro:
http://www.purebasic.fr/french/viewtopi ... 268#p95268
La lutte sera rude.
Re: fréquence de rafraichissement
Publié : dim. 04/oct./2009 9:49
par Anonyme
Code : Tout sélectionner
OpenConsole()
FPS_LIMIT = 50
Repeat
If (ElapsedMilliseconds() > CheckTime + 1000 / FPS_LIMIT)
CheckTime = ElapsedMilliseconds()
/*AFFICHAGE ICI*/
Else
Delay(1)
EndIf
/* ALGORITHME , ROUTINES DIVERSES , ICI */
/* IA , PATHFINDING , COLLISION , ETC... */
ForEver
Re: fréquence de rafraichissement
Publié : dim. 04/oct./2009 11:30
par Le Soldat Inconnu
J'ai regarder dans mes jeux, et je fais comme ça sinon
je ne limite pas le nombre d'images par secondes mais la fréquence à laquelle on fait les calculs pour déplacer et gérer les éléments du jeux
Code : Tout sélectionner
ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
; On ouvre l'openscreen
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite3D() = 0
MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou l'écran. Vérifiez la présence de DirectX 7 ou supérieur.", 0)
End
EndIf
SetRefreshRate(DesktopFrequency(0))
If OpenScreen(Ecran_Largeur, Ecran_Hauteur, 32, "Ecran") = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0)
End
EndIf
; limite de vitesse des éléments à 25 pas par seconde
; Je parle de limite de vitesse et pas de limite de fréquence de l'écran
; Avec un écran à 75Hz, un FPS à 75, et des éléments qui bouge comme si on n'avait que 25 images par secondes
#Jeu_Traitement_Seconde = 25
#Jeu_Avance = 1000 / #Jeu_Traitement_Seconde
; un petit sprite
CreateSprite(0, 64, 64)
StartDrawing(SpriteOutput(0))
Circle(32, 31, 31, $FFFFFF)
StopDrawing()
Repeat
ClearScreen($000000)
; On lit les évènements clavier et souris
ExamineMouse()
ExamineKeyboard()
; Position de la souris
x = MouseX()
y = MouseY()
; Vitesse du jeux
Jeu_Temps_Actuel = ElapsedMilliseconds()
If Jeu_Temps_Actuel > Jeu_Temps_Memoire
Jeu_Temps_Memoire + #Jeu_Avance
Jeu_Avance = 1
Else
Jeu_Avance = 0
EndIf
; La position des éléments évolue uniquement quand j'ai Jeu_Avance
If Jeu_Avance
Sprite_X + 1
Sprite_Y + 1
If Sprite_X >= Ecran_Largeur
Sprite_X = - SpriteWidth(0)
EndIf
If Sprite_Y >= Ecran_Hauteur
Sprite_Y = - SpriteHeight(0)
EndIf
EndIf
; Je dessine à chaque fois
DisplaySprite(0, Sprite_X, Sprite_Y)
If StartDrawing(ScreenOutput())
DrawingMode(#PB_2DDrawing_Transparent)
FrontColor($FFFFFF)
; Calcul du FPS
FPS_Cpt + 1
If FPS_Cpt >= fps.f
fps = FPS_Cpt * 1000 / (ElapsedMilliseconds() - FPS_Temps)
FPS_Cpt = 0
FPS_Temps = ElapsedMilliseconds()
EndIf
DrawText(0, 0, "FPS = " + StrF(fps, 1))
StopDrawing()
EndIf
FlipBuffers(#PB_Screen_WaitSynchronization)
Until KeyboardPushed(#PB_Key_Escape)
Re: fréquence de rafraichissement
Publié : dim. 04/oct./2009 11:51
par beauregard
Le Soldat Inconnu a écrit :J'ai regarder dans mes jeux, et je fais comme ça sinon
je ne limite pas le nombre d'images par secondes mais la fréquence à laquelle on fait les calculs pour déplacer et gérer les éléments du jeux
Code : Tout sélectionner
ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
SetRefreshRate(DesktopFrequency(0))
merci pour ces commandes

,j'avais complètement occulté la bibliothèque Desktop.
Mes jeux sont toujours trop speed en 75Hz, mais je pense que je m'approche du but.
je trouve dommage de ne pas pouvoir mettre simplement un:
pour forcer le bureau à tourner à 60Hz, hum.
Bien, alors, heu..., je viens de tester ton code, et je te remercie au passage de ton effort

, mais en 75Hz le disque blanc se déplace plus rapidement qu'en 60Hz, avec cette petite saccade qui me nargue.
Donc, si pour toi, il n' y a pas de variation de vitesse entre 60 et 75Hz, une conclusion s'imposera d'elle même: ma carte vidéo trouvera bien tôt le chemin de la poubelle.
Code : Tout sélectionner
Note: Sous Windows XP, le taux de rafraîchissement peut être bloqué par le système ou par les drivers vidéo. Le résultat de cette fonction n'est donc pas forcément fiable.
voilà qui n'est pas glop.
Par contre çà marche bien sur mon vieux PC et sa petite carte ati, quel que soit la fréquence le disque se comporte de la même manière. Bon et bien, c'est ma machine de dev qui a un problème à ce niveau là alors...
merci à tous

Re: fréquence de rafraichissement
Publié : dim. 04/oct./2009 16:01
par beauregard
Oyé, oyé, joyeux compagnon !
J'ai passé le week end a essayer de faire marcher des commandes qui ne fonctionnent pas avec directx9. Alors oui, parfois on avance pas, on a tous connu çà. Mais çà fait toujours aussi mal de sacrifier un week end pour rien, alors que le vendredi soir je pensais naivement terminer cette broutille en 1 heure, erreur.
Avec un écran à 75Hz, le code suivant fonctionne joyeusement car la fréquence est mis à 60 par la commande suivant:
le ptit code( merci au soldat inconnu pour le rappel des bases, j'ai épuré pour bien cerner le problème):
Code : Tout sélectionner
ExamineDesktops()
Ecran_Largeur = DesktopWidth(0)
Ecran_Hauteur = DesktopHeight(0)
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 Or InitSprite3D() = 0
MessageRequester("Erreur", "Impossible d'initialiser la souris ,le clavier ou l'écran. Vérifiez la présence de DirectX 7 ou supérieur.", 0)
End
EndIf
SetRefreshRate(60) ; forcer à 60Hz
If OpenScreen(Ecran_Largeur, Ecran_Hauteur, 32, "Ecran") = 0
MessageRequester("Erreur", "Impossible d'ouvrir l'écran.", 0)
End
EndIf
Repeat
ClearScreen($000000)
ExamineKeyboard()
If Val ( FormatDate ( "%ss" , Date ()))=sek
fps+1
Else
FPS$= Str (fps)
fps=0
EndIf
sek= Val ( FormatDate ( "%ss" , Date ()))
StartDrawing ( ScreenOutput ())
DrawingMode (1)
FrontColor ( RGB (255,255,255))
DrawText (1,1, "FPS: " +FPS$)
StopDrawing ()
FlipBuffers(#PB_Screen_WaitSynchronization)
Until KeyboardPushed(#PB_Key_Escape)
Mais si le subsystem est mis en directx9, alors ce code n'est plus opérationnel.
ps: Si les plus anciens peuvent se remémorer les anciennes versions de pb, afin de savoir si çà le problème est récent... d'avance merci.
j'ai lancé une bouteille à la mer:
http://forums.purebasic.com/english/vie ... 70#p301704
et une réponse de Djes sur un autre post mais pour un problème similaire, enfin je crois:
http://forums.purebasic.com/english/vie ... 0adbdf1570
D'après les réponses il s'agit bien d'un bug, connu depuis longtemps, attendons sagement sa résolution...