Ich portiere derzeit einen Grafikterminal-Renderer von Windows nach Linux. Die Windows-Version verwendet die Win32-Konsolen-API zum Rendern von Farben und läuft ziemlich reibungslos. Unter Linux versuche ich, ANSI-Escape-Codes zum Festlegen der Farbe zu verwenden, aber die Leistung ist schlecht. Der folgende Code ist ein Beispiel vom Renderer:
Ich habe die Funktionalität von 16 Farben auf Truecolor erweitert (was kann dazu beitragen, dass sich die Renderzeit erhöht.)
Durch die Lektüre von StackOverflow weiß ich, dass andere Leute versucht haben, dasselbe zu tun, mit Ergebnissen wie meinem. Ich habe auch gelesen, dass andere davon abraten, daher bin ich unsicher, wie ich am besten vorgehen soll.
Versuch:
Ich weiß, dass die printf-Funktion nach einem Format und in Bezug auf die Datentypen arbeitet, die das Format angibt. Ich habe die Art und Weise, wie ich Farbe in int konvertiere, geändert und sie so gut wie möglich optimiert, aber es hat keinen spürbaren Unterschied gemacht.
Gibt es also eine Konsolen-API unter Linux, die eine bessere Leistung als ANSI-Sequenzen bietet?
Ich portiere derzeit einen Grafikterminal-Renderer von Windows nach Linux. Die Windows-Version verwendet die Win32-Konsolen-API zum Rendern von Farben und läuft ziemlich reibungslos. Unter Linux versuche ich, ANSI-Escape-Codes zum Festlegen der Farbe zu verwenden, aber die Leistung ist schlecht. Der folgende Code ist ein Beispiel vom Renderer: [code] for(int row = 0; row < height; row++) { for(int col = 0; col < width; col++) { struct term_color pix = display[row*width+col]; printf("\x1b[48;2;%d;%d;%dm ", pix.r, pix.g, pix.b); } } [/code] [b]Hinweis[/b]: [list] [*]Ich habe die Funktionalität von 16 Farben auf Truecolor erweitert (was kann dazu beitragen, dass sich die Renderzeit erhöht.) [*]Durch die Lektüre von StackOverflow weiß ich, dass andere Leute versucht haben, dasselbe zu tun, mit Ergebnissen wie meinem. Ich habe auch gelesen, dass andere davon abraten, daher bin ich unsicher, wie ich am besten vorgehen soll. [/list] [b]Versuch[/b]: [list] [*]Ich weiß, dass die printf-Funktion nach einem Format und in Bezug auf die Datentypen arbeitet, die das Format angibt. Ich habe die Art und Weise, wie ich Farbe in int konvertiere, geändert und sie so gut wie möglich optimiert, aber es hat keinen spürbaren Unterschied gemacht. [/list] [b]Gibt es also eine Konsolen-API unter Linux, die eine bessere Leistung als ANSI-Sequenzen bietet?[/b]
Ich verwende die Escape-Sequenz (JAVA) „\a“ oder „\a“, dann erhalte ich einfach Fehlermeldungen...
Mein Code...
class Bell{
public static void main(String args[]){
System.out.println( \a );
}
}...