Framebuffer direkt mit C++ ansprechen.

Darven Reedt

Neues Mitglied
Moin,
ich bin beim Herum stöbern über ein etwas älteres, aber sehr interessantes Buch über Grafik Grundlagen und Programmiertechniken gestolpert. Leider benutzt es einige Funktionen ("screen_interface.get_screen_pointer" und Ähnliches) mit denen ich so nichts an zu fangen weiss.
Es läuft aber darauf hinaus, direkt in den Video-Speicher hinein zu schreiben. ich versuche nun eine Möglichkeit zu finden, diese Funktionen zu umgehen und ebenfalls direkten Zugriff auf den Framebuffer zu bekommen. Wie kann ich also die Anfangsadresse des Video-Speicher / Framebuffer ermitteln ??
Freue mich auf eure Antworten .
 
Zuletzt bearbeitet:

asc

Mitglied
devCommunity-Experte
Wenn du direkt in den VRAM willst ohne ein Framework (z.b. OpenGL/CUDA/DirectX), musst du dich bei deinem Treiber schlau machen.
Ein direkter Zugriff über die CPU in den VRAM der Grafikkarte ist in der Regel nicht möglich.
 

Lowl3v3l

Mitglied
devCommunity-Experte
Auf Linux zumindest ist das einfach. Du knippst deinen X-Server(oder Wayland) aus und kannst dann direkt auf /dev/fbX.
Ist natürlich immer noch eine Abstraktionsschicht, da dich kein Kernel in einem Protected Mode beliebig in RAM schreiben lässt, aus offensichtlichsten Gründen(und den vermutlich auch noch umgemappt oder so hat, so daß das gar nicht mal eben mögliich ist, da Identity Mapping nicht zwingend ist.). Unter Windows bist du out of Luck, da kannst du deren Grafikserver afaik gar nicht wirklich abschalten. BSD's und andere Unixe müssten da beinahe alle analog zu Linux sein, außer natürlich Apple(und ein paar BSDs auf Spielkonsolen), da hat der Hersteller das einfach alles zugenagelt, es würde mich wundern, wenn du da an einen nackten Framebuffer kommen kannst.

Direkt in den RAM schreiben geht bspw. für den Kernel(wie das in den Video-Ram kommt ist dann ne ganz andere und viel viel komplexere Frage, Memory Mapped I/O ist da ein Stichwort), der diese Rechte hat. Zum VRAM kommst du aber wohl auch nicht durch, die meisten Hardwarehersteller hüten ihre Geheimnisse dafür zu gut, so daß das nur über deren Treiber funktionieren wird.

Mfg
 

Darven Reedt

Neues Mitglied
Danke für eure Antworten. Ich benutze ein Linux Mint 20 Ulyanna Betriebssystem. Da sieht man dann wieder, wie nett doch Linux ist.

Durch eure Tipps bin ich nun über einen vielversprechenden Linux "Header" <linux/fb.h> gestoßen, mit dem ich nun mal weiter werkeln werde.

Irgendwie ärgert es mich dennoch für die Windows Benutzer. Was fällt es diesen Typen ein, jemanden von dessen bezahlten Hardware auszuschließen.

Danke für eure Antworten.
 

Lowl3v3l

Mitglied
devCommunity-Experte
Die werden nicht "von der Hardware ausgeschlossen". Sie entscheiden sich freiwillig, ein Produkt zu verwenden, das ihnen für Comfort ein paar Möglichkeiten nimmt. Macht Linux auch nicht anders, nur auf einer anderen Ebene, versuch zum Beispiel mal, in Linux (ohne den Kernel neu zu kompilieren) syscalls oder interrupts umzumappen oder ein paar neue Segmente in die GDT zu schreiben, klappt auch nicht ;)
Und wie schon geschrieben ist auch /dev/fbX nur eine Abstaktion, die Hardware selbst ist das auch nicht.

Und zwar aus gutem Grund, es hat schon eine Berechtigung, dass wir nicht mehr auf komplett ungesicherten Realmode-DOSen arbeiten.
 
Oben Unten