Konsolenausgabe beschleunigen?



  • Ok, danke schon mal vorab 😉 Ich musss mir das noch anschauen. Kann evtl dauern. Aber trotzdem schon danke für die Erweiterungen.

    Bye und so



  • Wow! Also vielen Dank. Die Änderungen beschleunigen ja enorm. Vieles davon war mir bis dahin unbekannt, war mir also über die Möglichkeiten gar nicht bewusst.

    Deine Idee die Zeichen in einem Vorgang zu setzen, erinnert mich an diese Funktion:

    void clearScreen(HANDLE set)
    {
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        COORD pos;
        DWORD written;
        pos.X = 0;
        pos.Y = 0;
        GetConsoleScreenBufferInfo(set, &csbi);
        FillConsoleOutputCharacter(set, ' ', csbi.dwSize.X * csbi.dwSize.Y, pos, &written);
    }
    

    Wo ich mich schon gefragt habe, ob man diese Art von Ausgabe irgendwie anpassen könnte. Aber ich bin jetzt schon ein großes Stück weiter.



  • Dann warte mal auf hustbaer, der per puts/printf/cout noch erheblich viel schneller kann. Ich bin gespannt!



  • Im Moment war sogar paletteShift noch eine Bremse. Die kann man gut noch um eine Zehnergröße verringern 😋



  • Mox schrieb:

    Ich bin schon ganz gespannt, wie der Schwätzer von oben mit puts usw. mehrere 100 FPS hinbekommen will.

    Mox schrieb:

    Dann warte mal auf hustbaer, der per puts/printf/cout noch erheblich viel schneller kann. Ich bin gespannt!

    Bist du irgendwie doof oder sowas?

    Dein Beispiel läuft bei mir mit etwa 200~300 FPS (im Debug, mit Debugger dran hängen).
    Umgebaut auf puts -Ausgabe läuft es, oh Wunder, ca. genau gleich schnell. Bzw. im Release und ohne Debugger dran hängen sogar weit jenseits der 500 FPS. Natürlich ohne Farben - das geht unter Windows halt nicht wirklich mit puts.

    Würde mich echt interessieren was manche Leute für ein Problem haben...

    ps: Vielleicht liegt es auch daran dass ich das ganze auf einem PC teste, und nicht auf einem C64 mit Windows Emulator oder der Steuereinheit eines Kaugummiautomaten?



  • hustbaer schrieb:

    ps: Vielleicht liegt es auch daran dass ich das ganze auf einem PC teste, und nicht auf einem C64 mit Windows Emulator oder der Steuereinheit eines Kaugummiautomaten?

    Wenn Du sonst nichts sinnvolles beizutragen hast, so hast Du doch wenigstens den Längsten. Glückwunsch!



  • Nun streitet Euch bitte wegen meiner Anfrage nicht 😉

    Diese wurde doch in meinen Augen hervorragend gelöst und man sieht die Beteiligten, mehr zählt doch nicht ...



  • Wir streiten uns nicht wegen deiner Anfrage.
    Wir streiten uns weil Mox ein Idiot ist.



  • Hallo,

    ich hätte hier in dem Zusammenhang noch eine Frage. Es geht um die WriteConsoleOutput() Funktion.

    static CHAR_INFO outBuffer[Width * Height];
    
            for (unsigned int x = 0; x<Width; x++)
            {
                for (unsigned int y = 0; y<Height; y++)
                {
                    buffer[x][y] = (plasma[x][y] + paletteShift) % cha_number;
                    outBuffer[(Width * y) + x] = palette.at(buffer[x][y]);
                }
            }
            SMALL_RECT rc = { 0, 0, Width - 1, Height - 1 };
            WriteConsoleOutput(set, outBuffer, COORD { Width, Height }, COORD { 0, 0 }, &rc);
    

    Gibt es eine Möglichkeit, das fertige CHAR_INFO outBuffer[] (also vor dem eigentlichen WriteConsoleOutput()) per Referenz an eine Funktion zu übergeben, um nachträglich noch einige Werte/Inhalte zu verändern?



  • Falls in der Richtung nichts möglich sein kann, ich habe und verändere die Werte jetzt erst mal in einem std::array und übertrage die dann zum Schluss in den outBuffer.


Anmelden zum Antworten