Bit blit
Als Bit blit (für Bit Block Image Transfer; auch als BitBlt oder ähnlich bezeichnet für bit block transfer) bezeichnet man in der Computergrafik eine Operation, die für das schnelle Kopieren und Verschieben von Speicherinhalten (Blitting) zuständig ist. Bit blit kann entweder als Softwareprozedur oder als Funktion einer hardwarebasierten Grafikausgabe (Grafikkarte, -Chip oder Chipsatz) implementiert werden; im Fall eines dedizierten Chips bezeichnet man diesen auch als Blitter.
Bit Blit geht auf die sogenannte RasterOp-Spezifikation von Newman und Sproull zurück, eine Funktion zum bitweisen Kopieren von Speicherblöcken, die aber noch stark begrenzt war. Eine Hardware-Implementierung der RasterOp-Funktion wurde von VLSI Technology 1986 vorgestellt. Dieser Chip hatte keine DMA-Funktion und konnte daher den Hauptprozessor kaum entlasten.
Grafik
Blitting wird vor allem zur Beschleunigung der Grafikausgabe verwendet. Dabei werden Bildbereiche verschoben, kopiert, bitweise manipuliert oder zwei Rastergrafikteile zu einem kombiniert. Die CPU wird beim Einsatz des Blitters nicht belastet, sofern dieser DMA beherrscht. Das Konzept wurde von Dan Ingalls am Forschungszentrum Xerox PARC für den Xerox-Alto-Computer entwickelt. Bei älteren Computern war die CPU oft zu langsam, um große Datenblöcke schnell im Speicher zu kopieren. Die Aufgabe übernahm ein Spezialchip bzw. Co-Prozessor, der besagte Blitter. Viele Heimcomputer wie der Amiga (Amiga Blitter, schon seit 1985 mit DMA-Beschleunigung) und manche Atari-ST-Modelle (darunter die Mega ST-Baureihe ab 1987 und die STE-Serie ab 1989) besaßen einen Blitter. Hiermit wurde es auch möglich, die CPU mit anderen Aufgaben zu beschäftigen, während der Blitter Bildschirmdaten manipulierte.
Auch in die Welt der PC-kompatiblen x86-Prozessor-Rechner fand Blitting Eingang. Zunächst wurden solche Grafikkarten auch als „Windows-Beschleuniger“ bezeichnet, weil sie den Prozessor von der Notwendigkeit entlasteten, die Daten über den ISA-Bus zu übertragen. Wenn dies innerhalb der Grafikkarte durch den Grafikprozessor in separatem Grafik-RAM erfolgt, wird auch hier die CPU und der normale Arbeitsspeicher entlastet. Man spricht hier auch von 2D-Beschleunigung. Sie obliegt, wie auch die später eingeführte 3D-Beschleunigung, dem Grafikprozessor.
Ein klassisches Beispiel für Blitting ist das Verschieben eines Fensters in einer grafischen Oberfläche. Hierbei muss ein großer Speicherblock (der Fensterinhalt) von einer Speicherstelle (Ursprungsposition) in eine andere Speicherstelle (Zielposition) verschoben werden. Geschieht dies ohne Hardwarebeschleunigung, wie beispielsweise im abgesicherten Modus von Windows XP oder unter Verwendung des X11-vesa-Treibers, so kann man diesen Vorgang nachverfolgen: Das Fenster wird nicht als Ganzes verschoben, sondern stückweise. Zudem ist die grafische Oberfläche währenddessen meist blockiert. Frühere Oberflächen wie Windows 3.1 oder Windows 95 haben daher während des Verschiebevorgangs nur den Rahmen gezeichnet und den Fensterinhalt erst verschoben, wenn die Zielposition feststand. Zudem waren die Auflösungen und damit auch die Datenmengen geringer.
BitBlt der 16-Bit-Windows-Versionen
Für die 16-Bit Versionen von Microsoft Windows, einschließlich der 16-/32-Bit Hybride Windows 95/98/Me wurde für die BitBlt Funktion ein selbstmodifizierender Code verwendet.[1]
Literatur
- William Newman and Robert Sproull: Principles of Interactive Computer Graphics. McGraw Hill, 1978
- John Atwood: 16160 RasterOp Chip Data Sheet. Silicon Compilers, 1984
- User Manual for the Atari ST Bit-Block Transfer Processor (BLiTTER), The Atari Corporation, Sunnyvale, June 1987
Weblinks
- Geschwindigkeitsvergleich und Beispielcode in Flash/AS3 (englisch)
- BitBlt Geschwindigkeitstest unter Windows c++ (deutsch)
- Bitmap Graphics SIGGRAPH#85 Course Notes zu BitBlt (englisch)
Einzelnachweise
- ↑ https://devblogs.microsoft.com/oldnewthing/20180209-00/?p=97995 Raymond Chen (englisch)