2013-07-15 19 views
15

sto insegnando la mia programmazione figlio "il diritto/modo più duro", quindi stiamo iniziando con C, come gli uomini veri :)Posso scrivere byte direttamente nella memoria video sotto Linux, o c'è un modo migliore per ottenere i dati sullo schermo?

Stampa di testo alla console è divertente, ma mi ricordo ancora l'ebbrezza di commutazione il mio vecchio i386 alla modalità 320x200x256 e il disegno di alcuni rettangoli colorati ... nel corso della giornata era facile come invocare int 10h e quindi basta scrivere byte a [A000:0000] per disegnare pixel sullo schermo.

Con il moderno Linux, tuttavia, tale accesso di basso livello all'hardware sembra essere più complicato (per ovvi motivi). Ho brevemente esaminato mmap -ing /dev/fd0 come descritto here - risulta che non esiste un dispositivo /dev/fb0 sulla mia Ubuntu 13.04. Ho anche guardato usando svgalib - tuttavia, il loro codice di esempio non visualizza nulla sul mio monitor.

Quindi la domanda è: ci sono modi semplici per ottenere l'accesso diretto alla memoria video in Linux moderno che non richiede molta configurazione di sistema e codice boilerplate? Non deve essere un accesso a schermo intero: l'apertura di una finestra X e il disegno dei pixel potrebbero andare bene, a patto che venga eseguito scrivendo i dati direttamente nella memoria.

+1

Si consiglia di imparare come utilizzare SDL e quindi lasciare che il sistema decida meglio come gestirlo per schiaffarlo sullo schermo. –

+0

@ IgnacioVazquez-Abrams: Wow, grazie per aver menzionato SDL. Sono stato in grado di compilare un programma di esempio SDL e sembra esattamente quello che stavo cercando. Se aggiungi il tuo commento come risposta, ti prometto di accettarlo in un paio di giorni a condizione che non venga menzionato nemmeno un quadro più meraviglioso :) – Sergey

+0

Assemblaggio codice programmatore reale :). O meglio ancora, i veri programmatori brandiscono [farfalle] (http://xkcd.com/378/), vai a prendere a tuo figlio una rete da farfalle, avvialo ora che è giovane! – terdon

risposta

12

Invece di accedere direttamente alla memoria dello schermo (che è piena di più insidie ​​di quanto si possa credere), dovresti considerare l'utilizzo di Simple DirectMedia Layer per la tua grafica (e molto altro!) E lasciare che il SO gestisca il disegno sullo schermo.

+0

concordato. SDL è la strada da percorrere. – Joe

+3

Per le basi è importante capire cos'è la memoria video e come funziona a livello di base. SDL (e SDL2 in particolare) aggiunge un livello di astrazione troppo grasso per l'antipasto. –