Bit blit
En computacio grafica, BIT BLIT (bitblt, blitting, etc.) es una primitiva grafica consistent en que dos mapes de bits son combinats en un de sol. Es tracta d'una de les primitives grafiques mes basiques i, per tant, mes utilitzades en grafics 2D. La majoria de les targetes de video la implementen en el maquinari (es una de les moltes operacions de les quals s'encarrega la GPU).
Origens
[modifica]El nom deriva de la instruccio BitBLT (bit block transfer, transferencia de bloc de bits) de l'ordinador Xerox Alto. Aquesta operacio va ser creada per Diana Merry al Xerox PARC per al sistema Smalltalk-72. Per al sistema Smalltalk-74, Dan Ingalls va implementar una versio redissenyada en microcodi.
El desenvolupament de metodes rapids per a diverses operacions bit blit va ser la clau en l'evolucio de visualitzacions en ordinadors des de l'us de grafics de caracters, fins a l'us de grafics de mapes de bit per a tot. Les maquines que necessitaven especial rendiment de grafics 2D (com les consoles de videojocs) venien amb un xip especialitzat anomenat blitter.
Bit Blit, tecniques i usos
[modifica]Un us classic per blitting es renderitzar sprites amb transparencies sobre un fons. Per raons de velocitat es normalment inviable moure's a traves de cada pixel i trobar si aixo necessita ser visualitzat. Per exemple, si tenim la seguent imatge de fons:
i desitgem mostrar diversos sprites sobre aquesta imatge de fons representant, per exemple, objectes d'un joc per produir aixo:
El primer que necessitem son els mapes de bit per als sprites i les corresponents mascares. Els colors tenen molta importancia, ja que el fons de l'sprite i el primer pla de la mascara son negres, emmagatzemats com zeros binaris. Els fons de les mascares son blancs, emmagatzemats com uns binaris.
El primer blit utilitza el RasterOp d'AND amb el fons i la mascara dels sprites. Com que qualsevol valor AND amb 0 igual a 0, i qualsevol valor AND amb 1 sense canvis, podem crear arees negres on els sprites actuals apareixeran, i deixaran la resta del fons nomes.
El segon blit utilitza el RasterOp d'OR amb el fons modificat i el sprite actual. A causa d'algun valor OR amb 0 sense canvis, el fons no sera afectat i les arees negres son ocupades amb l'actual imatge del sprite.
Blitting vs. sprites
[modifica]La tecnica de bliting es similar al dibuix de sprites per hardware, en ambdos sistemes es reprodueix un patro, tipicament una area quadrada, en diferents localitzacions de la pantalla. Els sprites tenen l'avantatge de ser allotjats en una memoria separada i, per tant, no molesta a la memoria de la visualitzacio principal. Aixo els permet ser moguts sobre la visualitzacio, cobrint el "fons", sense afectar-lo.
La tecnica de blitting mou els mateixos tipus de patrons sobre la pantalla, pero escrivint tant en la mateixa memoria com a la resta de la visualitzacio. Aixo vol dir que el patro se situa tot el temps "sota" la pantalla de la visualitzacio (mentre aquest es sobreescrit). Aquest es alcat cap al programari per encarrilar mitjancant blitting de dues maneres, una vegada per eliminar "la bruticia", i despres una altra vegada per emplacar el bit en la seva nova localitzacio. No obstant aixo, hi ha diversos camins per optimitzar aixo. Si grans arees de la pantalla son preses pels patrons, pot ser mes eficient "blitear" el fons de la pantalla en lloc d'estar esborrant cada patro individualment. La variacio suposa dividir la pantalla en segments i esborrar unicament els segments on els patrons han estat dibuixats. Aquesta tecnica es coneguda com embrutat de rectangles.
Com un podria imaginar, tot aixo fa que la tecnica de blitting sigui significativament mes lenta que la manipulacio de sprites. No obstant aixo el blitting te un gran avantatge, no esta limitat fisicament al nombre de patrons que es puguin "blitejar", o la mida dels patrons. Es pot usar blitting per mostrar qualsevol cosa a la pantalla, incloent simulacio de sprites (a traves d'un patro de doble escriptura), o un esdeveniment de text.