wieviel Zeit kost %?
-
kann mir jemand sagen, wo ich vieviel Gewinn mache ??
if (tick >= 10) tick = 0; draw (animation, tick);
oder
draw (animation, tick % 10);
Die Variante mit dem Modulo sollte ja eigentlich die schnellere sein..
Ich will damit eine konstante Geschwindigkeit bei variabler Framerate erreichenTick wird über nen SDL_Timer ständig erhöht.
Mein Problem ist nur, dass ich keiner Möglichkeit habe, dieses vernünftig zu testen.,
Mache ich ein printf() wird der Müll ja auf die Platte geschrieben, wodurch ich eine konstante Framerate von 60 Bildern/s erhalte.
Auch wenn ich nur eine Ausgabe direkt nach dem Eventloop mache, bekomme ich den Wert..
Aber warum bitte??while (!quit) { SDL_PollEvent(&event) switch () ... now = SDL_GetTicks(); img->draw(animation, tick % 10); SDL_GL_SwapBuffers; } printf ("Frame : %f\n", (1.0f/ (float(SDL_GetTicks() - now))) *1000 ); ..
Selbst wenn ich nichts darstelle ist das Ergebnis das Gleiche..
-
Meinst du wirklich das macht nen merkbaren Unterschied?!?!
Edit:
Wenn ja, dann würdest du es ja merken
-
naja, ein so nen Ding vielleicht nicht, aber tausend?
Wie auch immer.
Was ich halt komisch finde :
ob ich mein Bild nun male oder nicht,
viel schneller wird der Counter nicht.
Hab schon vieles rumprobiert,
doch schlußendlich resigniert.
Wenns mehr als 30 Bilder sin'
kommt man mit dem Mist schon hin...
-
DocJunioR schrieb:
kann mir jemand sagen, wo ich vieviel Gewinn mache ??
if (tick >= 10) tick = 0; draw (animation, tick);
oder
draw (animation, tick % 10);
na ich nehme mal an du hast nen p4 2ghz
das erste dürfte dann wohl ca 10hz schneller sein (im worst case). wenn du nun vielleicht 100fps hast, dürftest du mit der ersten lösung ca (wenn ich mich nicht verrechnet habe) 100.00005fps.btw, wenn du
printf ("Frame : %f\n", (1.0f/ (float(SDL_GetTicks() - now))) *1000 );
in
printf ("Frame : %f\n", (1000.0f/ (float(SDL_GetTicks() - now))) );
änderst, dürftest du nochmals 7hz raushollen.
wenn du hinter "Frame" das leerzeichen weglässt, würdest du nochmals 1hz sparen und ich würde dir aber empfehlen das in assembler zu schreiben. aber da gibt es noch mehr dass du raushollen kannst, mach dir ne stringtable mit ca 1000 einträgen und anstatt printf, indizierst du in der table nach dem string für die framerate, auf meinem gba hat das ca 10khz pro aufruf gesparrt!
rapso->greets();
-
rapso schrieb:
btw, wenn du
printf ("Frame : %f\n", (1.0f/ (float(SDL_GetTicks() - now))) *1000 );
in
printf ("Frame : %f\n", (1000.0f/ (float(SDL_GetTicks() - now))) );
änderst, dürftest du nochmals 7hz raushollen.
Reine Neugier: sollte das nicht der Compiler erledigen?
Ausserdem: die Multiplikation macht 7Hz aus? sollte das nicht in 1 Takt zu schaffen sein? (hab k.A. von Asm, also sorry wenn die Frage dumm ist)
-
Doch ich habs nachgerechnet. Stimmt genau!
Bye, TGGC (Keine Macht den Dummen)
-
Stell Dir vor, Du hast mehrere Betonbloecke, jeder mit mehreren Kilometern Kantenlaenge, die nebeneinander liegen. Dazwischen liegt ein Ball mit 20 Zentimetern Durchmesser, und Du fragst Dich, ob ein Ball mit 30 Zentimetern Durchmesser eine Rolle im Vergleich zu den Betonbloecken spielt.
-
Power Off schrieb:
Stell Dir vor, Du hast mehrere Betonbloecke, jeder mit mehreren Kilometern Kantenlaenge, die nebeneinander liegen. Dazwischen liegt ein Ball mit 20 Zentimetern Durchmesser, und Du fragst Dich, ob ein Ball mit 30 Zentimetern Durchmesser eine Rolle im Vergleich zu den Betonbloecken spielt.
angenommen du machst den ball weg und, da du in der nähe bist, schmiergelst du auch noch gleich paar millimeter von den blöcken weg die drumherum sind, dann hast du glat 30.01cm gesparrt. das ist doch amazing. ich würde dafür selbstverständlich auch nen neuen thread aufmachen, gibt sicherlich tausende von menschen die diese frage beschäftigt
@Blue-Tiger
nein, der kompiler dürfte eigentlich nichts umstellen, weil dadurch genauigkeit eventuell verloren geht... mich würde sowas nicht jucken, aber soweit ich weiß ist das leider so. 7hz dauert nunmal ein mull, auf manchen systemen mehr, auf manchen weniger, aber 7hz passt scho.rapso->greets();
-
Hmm.. also ich habe immer Konstant 62.25000 Bilder, bzw. 58.875...
Egal was ich tue - kann sogar die darstellung rauslassen.
Irgendwie wundert mich das..Aaber mal so nebenbei: Optimierungsfragen haben mich bis Dato eignetlich nicht sonderlich interessiert, weil ich selten mal was gemacht hab das Ressourcen frißt. Muss wohl mal das Forum durchkramen, was man da so alles tun kann..
P.S.: Ich arbeite auf nem P4M mit 3.2GHz. Die Grafikkarte ist allerdings nur ne FX go 5200..
-
Vsync?
-
DocJunioR schrieb:
kann mir jemand sagen, wo ich vieviel Gewinn mache ??
if (tick >= 10) tick = 0; draw (animation, tick);
oder
draw (animation, tick % 10);
jo. du mußt zuerst tick als unsigned definieren. und dann machste
draw (animation, tick % 8);//weil das zu tick&7 wird
oder wenn du ein held bist
//nutzt der compiler den befehl XLAT, wenn tick ein char ist? draw (animation, tick="\1\2\3\4\5\6\7\10\11"[tick]);
-
volkard schrieb:
oder wenn du ein held bist
//nutzt der compiler den befehl XLAT, wenn tick ein char ist? draw (animation, tick="\1\2\3\4\5\6\7\10\11"[tick]);
garnicht so dumm, die 0 am ende des strings gleich mit zu benutzen
-
VSync?? Meinst nicht zufällig die Vertikale Synchronisation, bzw. Strahlrücklauf? Ich denkt, sowas übernimmt openGL für mich? Zumal der bei nem TFT wenn, dann auch nur virtuell existiert..
Wie dem auch sei. Das Ganze scheint aber eher mit dem SDL_GL_SwapBuffers zu tun haben..
Nutze ich keinen Doublebuffer, hab ich locker 1000 Frames pro Sekunde..
Allerdings flackters dann auch saumäßig..
-
DocJunioR schrieb:
VSync?? Meinst nicht zufällig die Vertikale Synchronisation, bzw. Strahlrücklauf? Ich denkt, sowas übernimmt openGL für mich? Zumal der bei nem TFT wenn, dann auch nur virtuell existiert..
Wie dem auch sei. Das Ganze scheint aber eher mit dem SDL_GL_SwapBuffers zu tun haben..
Nutze ich keinen Doublebuffer, hab ich locker 1000 Frames pro Sekunde..
Allerdings flackters dann auch saumäßig..mit aktiviertem Vsync solltest du _AFAIK_ nie mehr FPS haben als dein Bildschirm darstellen kann. D.h. bei einem 60 Hz Bildschirm (TFTs laufen normalerweise so mit 60 Hz) wirst du nicht mehr als 60 FPS bekommen.
-
axoo..
naa gut, dann bin ich ja beruhigt, wa
-
Also es ist doch Wahnsinn, was man alles tun muss, um in die Heldenliste zu kommen..