Bit blit
En computacion grafica, BIT BLIT (bitblt, blitting, etc) es una primitiva grafica consistente en que dos mapas de bit son combinados en uno. Se trata de una de las primitivas graficas mas basicas y por tanto mas utilizadas en graficos 2D. La mayoria de las tarjetas de video la implementan en hardware (es una de la muchas operaciones de las que se encarga la GPU).
Origenes
[editar]El nombre deriva de la instruccion BitBLT (bit block transfer, transferencia de bloque de bits) del ordenador Xerox Alto. Esta operacion fue creada por Diana Merry en Xerox PARC para el sistema Smalltalk-72. Para el sistema Smalltalk-74, Dan Ingalls implemento una version redisenada en microcodigo.
El desarrollo de metodos rapidos para varias operaciones bit blit fue la clave en la evolucion de visualizaciones en ordenadores desde el uso de graficos de caracteres, hasta el uso de graficos de mapas de bit para todo. Las maquinas que necesitaban especial rendimiento de graficos 2D (como las consolas de videojuegos) venian con un chip especializado llamado Blitter.
Bit Blit, tecnicas y usos
[editar]Un uso clasico para blitting es renderizar sprites con transparencias sobre un fondo. Por razones de velocidad es normalmente inviable moverse a traves de cada pixel y encontrar si esto necesita ser visualizado. Por ejemplo, si tenemos la siguiente imagen de fondo:
y deseamos mostrar varios sprites sobre esta imagen de fondo representando, por ejemplo, objetos de un juego para producir esto:
Lo primero que necesitamos son los mapas de bit para los sprites y las correspondientes mascaras. Los colores tienen mucha importancia ya que el fondo del sprite y el primer plano de la mascara son negros, almacenados como ceros binarios. Los fondos de las mascaras son blancos, almacenados como unos binarios.
El primer blit usa el RasterOp de AND con el fondo y la mascara de los sprites. Debido a que cualquier valor AND con 0 igual a 0, y cualquier valor AND con 1 sin cambios, podemos crear areas negras donde los sprites actuales apareceran, y dejaran el resto del fondo solo.
El segundo blit usa el RasterOp de OR con el fondo modificado y el sprite actual. Debido a algun valor OR con 0 sin cambios, el fondo no sera afectado y las areas negras son ocupadas con la actual imagen del sprite.
Blitting vs. sprites
[editar]La tecnica de bliting es similar al dibujo de sprites mediante hardware, en ambos sistemas se reproduce un patron, tipicamente un area cuadrada, en diferentes localizaciones de la pantalla. Los sprites tienen la ventaja de ser alojados en una memoria separada, y por tanto no molesta a la memoria de la visualizacion principal. Esto les permite ser movidos sobre la visualizacion, cubriendo el "fondo", sin afectarlo.
La tecnica de blitting mueve los mismos tipos de patrones sobre la pantalla, pero escribiendo tanto en la misma memoria como en el resto de la visualizacion. Esto significa que el patron se situa todo el tiempo "bajo" la pantalla de la visualizacion (mientras este es sobreescrito). Este es alzado hacia el software para encauzarlo mediante blitting de dos maneras, una vez para eliminar "la suciedad", y luego otra vez para emplazar el bit en su nueva localizacion. Sin embargo, hay varios caminos para optimizar esto. Si grandes areas de la pantalla son tomadas por los patrones, puede ser mas eficiente "blitear" el fondo de la pantalla en lugar de estar borrando cada patron individualmente. La variacion supone dividir la pantalla en segmentos y borrar unicamente los segmentos donde los patrones han sido dibujados. Esta tecnica es conocida como ensuciado de rectangulos.
Como uno podria imaginar, todo esto hace que la tecnica de blitting sea significativamente mas lenta que la manipulacion de sprites. Sin embargo el blitting tiene una gran ventaja, no esta limitado fisicamente al numero de patrones que se puedan "blitear", o al tamano de los patrones. Se puede usar blitting para mostrar cualquier cosa en la pantalla, incluyendo simulacion de sprites (a traves de un patron de doble escritura), o un evento de texto.
Enlaces externos
[editar]- Tutorial de Bitblt (enlace roto disponible en Internet Archive; vease el historial, la primera version y la ultima).