Non ho idea in generale, ma mi piacerebbe aggiungere un altro elemento alla vostra lista - rendering dei font e calcoli. Trovare i glifi vettoriali in un font e convertirli in rappresentazioni bitmap con anti-aliasing non è un compito da poco. E spesso deve essere fatto due volte: prima per calcolare la larghezza/altezza del testo per il posizionamento, e quindi effettivamente disegnare il testo alle coordinate corrette.
Inoltre, la maggior parte del codice di disegno oggi si basa sui meccanismi di ritaglio per aggiornare solo una parte della GUI. Quindi, se è necessario ridisporre solo una parte, il codice ridisegna effettivamente l'intera finestra dietro le quinte, quindi prende solo la parte necessaria per l'aggiornamento effettivo.
Aggiunto:
Nei commenti ho trovato questo:
Sono molto interessato a questo anche. Non può essere che il gui sia renderizzato usando solo la CPU perché se non hai i driver corretti per la tua gfx-card, la grafica del desktop rende incredibilmente lento. Se hai i driver gfx, tuttavia, desktop-gfx è veloce ma mai veloce come un'applicazione directx/opengl.
Ecco l'accordo come ho capito: ogni scheda grafica là fuori oggi supporta un'interfaccia generica per il disegno. Non sono sicuro che si chiami "VESA", "SVGA" o se sono solo vecchi nomi del passato.Ad ogni modo, questa interfaccia implica di fare tutto attraverso gli interrupt. Per ogni pixel c'è una chiamata di interrupt. O qualcosa di simile. Tuttavia, il driver VGA appropriato è in grado di trarre vantaggio dal DMA e da altri miglioramenti che rendono l'intero processo WAY meno impegnativo per la CPU.
Aggiunto 2: Ah, e per OpenGL/DirectX - questa è un'altra caratteristica delle schede grafiche di oggi. Sono ottimizzati per le operazioni 3D in modalità esclusiva. Ecco perché la velocità. La normale interfaccia grafica utilizza solo le procedure di disegno 2D di base. Quindi arriva a inviare il contenuto di tutto lo schermo ogni volta che vuole un aggiornamento. Le applicazioni 3D tuttavia inviano una serie di trame e definizioni triangolari alla VRAM (video-RAM) e quindi le riutilizzano solo per il disegno. Dicono solo qualcosa come "prendi il triangolo # 38 con il set di texture # 25 e disegnali". Tutte queste cose sono memorizzate nella cache della VRAM, quindi questo è di nuovo molto più veloce.
Non ne sono sicuro, ma sospetto che le moderne GUI con accelerazione 3D (Vista Aero, compiz su Linux, ecc.) Possano trarne vantaggio. Potrebbero inviare comuni bitmap al VGA in primo piano e quindi riutilizzarli direttamente dalla VRAM. Qualsiasi superficie disegnata da un'applicazione, tuttavia, dovrebbe comunque essere inviata direttamente ogni volta per gli aggiornamenti.
Aggiunto 3: Altre idee. :) Le moderne GUI per Windows, Linux, ecc. Sono orientate ai widget (che è orientato al controllo per gli altoparlanti Windows). Il problema con questo è che ogni widget ha il proprio codice di disegno e superficie di disegno associata (più o meno). Quando la finestra deve essere ridisegnata, chiama il codice di disegno per tutti i suoi widget figlio, che a loro volta chiamano il codice di disegno per i loro widget figlio, ecc. Ogni widget ridisegna l'intera superficie, anche se alcuni di essi sono oscurati da altri widget. Con le tecniche di ritaglio sopra menzionate, alcune di queste informazioni disegnate vengono immediatamente scartate per ridurre lo sfarfallio e altri artefatti. Ma è ancora un sacco di codice di disegno manuale che include il bitmap, lo stretching, l'inclinazione, il disegno di linee, il testo, il riempimento, ecc. E tutto questo viene tradotto in una serie di chiamate putpixel filtrate attraverso filtri/maschere di ritaglio e altro cose. Ah, sì, e l'alpha blending è diventato popolare anche oggi per effetti piacevoli che significano ancora più lavoro. Quindi ... si, si potrebbe dire che questo è dovuto a molta astrazione e indiretta. Ma ... potresti davvero farlo meglio? Io non la penso così Solo le tecniche 3D possono essere d'aiuto, perché sfruttano la GPU per il calcolo e il ritaglio alfa.
Sono anche molto interessato a questo. Non può essere che il gui sia renderizzato usando solo la CPU perché se non hai i driver corretti per la tua gfx-card, la grafica del desktop render _incredibly_ slow. Se hai i driver gfx, tuttavia, desktop-gfx è veloce ma mai veloce come un'applicazione directx/opengl. –
Gli unici algoritmi che sono probabilmente lenti sono gli algoritmi di rendering del software, ma le GUI si stanno allontanando da quello –