Grafica Linux di basso livello

9

Per scopi didattici, mi piacerebbe scrivere un'applicazione su un ambiente Linux in grado di elaborare eventi di tastiera e disegnare grafica senza enormi dipendenze come X o SDL. Presumo che ciò sia possibile, perché X e SDL sono solo programmi stessi, quindi devono fare affidamento su altri metodi inerenti all'ambiente. Questa comprensione è corretta?

Se sì, dove potrei imparare a scrivere un programma del genere? La mia limitata esperienza mi dice che implicherebbe chiamate al kernel e / o scrivere su file speciali; tuttavia, non sono stato in grado di trovare alcun tutorial in merito (non sono nemmeno sicuro di cosa fare su Google).

Inoltre, nel caso sia rilevante, eseguo Debian Squeeze su Virtualbox. Ho usato un cd netinst senza rete, quindi non c'è molto installato su di esso al momento. Installerò gcc , ma spero di potermi cavare con niente di più.

    
posta math4tots 28.03.2012 - 08:20
fonte

3 risposte

11

X è praticamente l'API grafica di livello più basso che un'applicazione Linux probabilmente utilizzerà su un moderno desktop Linux. La maggior parte delle applicazioni non si preoccupa nemmeno di andare così in profondità e utilizzerà invece un'implementazione di toolkit GUI come GTK o Qt.

Di seguito ci sono solo i driver hardware e probabilmente alcune API X interne per i driver. Ma questi non sono pensati o progettati per essere usati dalle normali applicazioni dello spazio utente.

Potresti usare il dispositivo framebuffer del kernel (fbdev), ma non so quanto bene possa supportare la moderna API grafica.

    
risposta data 28.03.2012 - 08:30
fonte
7

Se vuoi ricevere eventi di input senza usare X, dovrai leggerli dai nodi del dispositivo. Linux ha un sottosistema di input generico chiamato evdev di cui molti driver sfruttano. Quindi, per leggere gli eventi di input, è possibile leggere da qualsiasi nodo del dispositivo in / dev / input.

Un semplice trucco per trovare il nodo del mouse è eseguire "cat" sui nodi del dispositivo uno alla volta, muovendo il mouse durante ogni "gatto". Se vedi i dati che escono sullo schermo, allora quello è il tuo nodo del mouse. Il file di intestazione rilevante è linux / input.h. Per un esempio su come usarlo, guarda l'origine per il driver xevdev.

Per manipolazioni grafiche di basso livello, se ti senti davvero ambizioso, puoi generalmente mappare la memoria del framebuffer e fare i tuoi stessi bit.

    
risposta data 21.06.2012 - 18:57
fonte
2

Un buon tutorial per grafica di basso livello su Linux è disponibile qui .

Un buon post sull'overflow dello stack per l'input di basso livello è disponibile qui .

Indipendentemente, probabilmente vorrai usare framebuffer o drm / kms (framebuffer è il più semplice dei due) per la grafica e evdev per l'input diretto su Linux.

    
risposta data 01.04.2016 - 17:09
fonte

Leggi altre domande sui tag