Come può un computer eseguire il rendering di una CLI / console insieme a una GUI?

6

Sono confuso quando guardo alla grafica, in particolare con i sistemi operativi.

Voglio dire, come può un computer eseguire il rendering di una CLI / console insieme a una GUI?

Le GUI sono completamente diverse dal testo. E come possiamo avere finestre GUI che visualizzano interfacce di testo, cioè come possiamo avere la CLI nel moderno sistema operativo grafico - questo è quello a cui cerco principalmente di fare presa.

Come viene visualizzata la grafica per il rendering? Esiste una sorta di indirizzo di memoria a cui accede una GPU che contiene tutti i dati dei pixel, e il sistema all'interno dei sistemi operativi che raccolgono la posizione dei pixel di finestre e widget, insieme all'indice Z e li rasterizzano a quell'indirizzo di memoria, che poi carica la GPU sullo schermo?

Che ne dici della CLI integrata con la grafica? In che modo il sistema operativo comunica alla GPU che una determinata parte dello schermo desidera visualizzare il testo mentre il resto desidera visualizzare i dati dei pixel?

    
posta Nathaniel Bennett 29.03.2012 - 00:33
fonte

1 risposta

13

Sembra che la tua domanda principale sia come le GUI e le CLI possono coesistere insieme allo stesso tempo, come la console comandi di Windows (cmd.exe).

In realtà non è così complicato come potresti pensare. Innanzitutto, ricorda che anche una GUI deve essere in grado di eseguire il rendering del testo, in modo da poter leggere nomi di file, etichette sui controlli o lavorare con il testo all'interno dei programmi. Lo fa avendo file di font che contengono le descrizioni di come trasformare vari caratteri in glifi (forme) su schermo o in una stampa.

Una volta compreso il principio di base, la risposta è ovvia: puoi creare un programma di console su una GUI disponendo di un livello di emulazione che rende il testo come un CLI e un file di font che assomiglia al testo della console. (Nota: in realtà non sto sostenendo che sia così che fa Windows. Non so come funzioni sotto il cofano, ma potrebbe facilmente essere fatto in questo modo.)

Per quanto riguarda la seconda parte della tua domanda, per quanto riguarda il rendering della grafica, sì, c'è una posizione di memoria speciale da qualche parte che contiene i dati dei pixel. Questo è chiamato un frame buffer . Ai vecchi tempi, si poteva ottenere l'accesso diretto al frame buffer e giocare direttamente con i suoi pixel. Al giorno d'oggi, questo è altamente scoraggiato se non impossibile, per vari motivi. Invece, si passa attraverso API di disegno grafico di livello superiore, in cui descrivi al sistema cosa vuoi fare e si prende cura dei dettagli.

Questo ha molti vantaggi. In primo luogo, significa che non è necessario sapere dove il framebuffer è in memoria o come esattamente i suoi dati sono formattati. In secondo luogo, e strettamente correlati al primo punto, diversi produttori di schede video possono configurare i loro framebuffer in modi diversi, e non è necessario sapere come scrivere un codice grafico specifico per ciascuna versione. Lascia che le API grafiche si occupino di ciò. E terzo, (e strettamente correlato al secondo punto), significa che le cose possono cambiare in futuro senza rompere il codice esistente.

Ad esempio, c'è stato un cambiamento importante nel modo in cui Windows gestisce i moduli ("windows") quando hanno introdotto Vista, che probabilmente non hai mai notato a meno che non si esegua la programmazione grafica. Un tempo ogni forma veniva disegnata direttamente sullo schermo. Ciò significava, tra le altre cose, che se si trascinava un secondo modulo su un modulo visibile e poi via di nuovo, il modulo in basso avrebbe dovuto ridisegnarsi da solo perché i dati dell'immagine erano andati persi.

Ma Vista ha introdotto un gestore di finestre di compositing , che in pratica significa che ogni modulo riceve il proprio framebuffer virtuale da qualche parte nella memoria, e disegna tutto sullo schermo in base alla posizione e all'ordine Z. Ora puoi trascinare un modulo di fronte a un altro tutto ciò che desideri e non invaliderà i dati dei pixel di altri moduli; i moduli devono essere ridipinti solo quando il loro contenuto cambia. E sono stati in grado di implementarlo e farlo funzionare bene sui programmi esistenti perché tutti i programmi esistenti utilizzano le API di disegno predefinite.

    
risposta data 29.03.2012 - 00:58
fonte

Leggi altre domande sui tag