Schnelle und schmutzige Zeichen für Linux -Puffer in C - auf die harte Tour - mit "Glyph -Arrays", Array Fu, Zeiger Fu, aber keine Brüste, Explosionen oder Autojagd Dieses Projekt dreht sich alles um Charakter. Bei der Suche nach Zeichen für einen Linux-Puffer wollte ich ein Display für Daten erstellen, aber der tatsächliche Text der Konsole war zu klein auf den Barbones Non-Gui-Raspberry-Pi, die für dieses Projekt abgeschlossen wurden. Dieses Projekt basiert auf anderen Arbeiten, ein gutes Beispiel für die Umstellung von FrameBuffer unter Linux. Siehe http://raspberrycompote.blogspot.com/2015/01/low-level-graphic-on-raspberry-pi-part.html Also, was für dieses Projekt gemacht wurde, war ein Haufen von Arrays von 1s und 0s, die Charaktere darstellen, die Charaktere und Zahlen darstellen, und diese Arrays wurden durch eine Pixel-Stufe geschaltet. Die Schriftarten basieren auf den Außerirdischen Wachpistolen. https://www.youtube.com/watch?v=hqdy-5iqvuu Diese Demo geht davon aus, dass nicht jedes System schnell sein wird und einen HDMI -Bildschirm hat (der in meinem Fall überhitzt - nicht), also achten Sie auf diese Zeile:
vinfo.bits_per_pixel = 8;
Die Farbwerte reichen von 0 bis 15. Dies ist natürlich nicht die tiefste Farbe. Wenn Sie diese "Tiefe" anheben, können Sie die Dinge verlangsamen, aber Sie erhalten eine breitere Farbpalette. Und diese:
vinfo.xres = 1184;
vinfo.yres = 624;
Ihr Bildschirm, sei es HDMI oder ein TFT -LCD - es ist für eine Linux -Framebuffer -Routine nicht wichtig, solange Sie das Recht /Dev /FBN rechts erhalten, wobei n die n -te Anzahl der Anzeigen ist - kann sich unterscheiden. Die Abmessungen des Bildschirms und der "Tiefe" können sich also unterscheiden. Ich habe einen TFT -LCD -Bildschirm, der die Ausgabe von einer alten Noir -Infrarot -Himbeerkamera gut behandelt, aber probieren Sie eine X32 -Bitmap ohne Konvertierung und die Dinge werden interessant. Mein Ziel insgesamt war "einfach einen Text auf den Bildschirm". Arrays wurden mit etwas in der Nähe von "Aliens Auto-Gun-Schriftart" und Routinen erstellt, um Pixel auf einen bestimmten Farbwert zu setzen, der darauf basiert, wo wir es wollen, x und y und all das und was ist 1 oder 0 im Glyph-Array.
Von dort wurden einige andere Routinen hervorgebracht: eine Schnur drucken. Drucken einer Zahlenanzeige. Und Rechtecke, gefüllt oder hohl mit einem Rand und Linien.
Diese Demo zeigt ein bisschen Animation, aber es ist nicht das Ziel. Verwenden Sie einen "Puffer -Flipping" -Ansatz, so wie die meisten Grafiken funktionieren - das Schreiben in einen Speicherplatz wie ein Array zuerst das Display in Größe und Farbtiefe, mit Farbwerten und dann "Blitzen" (ein altes Wort aus den 1990er Jahren), das auf demselben Speicher, der auf den Bildschirm geprägt ist, Speicher an den Bildschirm entspricht. Dies sorgt für einen sehr reibungslosen Übergang von einem Bildschirm zum anderen.
Animation ist also möglich, aber nicht das Ziel. Es ist einfach genug, nur zu diesem "Back -Puffer" zu tun und es dann auf den Bildschirmpuffer zu schreiben. Sobald Sie diese Art von Code haben, z. B. den Code von Raspberry Compote, ist das, was Sie zu diesem Back -Puffer tun, Ihr Geschäft: Von unserem bescheidenen Text bis zum 3D -Rendering.
Diese Demo geht davon aus, dass ältere oder weniger fähige Systeme verwendet werden. Alle Charaktere befinden sich also in einem Block. Die tatsächlichen Glyphen, die durch Arrays dargestellt werden, werden über einen "Zeiger auf Array" -Array "gehalten". Im Block werden diesem Array den Array -Daten Zeiger zugeordnet, sodass der Block vorbeigegeben ist, so sind diese Objekte verschwunden. Auf diese Weise können Sie auswählen, welche Charaktere Sie verwenden, und den Rest verwerfen. Zu beachten, gibt es zwei Arrays, die zwei Schriftgrößen darstellen. Jedes sind 128 Elemente, und das nte Element entspricht dem nicht signierten INT -Wert des Zeichens. Aus diesem Grund befindet sich ein Raum in Element 32. Der ASCII -Wert von "S" beträgt 83, sodass die 83. Elemente der Arrays ein Zeiger auf das Array von S. sind.
Bei kleineren Zahlen Arrays werden auch Elemente verwendet, die auf Arrays hinweisen, die Zahlen darstellen, das n-te Element, das der Zahl entspricht, von 0-9. Dies erregt uns den Atoi -Anruf, der für Briefe verwendet wird.
Insgesamt war es ziemlich schnell, auf einem Einzelkernhimbeer der 1. Generation getestet. Die Ergebnisse können variieren. Es ist auch grundlegender C -Code.
Es gibt andere Möglichkeiten, Charaktere auf einem Bildschirm zu machen. Aber ich habe mich für dieses schnelle und schmutzige Maß entschieden, um Flexibilität und Einfachheit zu gewährleisten. Die "Array Fu" dieses Code kann sich auch für andere Dinge als nützlich erweisen. Das Array muss kein Buchstaben oder eine Nummer oder Glyphe von irgendeiner Art sein - es kann zum Beispiel ein Sprite oder alles, was Sie wollen. Sie sind durch den von Ihnen verwendeten Bildschirm und den Prozessor begrenzt.
Wenn Sie mehr ausgefallene Schriftarten wünschen, gibt es Demos im Internet, die "echte" Schriftarten aufnehmen und sie in Pixel umwandeln. Wenn Sie diese in Arrays einbeziehen können, z. B. ein Programm, das eine Bitmap liest und sie in eine Reihe von Farbwerten verwandelt, können Sie sie als Schriftarten in diesem Programm verwenden. Denken Sie daran, dass all diese, wenn sie in Code als 2D -Arrays angezeigt werden, wirklich 1D -Arrays sind. Sie müssen also im Voraus wissen, was die Dimensionen Ihrer Arrays sein sollen. Die Arrays in dieser Demo wurden manuell erstellt. Die gesamten ASCII -Bereiche - 128 Zeichen, sind nicht abgeschlossen. Wenn Sie also etwas wollen, das nicht da ist, wie beispielsweise Charaktere und Zeichensetzung mit Lower Case, müssen Sie es selbst erstellen. Weitere Hinweise: Ich bemerke einen Segmentierungsfehler bei einer Debian -Installation auf BeagleBone mit einer Auflösung von 800 x 600 - aber ich verwende denselben HDMI -Bildschirm. Neugierig. Die Ergebnisse variieren mit System und Betriebssystem. Ich bekomme sogar eine niedrigere Standardpixeltiefe auf dem BeagleBone. Beide Systeme sind Nicht-GUI-Systeme (GUIs für Hausfrauen). Ich finde, dass es, den "erweiterten" Puffer auf Yres * 2 -Trick zu beseitigen, der bei Rasperry gut funktioniert hat, den Initialisierungsfehler beseitigt und die gleiche milde Animation mit Atari 2600 Flicker, auf dem ich aufgewachsen bin, die gleiche milde Animation ermöglicht hat. Ich stelle mir vor, ein separates Array für das Schreiben zu "Blit", um auf die alte Schule zu Screening stattdessen funktionieren, ich werde damit experimentieren. Die geringere Auflösung der Grafik nur Debian Beaglebone verleiht mir nostalgische Gefühl. Ich bemerke auch, dass ich mit der gleichen "Pixeltiefe", wie ich auf dem Raspberry Pi verwendet habe, immer noch über 15 in meinen Werten in die Farbe gehen kann, wenn ich ein Pixel in den Puffer stecke. Die Himbeere würde darüber ersticken, aber nicht das BeagleBone. Dies ermöglicht mehr Farboptionen. Jedes System ist anders, so dass Sie immer experimentieren müssen. Viel Spaß mit diesem Code.