SetFrameRate(120) - Framerate läuft amok
Verfasst: 26.06.2011 22:27
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
Edit: Purebasic 4.51
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