FPS zu niedrig suche Ideen



  • Das wäre eine Idee. Ich probiere jetzt aber erst das andere aus.

    EDIT: Wie viele Chunks sollte ich zusammen fassen?


  • Mod

    Die erinnerung schrieb:

    Und beide Versionen zusammen schweißen, geht nicht! Leiß einfach mal, was die Versionen für anätze haben. Ich kann nicht alle Chunks rendern und doch alle zusammenfügen.

    erstmal nachdenken, dann posten, wirkt sonst so nach dunning kruger 😉

    @hustbaer, knivil und rapso:

    Wäre doch irgendwie komisch, wenns ein int -Pointer wäre, oder?

    ich hoffe du es ist nur dein humor der da spricht und du hast ein dazulernfaehiges wesen. es ist nicht schlim fehler zu machen, es ist nur schlim sie nochmal zu machen.

    Die erinnerung schrieb:

    Das wäre eine Idee. Ich probiere jetzt aber erst das andere aus.

    EDIT: Wie viele Chunks sollte ich zusammen fassen?

    so dass es am besten laeuft -> konfigurierbar machen und konfigurationen durchtesten bis du die beste findest. ansonsten erwarte von jedem eine andere lottozahl, da niemand ausser dir feststellen kann, welcher wert am schnellsten laeuft.



  • Ok ich probiere es dann mal

    Und kann mir jemand beim optimieren vom Code in den einzelnen Chunks zum erzeugen der Vertices helfen?



  • 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 oder lockedVertices 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.


Anmelden zum Antworten