| Autor |
Beitrag |
Stino
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 04.04.03 13:27
Hi,
gibt es eine Möglichkeit, auch ohne DelphiX die aktuellen FPS's auszulesen?
|
|
Phobeus
      
Beiträge: 1280
Linux (FC6), WinXP Pro (Box)
D6 Pers, D7 Pro, FPC 2.x
|
Verfasst: Fr 04.04.03 13:29
*g* Mitzählen wie oft in einer Sekunde die Bilder gezeichnet werden? Google mal ne wenig, du solltest erschlagen werden bei sowas, auf nahezu jeder größeren Seite mit Grafikprogrammierung solltest Du eine Lösung finden.
_________________ "Menschen sterben nicht wenn man sie zu Grabe trägt, sondern wenn sie ihre Träume verlieren..."
|
|
Stino 
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 04.04.03 14:37
Titel: bps
Ich mein' ja nur ohne die Komponente DelphiX.
Hab's schon mit google probiert, finde aber nix in Delphi außer halt mit dieser Komponente, und dafür gab es schon ein Topic!
Trotzdem danke,
Carsten
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Fr 04.04.03 15:52
Hi,
wie meinst du das "ohne DelphiX"..?
Benutzt du DelphiX, möchtest aber die FPS von hand berechnen oder wie?? *guckt verwirrt*
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
OregonGhost
      
Beiträge: 215
|
Verfasst: Fr 04.04.03 16:37
Einfach den Kehrwert der Zeit, die ein Frame benötigt hat, bilden und das sind dann die FPS ;c)
Wenn das Nehmen der Zeit dein Problem ist, solltest du dir GetTickCount für grobe und QueryPerformanceFrequency und QueryPerformanceCounter für feine Auflösung anschauen.
_________________ Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
|
|
Stino 
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 04.04.03 17:34
Nein, ich habe diese Komponente nicht installiert. Möchte sie auch eigentlich nicht installieren, und suche deshalb eine Möglichkeit die FPS ohne DelphiX auslesen zu können, also nur mit Delphi4.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Fr 04.04.03 17:38
Hi,
na ja, wie wär's wenn du uns mal verrätst was du machst..? Arbeitest du mit OpenGL, Direct3D..? Irgendne fertige Engine (GLScene etc)??
Ansonsten, im OnIdle-Event der Application.. jedesmal wenn dieses Event aufgerufen wird, hast du 1FPS mehr... also zählst du im OnIdle irgendnen Counter hoch und setzt ihn jede Sekunde 1x auf 0 zurück...
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
Stino 
Hält's aus hier
Beiträge: 14
|
Verfasst: Fr 04.04.03 22:44
Ich probiers mal so, wollte direct3d arbeiten.
thanx, Carsten
|
|
OregonGhost
      
Beiträge: 215
|
Verfasst: Sa 05.04.03 11:54
Ich habe dir oben bereits die korrekte Methode genannt. Diese funktioniert auf jedem Win32-System. Die OnIdle-Methode würde ich nicht empfehlen, denn wenn OnIdle nicht aufgerufen wird, weil dein Programm zu beschäftigt ist, passiert da auch nichts.
_________________ Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: Sa 05.04.03 14:05
| OregonGhost hat folgendes geschrieben: | | denn wenn OnIdle nicht aufgerufen wird, weil dein Programm zu beschäftigt ist, passiert da auch nichts. |
Was bedeuten würde das er 0 FPS hat, was wenn das Programm komplett ausgelastet währe stimmen würde, oder?
Au'revoir,
Aya~
PS: Man rendert seine Scene normalerweise im OnIdle Event, egal ob OpenGL oder Direct3D
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 05.04.03 21:26
warum möchtes du denn die FPS selbst berechnen bring doch garnichts, weil DelphiX sowas schon kann 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Stino 
Hält's aus hier
Beiträge: 14
|
Verfasst: So 06.04.03 09:43
Das ist für ne Belegarbeit in der Schule. Zur Vorführung muss ich die Software aus der Schule nutzten, und die ist, Dank Dr. Kaiser-Chip das standart Delphi 4. Für private zwecke würde ich Delphix gerne nutzen.
Gibt es eigentlich auch ne Möglichkeit die Frames bei Spielen oder so zu messen? wie z.B. das Programm FRAPS. Oder funktionier das auch mit DelphiX? -> Sorry, bin aber totaler Newbie in der Hinsicht.
Danke, Carsten
|
|
OregonGhost
      
Beiträge: 215
|
Verfasst: So 06.04.03 11:39
| Zitat: |
PS: Man rendert seine Scene normalerweise im OnIdle Event, egal ob OpenGL oder Direct3D
|
Nein. Man rendert normalerweise in der Game Loop. Ich habe noch nie ein Direct3D-Programm gesehen, wo jemand auf die Idee gekommen wäre, überhaupt in einem Event zu rendern. Und auch die meisten OpenGL-Programme tun das nicht, weil ein OnIdle-Event nicht plattformübergreifend einheitlich ist. Das heißt natürlich nicht, dass man es nicht tun kann. Üblich ist es aber nicht. Ich verweise hierzu auf den Artikel "Writing the Game Loop" von Robert Dunlop (Microsoft DirectX MVP):
| Robert Dunlop hat folgendes geschrieben: |
OnIdle : This method is intended for handling of low overhead background tasks that are not time-critical. Obviously this does not describe a game! Some of the pitfalls that prevent OnIdle from being useful to us:
- OnIdle will only be called when there are no messages available.
- Once OnIdle has been started, no more messages can be processed until OnIdle returns.
- Once OnIdle lets go of its time slice, the thread will sleep. OnIdle will not be called again until the thread has received new
messages and finished processing them
|
@Stino: Natürlich gibt es die Möglichkeit, sonst würde FRAPS es wohl nicht können ;c) Ich weiß zwar nicht, wie das geht, aber lass FRAPS doch mal durch den Dependency Walker oder TDump laufen, vielleicht bekommst du dann Aufschluss über seine Funktionsweise.
_________________ Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
|
|
Stino 
Hält's aus hier
Beiträge: 14
|
Verfasst: So 06.04.03 15:41
aber lass FRAPS doch mal durch den Dependency Walker oder TDump laufen, vielleicht bekommst du dann Aufschluss über seine Funktionsweise.[/quote]
Wie gesagt, bin newbie...  Was ist genau der Depency Walker oder TDumb eigentlich? Hab dazu auch nichts in der Delphi-Hilfe gefunden.
Danke, Stino
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 06.04.03 16:30
sowas rendert man doch eigentlich in einem Timer mit interval 1 
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
OregonGhost
      
Beiträge: 215
|
Verfasst: So 06.04.03 16:36
TDump gehört zu Delphi. Wenn du dich im Delphi-Bin-Verzeichnis befindest, rufe doch einmal
tdump "d:\Programme\FRAPS\FRAPS.exe" > frapsdump.txt
auf (natürlich musst du den Pfad anpassen), und dann enthält die frapsdump.txt Informationen über die Funktionen, die FRAPS einsetzt.
@mimi: Ich hoffe, du meinst das nicht ernst ;c)
_________________ Oregon Ghost
---
Wenn NULL besonders groß ist, ist es fast schon wie ein bisschen eins.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 06.04.03 17:08
warum denn nicht...
ich habe zwar noch nie was gerendert, aber ich kann mir vorstellen es in einem DXTimer reinzuschreiben(was spricht dagegen) ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Raphael O.
      
Beiträge: 1596
VS 2013
|
Verfasst: So 06.04.03 17:58
ich denke mal, dass könnte Probleme geben, insofern, dass sich das Prog aufhängt...
wenn ein Rendervorgang länger als 1ms dauert, und dann schon den nächsten anfängt hat das Prog nachkurzer Zeit viele Rendervorgänge laufen, wodurch sich die Zeit für jeden einzelnen wieder verringert->mehr angefangene Rendervorgänge usw.
sieht nicht gesund aus 
|
|
Aya
      
Beiträge: 1964
Erhaltene Danke: 15
MacOSX 10.6.7
Xcode / C++
|
Verfasst: So 06.04.03 18:09
| OregonGhost hat folgendes geschrieben: | | Zitat: |
PS: Man rendert seine Scene normalerweise im OnIdle Event, egal ob OpenGL oder Direct3D
|
Nein. Man rendert normalerweise in der Game Loop. Ich habe noch nie ein Direct3D-Programm gesehen, wo jemand auf die Idee gekommen wäre, überhaupt in einem Event zu rendern. Und auch die meisten OpenGL-Programme tun das nicht, weil ein OnIdle-Event nicht plattformübergreifend einheitlich ist. Das heißt natürlich nicht, dass man es nicht tun kann. Üblich ist es aber nicht. Ich verweise hierzu auf den Artikel "Writing the Game Loop" von Robert Dunlop (Microsoft DirectX MVP): |
Ja ok, dann ruft man halt im OnIdle die GameLoop auf
und, das das ein Event ist, liegt nur daran das es in Delphi die VCL gibt...
Natürlich kann man die GameLoop auch in nem extra Thread machen, aber OnIdle ist wohl das verbreitetere (zummindest bei denen, die keine HighEnd spiele machen).
Au'revoir,
Aya~
_________________ Aya
I aim for my endless dreams and I know they will come true!
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: So 06.04.03 18:42
was sind denn HighEnd Spiele ?
(kenne ich davon welche ?)
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|