stringtranslate.com

Un poco de blit

Bit blit (también escrito BITBLT , BIT BLT , BitBLT , Bit BLT , Bit Blt , etc., que significa transferencia de bloques de bits ) es una operación de datos comúnmente utilizada en gráficos de computadora en la que varios mapas de bits se combinan en uno usando una función booleana . [1]

La operación implica al menos dos mapas de bits: un "origen" (o "primer plano") y un "destino" (o "fondo"), y posiblemente un tercero que a menudo se llama " máscara ". El resultado puede escribirse en un cuarto mapa de bits, aunque a menudo reemplaza al destino. Los píxeles de cada uno se combinan utilizando una operación raster seleccionable por programa, una fórmula booleana bit a bit . La operación raster más obvia sobrescribe el destino con el origen. Otras pueden implicar operaciones AND , OR , XOR y NOT . [1] El chipset gráfico del Commodore Amiga (y otros) podía combinar tres mapas de bits de origen utilizando cualquiera de las 256 posibles funciones booleanas de 3 entradas .

El software de gráficos moderno ha reemplazado casi por completo las operaciones bit a bit por operaciones matemáticas más generales que se utilizan para efectos como la composición alfa . Esto se debe a que las operaciones bit a bit en pantallas a color no suelen producir resultados que se asemejen a la combinación física de luces o tintas. Algunos programas aún utilizan XOR para dibujar rectángulos de resaltado interactivos o bordes de regiones; cuando esto se hace con imágenes en color, los colores inusuales resultantes se ven fácilmente.

Orígenes

El nombre deriva de la rutina BitBLT para la computadora Xerox Alto , que significa transferencia de bloques de límite de bits . Dan Ingalls , Larry Tesler , Bob Sproull y Diana Merry programaron esta operación en Xerox PARC en noviembre de 1975 para el sistema Smalltalk -72. Dan Ingalls implementó más tarde una versión rediseñada en microcódigo .

El desarrollo de métodos rápidos para diversas operaciones de bit blit dio impulso a la evolución de las pantallas de computadora desde el uso de gráficos de caracteres ( modo texto ) hasta el uso de gráficos rasterizados (mapa de bits) para todo. Las máquinas que dependen en gran medida del rendimiento de los gráficos 2D (como las consolas de videojuegos ) a menudo tienen circuitos especiales llamados blitter .

Ejemplo de implementación de blit enmascarado

Un uso clásico del blitting es renderizar sprites transparentes sobre un fondo. En este ejemplo, se utilizan una imagen de fondo, un sprite y una máscara de 1 bit. Como la máscara es de 1 bit, no existe la posibilidad de transparencia parcial mediante la combinación alfa .

Un bucle que examina cada bit de la máscara y copia el píxel del sprite solo si la máscara está configurada será mucho más lento que el hardware que puede aplicar exactamente la misma operación a cada píxel. En cambio, se puede implementar un blit enmascarado con dos operaciones BitBlit regulares utilizando las operaciones de trama AND y OR.

El sprite se dibuja en varias posiciones sobre la imagen para producir esto:

Técnica

Al preparar el sprite, los colores son muy importantes. Los píxeles de máscara son 0 (negro) en cualquier lugar donde se vaya a mostrar el píxel del sprite correspondiente, y 1 (blanco) en cualquier lugar donde se deba conservar el fondo. El sprite debe ser 0 (negro) en cualquier lugar donde se supone que debe ser transparente, pero tenga en cuenta que se puede utilizar el negro en las regiones no transparentes.

En el primer blit, la máscara se blitea sobre el fondo usando el operador de trama AND . Debido a que cualquier valor AND con 0 es igual a 0, y cualquier valor AND con 1 no cambia, se crean áreas negras donde aparecerán los sprites reales, mientras que el resto del fondo se deja intacto.

En el segundo blit, el sprite se blitea sobre el fondo recién modificado utilizando el operador de trama OR . Debido a que cualquier valor OR con 0 no cambia, el fondo no se ve afectado y las áreas negras se rellenan con la imagen real del sprite.

También es posible lograr el mismo efecto utilizando un sprite con un fondo blanco y una máscara de color blanco sobre negro . En este caso, primero se aplicaría la operación OR a la máscara y luego se aplicaría la operación AND al sprite.

Blitting vs sprites de hardware

El blitting es similar al dibujo de sprites por hardware , en el sentido de que ambos sistemas reproducen un patrón, normalmente un área cuadrada, en diferentes lugares de la pantalla. [2] Los sprites por hardware tienen la ventaja de almacenarse en una memoria separada y, por lo tanto, no alteran la memoria principal de la pantalla. Esto permite moverlos por la pantalla, cubriendo el "fondo", sin que esto afecte a la misma.

El blitting mueve los mismos tipos de patrones por la pantalla, pero lo hace escribiendo en la misma memoria que el resto de la pantalla. Esto significa que cada vez que se coloca un patrón de primer plano en la pantalla, los píxeles de fondo que se encuentran debajo se sobrescriben o se "dañan". El software debe reparar este daño mediante el blitting dos veces, una para restaurar los píxeles que se cambiaron y otra para colocar el patrón de primer plano en su nueva ubicación. Una forma de hacerlo es almacenar los patrones necesarios en la VRAM fuera de la pantalla y reservar otra área fuera de la pantalla como una especie de pila para almacenar temporalmente la sección de pantalla afectada. Suponiendo que el chip gráfico tiene VRAM dedicada, esto es útil para reducir la presión sobre la RAM del sistema, pero también la ranura de expansión ISA con ancho de banda limitado en los sistemas de PC más antiguos.

Sin embargo, existen varias formas de optimizar esto. Si los patrones ocupan grandes áreas de la pantalla, puede resultar más eficiente borrar el fondo de la pantalla en lugar de borrar cada patrón individualmente. Una variación consiste en dividir la pantalla en segmentos y borrar solo los segmentos en los que se han dibujado patrones. Esta técnica se conoce como rectángulos sucios.

Véase también

Referencias

  1. ^ ab Sanchez, Julio; Maria P. Canton (2007). "Visualización de imágenes en mapas de bits". Soluciones de software para ingenieros y científicos . CRC Press. pág. 690.
  2. ^ "Framebuffer - Wiki de OpenGL". www.khronos.org . Consultado el 23 de junio de 2020 . Una operación blit es una forma especial de operación de copia; copia un área rectangular de píxeles de un framebuffer a otro. Esta función también tiene algunas propiedades muy específicas con respecto al multimuestreo.

Enlaces externos