Echte Hz-Angabe? Purearea Source LimitedFPS

Für allgemeine Fragen zur Programmierung mit PureBasic.
Velox
Beiträge: 39
Registriert: 18.09.2011 18:02

Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag von Falko »

Wenn ich das richtig sehe, geht es im Source um die
Keyboard-Frequenz.
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Thorium
Beiträge: 1722
Registriert: 12.06.2005 11:15
Wohnort: Germany
Kontaktdaten:

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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.
Zu mir kommen behinderte Delphine um mit mir zu schwimmen.

Wir fordern mehr Aufmerksamkeit für umfallende Reissäcke! Bild
Velox
Beiträge: 39
Registriert: 18.09.2011 18:02

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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()
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag von Drago »

Also, ich will mich ja nicht einmischen, aber FPS bedeutet
Frames Per Second
Und das zeigt KEINER von eueren Codeschnippsel an... :freak:
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8838
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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 ?
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Echte Hz-Angabe? Purearea Source LimitedFPS

Beitrag 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:
Zuletzt geändert von ts-soft am 03.02.2012 01:35, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten