2013-07-15 11 views
15

Uczę mojego syna programując "właściwą/trudną drogę", więc zaczynamy od C, jak prawdziwi mężczyźni :)Czy mogę napisać bajty bezpośrednio do pamięci wideo pod Linuksem, czy jest lepszy sposób na uzyskanie danych na ekranie?

Drukowanie tekstu na konsolę jest zabawne, ale wciąż pamiętam radość z przełączania mój stary tryb i386 do trybu 320x200x256 i rysowanie kilku kolorowych prostokątów ... w dniu, w którym było to tak proste, jak wywołanie int 10h, a następnie wystarczy napisać bajty do [A000:0000], aby narysować piksele na ekranie.

Jednak w przypadku współczesnego systemu Linux taki niskopoziomowy dostęp do sprzętu wydaje się bardziej skomplikowany (z oczywistych względów). Na krótko spojrzałem na mmap -ing /dev/fd0 zgodnie z opisem here - okazało się, że na moim Ubuntu 13.04 nie ma urządzenia /dev/fb0. Przyjrzałem się również używaniu svgalib - jednak ich przykładowy kod nie wyświetla niczego na moim monitorze.

Pytanie brzmi: czy istnieją proste sposoby uzyskania bezpośredniego dostępu do pamięci wideo we współczesnym systemie Linux, które nie wymagają dużej konfiguracji systemu i kodu standardowego? Nie musi to być dostęp pełnoekranowy - otwarcie okna X i rysowanie pikseli byłoby również w porządku, o ile odbywa się to poprzez zapisywanie danych bezpośrednio do pamięci.

+1

Polecam naukę korzystania z SDL, a następnie pozwolenie systemowi najlepiej zdecydować, jak obsługiwać uderzanie go na ekranie. –

+0

@ IgnacioVazquez-Abrams: Wow, dzięki za wzmiankę o SDL. Udało mi się skompilować przykładowy program SDL i wygląda dokładnie to, czego szukałem. Jeśli dodasz swój komentarz jako odpowiedź, obiecuję zaakceptować go w kilka dni pod warunkiem, że nie wspomniano nawet o frameworku awesomerów :) – Sergey

+0

Prawdziwe kodowanie kodu programistycznego :). Albo jeszcze lepiej, prawdziwi programiści dzierży [motyle] (http://xkcd.com/378/), idź, aby twój syn był siecią motyli, zacznij od teraz, gdy jest młody! – terdon

Odpowiedz

12

Zamiast bezpośrednio uzyskiwać dostęp do pamięci ekranu (co jest bardziej ryzykowne niż można w to uwierzyć), należy rozważyć użycie grafiki Simple DirectMedia Layer (i nie tylko!), A także pozwolić systemowi operacyjnemu na przeniesienie go na ekran.

+0

Uzgodnione. SDL jest drogą do zrobienia. – Joe

+3

Podstawową sprawą jest zrozumienie, czym jest pamięć wideo i jak działa na poziomie podstawowym. SDL (i SDL2 w szczególności) dodaje warstwę abstrakcji, która jest zbyt gruba dla startera. –

Powiązane problemy