Seite 1 von 2

Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 24.01.2012 10:38
von Velox
Beim schreiben eines eigenen FPS-Anzeigers, ist mir nach dem Besuch von Purearea ein Sourcecode aufgefallen, der wohl die FPS auf 1000 erhöhen kann.

http://www.purearea.net/pb/CodeArchiv/G ... itedFPS.pb

Das können doch keine echten 1000 Hz sein, oder doch?
Mein Monitor schafft maximal auf 1024x768 bis 100 Hz.

Würde gerne mal eure Meinung dazu lesen.

Grüße

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 24.01.2012 12:43
von Falko
Wenn ich das richtig sehe, geht es im Source um die
Keyboard-Frequenz.

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 26.01.2012 13:36
von Thorium
FPS und Bildschirmwiederholrate sind zwei verschiedene Dinge.
FPS gibt an wieviele Bilder pro Sekunde dein Spiel ausgibt und die Bildschirmwiederholrate gibt an wie oft pro Sekunde das Bild neu aufgebaut wird.

Man kann durchaus mehr Bilder an den Monitor senden als er mit seiner Bildwiederholrate anzeigen kann. Das wird aber nur zum Performance messen gemacht, es entstehen dabei nämlich unschöne Effekte da mitten im Bildaufbau das Bild gewechselt wird und sich somit das Bild auf dem Bildschirm aus Zeilen aus verschiedenen Bildern zusammensetzt.

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 02.02.2012 22:12
von Velox
Wie könnte ein Code aussehen zum ermitteln von FPS?
Denn wenn ich das richtig sehe dann zeigt der Code den ich benutze nur die Hz an und nicht die FPS?!

Code: Alles auswählen

If Val(FormatDate("%ss", Date())) = sek
		
		FPS + 1
		
	Else
		
		FPS$ = Str(FPS)
		FPS = 0
		
	EndIf
	
	sek = Val(FormatDate("%ss", Date()))
	
	StartDrawing(ScreenOutput())
		
		DrawingMode(#PB_2DDrawing_Transparent)
		If FPS$ <= "24" : DrawText(X, Y, "FPS: " + FPS$, RGB(150, 000, 000)) : EndIf
		If FPS$ >= "25" And FPS$ < "50" : DrawText(X, Y, "FPS: " + FPS$, RGB(205, 145, 015)) : EndIf
		If FPS$ >= "50" : DrawText(X, Y, "FPS: " + FPS$, RGB(050, 185, 050)) : EndIf
		If FPS$ > FPSMax$ : FPSMax$ = FPS$ : EndIf
		DrawText(10, 10, "FPS (Max): " + FPSMax$, RGB(150, 150, 150))
		
	StopDrawing()

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 02.02.2012 23:34
von NicTheQuick
Ich weiß nicht, was dein Code da genau macht, aber ich hab schon aufgehört ihn zu analysieren als ich 'FormatDate()' entdeckt hatte.
Hier mal ein Beispiel für einen Code, der dir die aktuellen FPS zurückgibt, wenn du ihn einmal pro Schleifendurchlauf aufrufst:

Code: Alles auswählen

Procedure.f FPS()
	Static time.i = -1
	Protected currentTime.i = ElapsedMilliseconds()
	Protected timeDiff.i = currentTime - time
	time = currentTime
	
	ProcedureReturn	1000. / timeDiff
EndProcedure

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 02.02.2012 23:43
von Drago
Also, ich will mich ja nicht einmischen, aber FPS bedeutet
Frames Per Second
Und das zeigt KEINER von eueren Codeschnippsel an... :freak:

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 02.02.2012 23:52
von NicTheQuick
Also meiner tut, was er soll. Und rein mathematisch gesehen ist er auch korrekt. Wie hast du es denn gemessen?
Das folgende Programm gibt mir genau 25.0 aus, was so viel bedeutet, wie dass die For-Schleife mit 25 Hz läuft.

Code: Alles auswählen

Procedure.f FPS()
	Static time.i = -1
	Protected currentTime.i = ElapsedMilliseconds()
	Protected timeDiff.i = currentTime - time
	time = currentTime
	
	ProcedureReturn	1000. / timeDiff
EndProcedure

For i = 1 To 50
	Debug FPS()
	Delay(40)
Next

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 02.02.2012 23:58
von Drago
So wie ich es verstanden habe, sucht er eine Code mit dem er die FPS ermitteln kann.
Bilder pro Sekunde, oder stehe ich jetzt irgendwie auf der Leitung ?

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 03.02.2012 00:05
von Drago
Die Hertzzahl gibt an, wie oft das Bild vom Monitor neu aufgebaut wird (Bildwiederholrate) und die FPS sind die "Frames per second" die die Grafikkarte zum Monitor schickt.

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Verfasst: 03.02.2012 00:08
von ts-soft
NicTheQuick hat die ganz schnellen Durchläufe übersehen, dann gibt es DivByZero :mrgreen:

Code: Alles auswählen

Procedure.f FPS()
   Static time.i = -1
   Protected currentTime.i = ElapsedMilliseconds()
   Protected timeDiff.i = currentTime - time
   time = currentTime
   If timeDiff > 0
    ProcedureReturn   1000. / timeDiff
   EndIf
EndProcedure

For i = 1 To 50
   Debug FPS()
   Delay(40)
Next 
// böses k entfernt :mrgreen: