FPS zu niedrig suche Ideen
-
Die erinnerung schrieb:
@hustbaer, knivil und rapso:
Wäre doch irgendwie komisch, wenns ein
int
-Pointer wäre, oder?Wäre aber viel kuhler wenn er einen sprechenden Namen hätte.
vertexBufferData
oderlockedVertices
oder irgendsowas.Und ein Kommentar, wo drin steht dass ein void-Pointer ein void-Pointer ist, ist wirklich komplett sinnfrei.
Weitere Verbesserungsvorschläge (ich hab mir mal nur das eine Beispiel rausgegriffen):
// Iteration 1: bessere Namen + Scope für den Zeiger: { void* lockedVertices = 0; vertexBuffer->Lock(0, 0, &lockedVertices, 0); memcpy(lockedVertices, vertices.data(), sizeof(CUSTOMVERTEX) * vertices.size()); vertexBuffer->Unlock(); } // Iteration 2: Auslagern von Lock/Unlock in eine Helperklasse (die dann Fehlercodes prüft, // ggf. Exceptions wirft oder read()/write() in NOPs verwandelt wenn was schief gegangen ist - je nachdem was mehr Sinn macht) { VertexBufferLock vbl(vertexBuffer, D3DLOCK_DISCARD); vbl.write(0, vertices.data(), sizeof(CUSTOMVERTEX) * vertices.size()); } // Iteration 3: Auslagern in eine Helper-Funktion UpdateVertexBuffer(vertexBuffer, vertices);
Iteration 4 wäre dann CreateVertexBuffer + UpdateVertexBuffer in eine eigene Hilfsfunktion rauszuziehen.
uswusf.
-
Das macht den Code doch nicht schneller. Eher langsamer! (Ich bin mir sicher, aber nicht 100%)
-
Schreibs in Assembler, nimm SSE und versuchs auf Integerbasis umzusetzen, mach mach Loopunrolling, vermeide zuviele If-Vergleiche, switches und Jumps, achte auf Registerabhängigkeiten und Datenalignement, benutze Cacheperformance, such dir einen anderen Algorithmus, mehr Parallelität...
hm...unterhalte ich mich jetzt schon mit compilern?...ach egal
-
Die erinnerung schrieb:
Das macht den Code doch nicht schneller. Eher langsamer! (Ich bin mir sicher, aber nicht 100%)
Naja... es gibt schon Fälle wo was dadurch schneller wird, aber eher wird es minimal langsamer oder bleibt gleich.
Darum geht's aber nicht.
Es macht nämlich dich beim Programmieren schneller. Das Programm übersichtlicher. Einfach alles besser.
-
Das Problem ist, dass ich auf Millisekunden und weniger achten muss, da ich sowas teilweise 33.554.432 aufrufe. Und eine hunderstel Millisekunde mehr oder weniger macht dann 336 Sekunden Unterschied.
Ich muss auf sowas achten.
-
Na wenn das so ist kannste ja alle Funktionen als inline deklarieren.
-
Was für ein Spiel erstellst du überhaupt und was passiert bzw was soll dein code da tun?(Man verzeihe mir falls ich das überlesen haben sollte)
-
Die erinnerung schrieb:
Das Problem ist, dass ich auf Millisekunden und weniger achten muss, da ich sowas teilweise 33.554.432 aufrufe. Und eine hunderstel Millisekunde mehr oder weniger macht dann 336 Sekunden Unterschied.
Ich muss auf sowas achten.
Ja, wenn du glaubst
-
Spiel:
Besteht aus Blöcken (512 * 128 * 512 (x, y, z) = 33.554.432)
Für mehr Infos, ließ mal bitte hier: http://blockforge.blogger.de/topics/Geschichte/Mein Code soll die Welt anzeigen. Und versuche, ihn zu optimieren.
-
Ein erster Schritt wär wohl, nur die Blöcke zu zeichnen die auch potentiell sichtbar sind. Stichwort: Frustrum Culling, Octree
-
Keine Angst, ich lsse nicht alle Seiten zeichnen.
Wenn zwei solide undurchsichtige Blöcke nebeneinader sind, dann werden die Kontaktseiten nicht mit gerendert!
-
Das hat nichts zu tun mit dem was ich gesagt hab...
-
Ich google Morgen.
Hab keine Zeit mehr.