Seite 1 von 1

SetFrameRate(120) - Framerate läuft amok

Verfasst: 26.06.2011 22:27
von GPI
SetFrameRate(120) scheint zumindest den Wert 120 überhaupt nicht zu mögen, anstatt einer Begrenzung auf eine 120Hz werden soviele Bilder berechnet, wie die Maschine hergibt.
119 und 200 werden ohne Probleme richtig umgesetzt (hab es mit Fraps überprüft)

Der Fehler tritt nur auf, wenn die Bildschirmwiederholrate auf 120 Hz steht (geht mit meinen 3D-Monitor ohne Probleme). Wenn ich den auf 100Hz stelle, dann tritt der Fehler bei setframerate(100) auf.

60Hz hab ich leider nicht zur Verfügung - das verweigert meine NVDI-Karte zum einstellen. Möglich das der Fehler auch auf 60 hz funktioniert.

Grobe Vermutung: Ich hab den Screen mit #PB_Screen_NoSynchronization geöffnet. SetFrameRate scheint wohl zu kontrollieren gewählte Hz=BildschirmHz -> kein Eingriff nötig und übersieht das #PB_Screen_NoSynchronization zumindest beim Windowed Screen.

Hier ein Beispielcode zum experimentieren

Code: Alles auswählen

Dim x.f(10)
Dim y.f(10)
Dim dx.f(10)
Dim dy.f(10)

For i=0 To 10
  x(i)=Random(640)
  y(i)=Random(640)
  dx(i)=2-Random(4)
  dy(i)=2-Random(4)
Next
If OpenWindow(0,0,0,640,400,"test", #PB_Window_ScreenCentered|#PB_Window_SystemMenu)
  InitSprite()
  If OpenWindowedScreen(WindowID(0),0,0,640,400,#False,0,0,#PB_Screen_NoSynchronization)
    SetFrameRate(120);119 geht, 120 nicht, 200 geht.
    Repeat
      ClearScreen(0)
      StartDrawing(ScreenOutput())
      For i=0 To 10
        ox=x(i):oy=y(i)
        If x(i)+dx(i)<0 Or x(i)+dx(i)>640
          dx(i)=-dx(i)
        EndIf
        If y(i)+dy(i)<0 Or y(i)+dy(i)>400
          dy(i)=-dy(i)
        EndIf
        x(i)+dx(i)
        y(i)+dy(i)
        LineXY(ox,oy,x(i),y(i))
      Next
      StopDrawing()
      FlipBuffers()
    
    Until WindowEvent()=#PB_Event_CloseWindow
  EndIf
EndIf
Edit: Purebasic 4.51

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 27.06.2011 19:21
von Mok
Hier läuft's ohne Probleme mit 60, 120 und 200...

Edit: Bei 59 tritt derselbe Effekt auf :shock:, mal schnell in der Systemsteuerung nachgeschaut... da stehen tatsächlich 59 Hertz! Zwar stehen auch 60 Hz zur Auswahl, allerdings springt die Auswahl nach einem klick auf "OK" auf 59 Hertz zurück :?:

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 27.06.2011 19:23
von GPI
Welch Hz-Zahl hat dein Monitor? Wenn der 60Hz hat, stell mal setframerate( 60) ein.

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 27.06.2011 21:49
von cxAlex
Kann ich hier bestätigen.

Am 60 Herz Monitor dreht der Code durch und berechnet einfach ohne Begrenzung wenn ich die Framerate auf 60 stelle. 59 ist ok, 61 auch, 120 auch, ... . Nur 60 NICHT.

Gruß, Alex

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 28.06.2011 13:28
von FosJonas
Bei meinem 60 Herz Monitor(unter Ubuntu) funktioniert es wunderbar, getestet habe ich frames von 30-121 und dabei ist der Code nie durchgedreht.

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 01.07.2011 00:48
von Andreas21
59, 120 und 200 ok. Bei 60 leuft er doppelt bis drei mal so schnell.

Win 7 x86

Re: SetFrameRate(120) - Framerate läuft amok

Verfasst: 01.07.2011 04:15
von PureLust
Bei mir das Gleiche - wenn die eingestellte FrameRate der Bildwiederholfrequenz des Monitors entspricht (bei mir 60Hz) scheint SetFrameRate() nicht zu funktionieren.

Testet on: Win7-64Bit, PB4.51

Greetz, PL.