Wo Framebuffer oder Bildspeicher (engl . Rahmen – Einzelbild , Puffer – Zwischenspeicher) ist Teil des Video – RAM von dem Computer und Entsprechen Ein digitale Sprach Kopie des Monitorbildes . Das heißt, jeder Bildschirm Pixel kann in einem der bekanntesten Bereiche des Framebuffers gefunden werden, die dem digitalen übersetzten Farbwert enthalten sind. Seit den 1990er Jahren fand er dort Framebuffer vorwiegend auf der Grafikkarte .
Speicherbedarf
Die verdorbene Farberiefe (genauer: Pixelformat) und verdorbene Bildauflösung .
Farbtiefe
Die Farbtiefe Dezember Framebuffer bestimmt sterben Maximalzahl wo gleichzeitig Auf dem Bildschirm angezeigten Farben oder Farbnuancen. Im Bereich der IBM PC-kompatiblen Computer Waren und Sind in following der Aufstellung angegebenen Größen Übliches sterben. Die angegebenen Pixelformate GEBEN ein, Wie viele Bits pro Pixel Auf die einzelnen Farbkanäle (rot, grün, blau, Alpha – Kanal ) vergeben Werden – bei Farbmodi, sterben indizierte Farben (Palette) hotellet, fehlt this Angabe, Weil sie Sinn Keinen Ergibt.
- 1 Bit Pro Pixel, Zwei Farben (Normalisierte Hell und Dunkel bei einem Monochrom-Monitor )
- MDA
- 2 Bit Pro Pixel, Vier Farben
- CGA : Palette mit 4 Farben aus 16 möglichen
- 4 Bit Pro Pixel, 16 Farben
- EGA : Palette mit 16 Farben aus 64 möglichen
- 8 Bit Pro Pixel, 256 Farben
- VGA : Palette mit 256 Farben aus 262144 möglichen
- 15 Bit Pro Pixel, 32768 Farben
- Real Color : Pixelformat 5-5-5, dh 5 Bit Pro Farbkanal (auch 32 Intensitätenstufen pro Kanal)
- 16 Bit Pro Pixel, 65536 Farben
- High Color : Pixelform 5-6-5, dh 5 Bit für Rot und Blau (32 Intensitätsabstufungen) und 6 Bit für Grün (64 Intensitätsabstufungen)
- 4-4-4-4 alternative Auch, d. H. 4 Bit pro Farbkanal (16 Intensitätsabstufungen), Wobei Die letzten vier Bit Entweder ungenutzt Sind oder als Alpha-Kanal used Werden (p. 32 Bit True Color)
- 24 Bit Pro Pixel: 16777216 Farben
- True Color : Pixelformat 8-8-8, dh 8 Bit Pro Farbkanal (256 Intensitätsabstufungen)
- 32 Bit Pro Pixel
- True Color: Pixelformat 8-8-8-8, dh 8 Bit Pro Farbkanal (256 Intensitätsstufen)
- Die gegenüber 24 Bit True Color hinzugekommenen 8 Bit wurden standardisierten Cousins genützt; auf Rechnern Mit 32-Bit-Architektur die ist VERARBEITUNG von 32-Bit-Wert aber Daten effizient als von 24-Bit-Wert sterben, Weil stirbt genau die Wortbreite Dezember Prozessor Entspricht, weswegen trotz des 33% Höher Speicherbedarf Echtfarbenframebuffer meistens 32 Bit Farbtiefe genutzt.
Bei Grafikhardware, die mit Bitplanes arbeitet (z. B. Amiga ), ging es mit Farben auch 3, 5, 6 und 7 Bit pro Pixel mit dementsprechenden 8, 32, 64 bzw. 8 Bit. 128 Farben üblich.
In der 3D-Computergrafik wurde auch Framebuffer mit höherer Genauigkeit verwendet. Dort benötigen stirbt Bestimmung der Farbe Einen Pixel oftmals Mehrere Rechenschritte, Wobei bei Jedem Zwischenergebnis Rundungsfehler entstehen can, stirbt bei herkömmlichem Framebuffer Formular Athen schnell Sichtbar Ist und störend Wirken.
Bei diesen genaueren Formaten interpretiert die Farbkanalwerte als Kommawerte auf einer Skala von 0.0 bis 1.0, was bei der Verwendung mehrerer Pixelformate de Handhabung vereinfacht wird.
- FX8
- pro Farbkanal 8 Bit Festkomma, also 256 Farbabstufungen linearer Skala
- Identifizieren Sie meine eigenen Gene 32 Bit pro Pixel. Besessen von 256, werte pro Farbkanal als Ganze Zahl schwang 0a 255 oder als Festkommawert zwischen 0,0 und 1,0{\ displaystyle \ left ({\ frac {wert} {255}} \ rechts)} auffasst, ist lediglich Interpretationssache.
- Max. Kontrast 255: 1, der den Low Dynamic Range (LDR) -Rendering ermöglicht, der zur Anzeige von Bildschirmschirmen aller Art verwendet wird
- FX12
- pro Farbkanal 12 Bit Festkomma, nur 4096 Farbabstufungen lineare Skala
- Hören Sie Genauigkeit als FX8
- Max. Kontrast 4095: 1, Low Low Dynamic Range (LDR) -Rendering
- FX16
- pro Farbkanal 16 Bit Festkomma, somit 65536 Farbabstufungen lineare Skala
- Hören Sie Genauigkeit als FX12
- Max. Kontrast 65535: 1, Medium für Dynamic Range (MDR) Rendering
- FP16
- pro Farbkanal 16 Bit Gleitkomma ( davor 5 Bit Exponent und 10 Bit Mantisse ), also 32768 Farbabstufungen exponentieller Skala
- Die exponentielle Skala besteht aus der FX16 eine im Wesentlichen feinere Auflösung bei kleinen Werten, bei größeren Werten ist es eher ungenauer.
- Max. Kontrast ca. {\ displaystyle 10 ^ {12}: 1}, HDR-Rendering (High Performance Dynamic Range) .
- FP24
- Pro Farbkanal 24 Bit Gleitkomma (davon 7 Bit Exponent und 16 Bit Mantisse), das sind mehr als 8 Millionen. Farbabstufun exponentiell skaliert
- Höre genauigkeit als FP16, was sehr viel für HDR-Rendering ist
- FP32
- Pro Farbkanal 32 Bit Gleitkomma (davor 8 Bit Exponent und 23 Bit Mantisse), mehr als 2 mr. Farbabstufun exponentiell skaliert
- noch Heu-Genauigkeit als FP24
Bildauflösung
Die Bildauflösung Gibt ein, aus Wie vielen PixelNet wo Framebuffer Besteht. Üblicherweise Gibt man horizontale und vertikale Pixelanzahl aN, Wodurch man Auch das hierbei sterben Seitenverhältnis 3, 5:: direkt berechnen Kann, Übliches sind hier 4 4 und 04.10 p.m ..
Typische Framebuffer-Auflösung:
- 320 × 200: 64.000 Pixel, Seitenverhältnis 16:10
- 640 × 200: 128.000 Pixel, Seitenverhältnis 32:10 (bei üblichen 4: 3-Bildschirmen lernt Anamorph als 16:10 dargestellt)
- 640 × 480: 307.200 Pixel, Seitenverhältnis 4: 3
- 800 × 600: 480.000 Pixel, Seitenverhältnis 4: 3
- 1024 × 768: 786.432 Pixel, Seitenverhältnis 4: 3
- 1280 × 1024: 1,31 Mio. Pixel, Seitenverhältnis 5: 4
- 1440 × 900: 1,3 Mio. Pixel, Seitenverhältnis 16:10
- 1680 × 1050: 1,76 Mio. Pixel, Seitenverhältnis 16:10
- 1600 × 1200: 1,92 Mio. Pixel, Seitenverhältnis 4: 3
- 1920 × 1200: 2,3 Mio. Pixel, Seitenverhältnis 16:10
- 2048 × 1536: 3,15 Mio. Pixel, Seitenverhältnis 4: 3
- 2560 × 1600: 4,10 Mio. Pixel, Seitenverhältnis 16:10
Beispiele
- Textmodus (z. B. beim hochfahren Eines IBM-kompatiblen PCs)
Bei Einer 80 × 25 Zeichen GROSSEN Konsole, Wobei jedes Zeichen und seine Farbe Mit Jeweils 8 Bit (auch zusammen 16 Bit) Gespeichert Wird, belegt in dem Framebuffer 80 × 25 × 16 = 32000 Bit = 4 KB. - Grafikmodus (z. B. unter Microsoft Windows oder beim X – Window – System unter Linux)
Bei Einer Bildschirmauflösung von 1024 × 768 Pixel und Einer von Farbtiefe 24 Bit belegt , wo Framebuffer 1024 × 768 × 24 = 18.874.368 Bit = 2,25 MB .
Breite × Höhe × Farben | Speicherbedarf * | Standard |
---|---|---|
320 × 200 × 2 | ≈ 8 KB (8 kB) |
C64 |
640 × 200 × 2 | ≈ 16 KB (16 kB) |
CGA |
750 × 350 × 2 | ≈ 32 KB | Herkules |
640 × 350 × 16 | ≈ 109 KB (112 KB) |
EGA |
640 × 480 × 16 | 150 KB | VGA |
320 × 200 × 256 | 62,5 KB (64 KB) |
VGA |
640 × 480 × 256 | 300 KB | VGA-extended |
800 × 600 × 256 | 468,75 KB (480 KB) |
SVGA |
1024 × 768 × 256 | 768 KB | XGA |
1024 × 768 × 64k | 1,5 MB | XGA |
1024 × 768 × TrueColor | 2,25 MB | XGA |
1280 × 960 × TrueColor | ≈ 3,5 MB | SXGA |
1400 × 1050 × TrueColor | 4,2 MB | SXGA + |
1600 × 1200 × TrueColor | ≈ 5,5 MB | UXGA |
1920 × 1200 × TrueColor | ≈ 6.6 MB | WUXGA |
2048 × 1536 × TrueColor | 9 MB | SUXGA |
2560 × 960 × TrueColor | ≈ 7 MB | Dual SXGA |
2560 × 1600 × TrueColor | ≈ 12 MB | WQXGA |
In der Übersicht wurde von TrueColor berücksichtigt, dass Daten intern mit 24 Bit gepunktet wurden.
Verbesserungen
Durch Unzulänglichkeiten in der Kontinuität der Bildfolge, und über die allgemeine Darstellungsqualität hinaus, wurde das Konzept des Framebuffers im Lauf der Zeit überarbeitet. Das entspricht einem Framebuffer auf aktuellem System mehrer Pufferspeichern.
- Bei der Doppelpufferung ( Doppelpufferung ) wird der Framebuffer in zwei Bereiche ( Frontbuffer und Backbuffer ) unterteil.
- Bei der Dreifachpufferung ( triple Pufferung ) Wird der Framebuffer wiederum Bereich (1 FrontBuffer und 2 zurück Buffer ) unterteilt.
Linux Framebuffer
Dein Linux Framebuffer Device (Kurz fbdev ) ist deine hardwarebasierte Abstraktion Schicht unter Linux , über die Grafik der Konsole bzw. der Grafikkarte. mit meinem X-Window (xf86_fbdev). There is set the Framebuffer-Device nicht auf systemspezifische Bibliotheken, die SVGALib oder X Window System sowie deren ressourcenschonende Alternativen sowie X-Server, basierend auf grafischen Grafiken für Linux, haben. Sie sind hier für Linux Kernel Version 2.1.107 für alle Plattformen im Standardkernel enthalten.
Dienstprogramme für Linux / M68k implementiert, On-Premise-Systeme (Amiga, Atari, Macintosh) mit keine Hardware-Hardware und Software.Der Text-Modus zum Einbetten und Ersetzen der IBM PC-kompatiblen Plattform.
Framebuffer direkt von Programmen, die MPlayer und Libraries benutzt haben, um GGI, SDL , GTK + und Qt Extended zu verwenden . Ihre Ressourceneinsparung In Bezug auf die besten der Art von interessanten Dingen.
Durch die Bootstrappings in Form eines Splash-Screens wurden die Distributionen ( Ubuntu , openSUSE ) verwöhnt , die grafische Ausgabe zu ermöglichen.
Es gibt häufigste verwendete VESA- Framebuffer-Treiber (vesafb), aber sie sind immer noch im Bereich der Videostandards, so dass es möglich ist, Grafiken auf der Basis von Hersteller zu verwenden. Da ist auch eine mögliche Lösung möglich. Außer Wurden von Diversen Grafikschifferstellern ( Nvidia : rivafb, nvidiafb; AMD : radeonfb) Proprietäre Treiber auf den Markt gebracht.
Konfigurieren Sie das Framebuffer Device, welches Ihnen helfen wird den Linux-Kernel-Ladevorgangs-Demuter ein Tux -Logo zu löschen . Dazu muss der Boot-Loader , der am Arbeitsplatz eingeführt wurde, aktiv von Angabe des Parameters behandelt werden video
.
Im folden war in einem einzelnen AMD-Treiber mit einer Bildauflösung von 1024 × 768 Pixel von 8 Bit pro Pixel und einer Bildwiederholung von 76 Hz geladen wird geladen:
- Beispiel für ein LILO Konfigurationsdatum
# LILO Konfigurationsdatei boot = / dev / sda1 # Linux bootbare Partitionskonfiguration startet image = / vmlinuz append = "video = atyfb: 1024x768-8 @ 76, Schriftart: SUN8x16"
- Beispiel für eine GRUB Konfigurationsdatum
# GRUB - Konfigurationsdatei # für Linux booten Titel Linux - Kernel (hd0, 0) / vmlinuz video = atyfb: 1024x768-8 @ 76, Schriftart: SUN8x16 root = / dev / hda1
Für einen Hardwarezugriff auf der Framebuffer-Device muss nicht unbedingt ein Kernelmodul geschrieben werden. Ferner hat die Anwendung der Benutzer-Modus über Geräte /dev/fb*
auf dem Gerät und in den Grafikspeicher zu schreiben. Im folgenden wird Beispiel gezeigt, wer im Framebuffer mit der Programmiersprache C geschrieen wurde. Hier ist der hexadezimale Wert 0x000000FF (Binär: 0b0000000000000000000011111111) für jedes Pixel-Set:
#include <sys / types.h> #include <sys / stat.h> #include <sys / mman.h> #include <sys / ioctl.h> #include <fcntl.h> #include <linux / fb. h> #include <unistd.h> #include <stdio.h> int Haupt ( int argc , char ** argv ) { int Zeile , col , Breite , Höhe , bitspp , bytespp ; unsigned int * Daten ; // Öffnen des Geräts int fd = offen ( "/ dev / fb0" , O_RDWR ); // Informationen über Framebuffer einholen struct fb_var_screeninfo screeninfo ; ioctl ( früher , FBIOGET_VSCREENINFO , & Bildschirminfo ); // Beende, wenn die Farbauflösung nicht 32 Bit pro Pixelentent bitspp = screeninfo . bits_per_pixel ; wenn ( bitspp ! = 32 ) { // Ausgabe der Fehlermeldung printf ("Farbbaufloesung =% i Bits pro Pixel \ n " , bitpp ); printf ( "Bitte ändern Sie die Farbtiefe auf 32 Bits pro Pixel \ n " ); schließen ( früher ); zurück 1 ; // Für den Programmabbruch geben wir einen Rückgabetyp! = 0 aus. } width = Bildschirminfo . XRes ; Höhe = Bildschirminfo . yres ; bytespp = bitspp / 8 ; // Bytes pro Pixel berechnen // Überprüfe ob der Typ unsigned int die same Byte-Größe wie ein Pixel hat. // In unserem Fall 4 Byte (32 Bit), Fall Nicht Wird Das Programm Beef if ( sizeof ( unsigned int ) ! = Bytespp ) { close ( fd ); zurück 1 ; } // Zeiger auf den Framebufferspeicher anfordern Daten = ( unsigned int * ) mmap ( 0 , Breite * Höhe * bytespp , PROT_READ | PROT_WRITE , MAP_SHARED , früher , 0 ); // Kratze im Framebuffer-Speicher. Hier Wird Pixel für Pixel auf // Die Farbe 0x000000FF (Blau) Gesetzt, da ein Pixel des aarrggbb Format hat für ( Zeile = 0 ; Zeile < Höhe ; Zeile ++ ) für ( col = 0 ; col < Breite ; col ++ ) Daten [ Zeile * Breite + col ] = 0xFF; // Sagt wieder freigeben munmap ( daten , width * height * bytspp ); // Gerät schließen schließen ( früher ); // Rückgabewert return 0 ; }
Siehe auch
- DirectFB , Direct Frame Buffer, eine von ihnen Linux Frame Buffer programmierte Bibliothek