CPU-Last bei Overpainting
Verfasst: 1. Dezember 2009 10:44
Hallo zusammen !
Prinzipiell war ich auf der Suche nach einer Möglichkeit um über/auf eine OpenGL-Szene Text zu zeichnen.
Das schnellste in der Hinsicht soll es wohl sein, den Text als Textur zu zeichnen.
Aber der Overpainting-Ansatz aus den Beispielen von QT gefällt mir irgendwie besser ... da ist mehr Spielraum
Als denn, habe ich das Overpainting Beispiel genommen und ihm ein glthread verpasst, der nichts anderes macht als alle 20ms die "Szene samt Text" zu zeichnen, also der Thread ruft alle 20ms die update()- bzw. animate()-Funktion des GLWidgets auf.
Soweit so gut.
Problematisch wird es wenn's um die Auslastung geht ...
Läuft das Programm alleine - also sonst kaum/kein Programm am laufen, so ist die CPU-Last, laut Task-Manager bei ~2 % ...
Wenn ich jetzt aber ein Programm starte z.B.: Opera, Skype oder Trillian, so klettert die CPU-Last des Overpainting-Programms auf ~10% oder mehr und bleibt auf diesem hohen Niveau ...
Wenn ich aber z.B. Firefox starte, bleibt die Auslastung bei ~2%
Bis ich auf dieses Phänomen gestoßen bin ...
Aber es ist reproduzierbar ! Auf mehreren PCs !
Das Ganze tritt nicht ein, wenn ich wie im (original) Beispiel den QTimer benutze um update()/animate() aufzurufen, sodass die Auslastung hier stets konstant ist.
Ähmm, was mach ich falsch
?
Hat Jemand 'ne idee ?
Muß was am Thread getan werden ... Aber was ? Mutexe setzen ? Warten bis ... ?
Oder was ist das für ein Phänomen ?
Woran könnte das liegen ?
Wollt Ihr den Quellcode ?
Grüße,
funk
P.S. Thread deswegen, weil ich die Erfahrung gemacht habe, dass unter hoher Last QTimer-Events verschluckt werden ...
Prinzipiell war ich auf der Suche nach einer Möglichkeit um über/auf eine OpenGL-Szene Text zu zeichnen.
Das schnellste in der Hinsicht soll es wohl sein, den Text als Textur zu zeichnen.
Aber der Overpainting-Ansatz aus den Beispielen von QT gefällt mir irgendwie besser ... da ist mehr Spielraum
Als denn, habe ich das Overpainting Beispiel genommen und ihm ein glthread verpasst, der nichts anderes macht als alle 20ms die "Szene samt Text" zu zeichnen, also der Thread ruft alle 20ms die update()- bzw. animate()-Funktion des GLWidgets auf.
Soweit so gut.
Problematisch wird es wenn's um die Auslastung geht ...
Läuft das Programm alleine - also sonst kaum/kein Programm am laufen, so ist die CPU-Last, laut Task-Manager bei ~2 % ...
Wenn ich jetzt aber ein Programm starte z.B.: Opera, Skype oder Trillian, so klettert die CPU-Last des Overpainting-Programms auf ~10% oder mehr und bleibt auf diesem hohen Niveau ...
Wenn ich aber z.B. Firefox starte, bleibt die Auslastung bei ~2%
Bis ich auf dieses Phänomen gestoßen bin ...
Aber es ist reproduzierbar ! Auf mehreren PCs !
Das Ganze tritt nicht ein, wenn ich wie im (original) Beispiel den QTimer benutze um update()/animate() aufzurufen, sodass die Auslastung hier stets konstant ist.
Ähmm, was mach ich falsch
Hat Jemand 'ne idee ?
Muß was am Thread getan werden ... Aber was ? Mutexe setzen ? Warten bis ... ?
Oder was ist das für ein Phänomen ?
Woran könnte das liegen ?
Wollt Ihr den Quellcode ?
Grüße,
funk
P.S. Thread deswegen, weil ich die Erfahrung gemacht habe, dass unter hoher Last QTimer-Events verschluckt werden ...