Flip frage
Übersicht

![]() |
kogBetreff: Flip frage |
![]() Antworten mit Zitat ![]() |
---|---|---|
Guten tag zusammen.
Seit einem Beitrag in einem anderen Thread bin ich ziemlich verunsichert, was es nun zu bedeuten hat: Zitat: Und wegen einem muss ich dich schlagen: Mein pc hat hier grade 1200fps ausgespuckt. Nicht das ich da was gegen hätte, aber... Du hast grade die lebensdauer meines pc's kürzer gemacht als nötig *hihi* WaitTimer() *grins* (und bloß kein flip 1! aber du scheint eh 0 drin zu haben )
Sollte man nun Flip 0 benutzen mit einem Timer, oder reicht Flip 1. Ich Programmiere z.b. auch oft mit Flip 0, ohne Timer jedoch mit Deltatiming abgestimmt auf 60 fps. ist nun irgend eine Variante schädlich für den PC? mfg k.o.g. |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
BtbN |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wenn ein PC von 100% CPU auslastung auf einem Kern schaden nimmt, ist er schlecht gebaut. | ||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Deinem Text nach, muss man demnach keine bedenken bei Flip 1 oder was auch immer haben? | ||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der uralte Unsinn...
![]() Kurz gesagt: Timer + Flip(0) |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
HolzchopfMeisterpacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Doch sollte man, weil niedrigere CPU-Auslastung auch niedrigere Energieaufnahme bedeutet. Da steckt ein ökologischer Gedanke dahinter.
Kurzes Erklärdingens: Bei Flip 1 geht das Programm in eine Schleife über, die so lange abgearbeitet wird, bis der Bildaufbau die letzte Pixelzeile erreicht hat, danach werden Front- und Backbuffer geflippt. Diese Schleife wird ungebremst ausgeführt - das Programm nimmt sich einfach die Rechenleistung die es kriegt und die Folge davon ist, dass die CPU-Auslastung steigt, i.d.R. bei einem Kern auf 100%. Bei Flip 0 werden Front- und Backbuffer bedingungslos geflippt, was zwar in einigen Fällen zu negativ auffallenden Grafikfehlern führen kann (die wiederum durch geschicktes Tüfteln nahezu eliminiert werden können), aber keine weitere CPU-Leistung frisst. ABER: Mit Flip 0 alleine würde der Bildaufbau so oft gemacht, wie deine Hardware halt hergibt (das können dann gut und gerne mal über 1000 Mal pro Sekunde sein) und somit wäre die Ersparnis vernichtet und zudem auch noch der Grafikchip im roten Bereich. Deshalb gehört zum Flip 0 immer ein WaitTimer. Der Timer bremst das Programm aus (nur, wenn nötig) und ist somit Regulator zwischen Hardwareauslastung und Spielkomfort - soweit ich weiss, brauchen Action-Spiele 50-60Hz, um gut spielbar zu sein, während Denk-, Knobel- und rundenbasierte Spiele auch mal mit 20Hz noch auskommen. Bei WaitTimer geht das Programm nicht in eine "Endlos"-Schleife, sondern in einen Wartezustand über, aus dem es vom System erlöst wird, wodurch keine zusätzliche Rechenpower beansprucht wird. mfG Holzchopf edit Mann, Xeres! |
||
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BY ♫ BinaryBorn - Yogurt ♫ (31.10.2018) Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Bitte korrigiert mich, wenn ich falschliege, aber kann man bei Graphics nicht schon nen Aktualisierungsintervall
festlegen und dann später Flip -1 verwenden? Zumindest unter Bmax scheint es zu funktionieren, habe gerade mal verschiedene möglichkeiten durchprobiert. Timer per Graphics mit Flip -1: BlitzMax: [AUSKLAPPEN] Graphics 400, 300, 0, 30Gibt lt. Taskmgr 1% CPU last. Ginge damit. Vollbild: Komischerweise 60FPS, Hertz Angabe bei Graphics scheint im Vollbild problematisch. CPU 1% Einfach flip 0 BlitzMax: [AUSKLAPPEN] Graphics 400, 300, 0, 0Zieht einen Kern @ 100% . Schlecht Vollbild: 4403FPS ebenfalls max CPU Einfach flip 1 BlitzMax: [AUSKLAPPEN] Graphics 400, 300, 0, 0Zieht durch warten einen Kern @ 98% . Schlecht ![]() Vollbild: Haut die graka nichtmehr hoch, da nurnoch 60FPS. CPU immernoch 98% BlitzMax: [AUSKLAPPEN] Graphics 400, 300, 0, 0Macht knapp 2% Last, scheint also bisschen schlechter als per Graphics aber noch gut. Vollbild: 30FPS, 2% CPU Alle getestet im Fenstermodus mit deaktiviertem Debugger. Da im Vollbild die Hertz Angabe bei Graphics nicht funktioniert, sollte man wohl tatsächlich WaitTimer verwenden, zumindest wenn die Anwendung (auch) für vollbild gedacht ist. mfg, Count-Doku Edit: Vollbildwerte hinzugefügt. FPS nach EVGA Precision X Overlay Vollbild: Graphics 1920,1080,32,X |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm das Problem ist aber, wenn ich Flip 0 mit einem Timer verwende, stockt das Programm jede Sekunde kurz :/ bzw. jede halb sekunde ? | ||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das ist komisch.
Habe es gerade mal mit folgendem Testcode probiert, da stockt nichts. BlitzBasic: [AUSKLAPPEN] Graphics 400, 300, 0, 0Bei dir? Wie sieht denn dein Code aus? mfg, Count-Doku |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
BlitzMax: [AUSKLAPPEN] timer=CreateTimer(60) So und beim durch die Welt scrollen so: Code: [AUSKLAPPEN] TEngine.Scrollx2:+(KeyDown(KEY_D)-KeyDown(KEY_A))*(6)
TEngine.Scrolly2:+(KeyDown(KEY_S)-KeyDown(KEY_W))*(6) Mit dem Wattimer() stockt es jede halbe sekunde Kurz. |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
PhillipK |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hast du testweise mal einen extrem hohen wert für CreateTimer() verwendet?
Ich habe so ein problem noch nie bemerkt. Selbst mit 20 Hertz lassen sich damit relativ flüssig spiele gestalten - sofern man ein paar grundregeln beachtet ![]() Allerdings ist das eher feintuning und ein höherer CreateTimer() wert reicht vollkommen, wenn man nichts wirklich großes geplant hat. Der wert, den du bei CreateTimer() eintippst, ist klar oder? Ebenso die funktion von WaitTimer() ? Der wert bezieht sich auf Ticks pro Sekunde. 60 Ticks pro sekunde entspricht also einem tick alle 1/60 sekunde -> 60 FPS. WaitTimer wartet eben immer auf einen neuen tick, was den flüssigen, gleichmäßigen programmablauf gewährleistet. Ich kann mir beim besten willen nicht vorstellen, warum es laggen sollte. Hier sind eventuell ein paar hintergrundinformationen zu deinem PC und sonstigem code nützlich - eventuell liegt es am drumrum, was mit dem Timer bei dir entstanden sind? Versuch doch mal einen testcode von count-doku, die sind so ziemlich die grundstruktur die du brauchst =) Alternativ teste es mit einem Timer der 1000x die sekunde tickt (Das maximum, was timer ermöglichen, meinen tests nach) |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nunja der Testcode funktioniert schon, jedoch bei meiner Anwendung kommt es zum Stocken.
http://www.kognetwork.ch/Underground/Client.rar Mit WASD könnt ihr über die Map scrollen. Bei mir Stockt es :/ *Falscher Link* |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
- Zuletzt bearbeitet von kog am Do, Nov 01, 2012 13:40, insgesamt einmal bearbeitet
![]() |
count-doku |
![]() Antworten mit Zitat ![]() |
---|---|---|
dein Link gibtn 404 ...
Aber in deinem Beispiel hast du BlitzMax: [AUSKLAPPEN] '... Schonmal probiert den Timer vors Flip 0 zu setzen? Also: BlitzMax: [AUSKLAPPEN] timer=CreateTimer(60)Keine Ahnung obs daran liegen kann, wäre aber ein unterschied zwischen unseren Codes. mfg, count-doku |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich tippe drauf dass der sonstige Code schon soviel zeit verschlingt dass ein Tick übersprungen wird. | ||
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3 Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64 B3D BMax MaxGUI Stolzer Gewinner des BAC#48, #52 & #92 |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm nunja, mit Flip 1 oder 0 habe ich keinerlei Probleme bezüglich dem Stocken? | ||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
DAK |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was ich denke, was am Besten ist, ist folgendes:
Haben wir eine (Bildschirm-)Bildwiederholrate von 60, dann sollte Flip 1 ja 60 FPS rauswerfen. Ist hald unökonomisch. Haben wir Flip 0 mit Timer, dann kriegen wir zeitweise Grafikfehler, wenn der Flip und Bildwiederholung nicht synchron laufen. Am geschicktesten sollte dann eine Kombination der Beiden: Flip 1 mit einem Timer auf 61 FPS. Dadurch hält der Timer das Programm den Großteil der Wartezeit zwischen den Frames auf (=Ressourcenschonend) und der Flip 1 hält es dann noch die letzten 0.27 Millisekunden im teuren Flip 1, ist dann aber genau synchronisiert mit dem Bildschirmwechsel -> komplett flackerfrei. Was haltet ihr von der Methode? Insgesamt verliert man dann rund 16 Millisekunden pro Sekunde darin, gibt eine zusätzliche Prozessorbelastung von rund 1.6%, was so gut wie gar nichts ist, vorallem weil es sich nicht auf das Spiel bezieht, sondern nur auf die Rechenzeit, die die Mainloop übrig lässt. |
||
Gewinner der 6. und der 68. BlitzCodeCompo |
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das klingt gut, jedenfalls hab ich so keine Stocker! ![]() |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hattest du bei Graphics die Hertz auf 0? Ich kann mich nur daran erinnern dass es bei mir auch mal stockte trotz Flip 0. Ich fand heraus dass wenn ich bei Graphics die Hertz auf 0 setzte, dass es dann nicht mehr stockte. Irgendwie seltsam, da das ja nur bei Flip -1 Auswirkungen haben sollte.
Ebenfalls merkwürdig finde ich, dass bei meinem PC ein Flip 1 in BMax nie die CPU-Auslastung extrem in die Höhe getrieben hat, so als ob es beim Flip 1 auch in den Wartezustand ginge. Hatte gerade mal 6% Auslastung (Quad-Core, 8 virtuelle CPUs). Mit Flip 0 und Timer ist allerdings auch da das Ergebnis besser (0% im TaskManager). |
||
![]() |
kog |
![]() Antworten mit Zitat ![]() |
---|---|---|
Jop, ich nutze 0 Hertz bei Graphics, Flip 0 und Timer = Stocken
Jetzt mit Flip 1 und Timer 61 stockt es nicht. |
||
Windows 7 Home Premium 64bit
CPU: Intel Core i5 3450 Ivy Bridge GPU: HIS HD 4870 1GB GDDR5 RAM: 4x 4GB DDR3-SDRAM Dual Channel |
![]() |
Jolinah |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ah ok. Ja der Ansatz mit Flip 1 und Timer ist schon nicht schlecht. Und so lang's funktioniert ![]() |
||
![]() |
Nova |
![]() Antworten mit Zitat ![]() |
---|---|---|
Sagen wir mal so: Gibt es eine Möglichkeit, Flip 0 so zu benutzen, dass man keine Bildfehler (tearing) bekommt? Mich persönlich stört das ganze nämlich tierisch, da ist mir auch die Prozessorauslastung egal... | ||
AMD Athlon II 4x3,1GHz, 8GB Ram DDR3, ATI Radeon HD 6870, Win 7 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group