[net.micro] What is "bitblt" ?

gnu@l5.uucp (John Gilmore) (12/30/85)

In article <1038@utcs.uucp>, onn@utcs.uucp (Brian Onn) writes:
> In article <976@brl-tgr.ARPA> SECRIST%OAK.SAINET.MFENET@lll-mfe.arpa writes:
> Richard,  "bitblt" is a pseudonym for "bit-mapped block transfer", and from
> my understanding of it, it is a hardware device capable of moving data that
> is defined on bit boundaries from one location in memory to another.  It is
> used extensively in raster graphics hardware, to optimize line and area
> operations.   Unfortunately, that's about all I know on this subject.

Very close.  Bitblt (also known as RasterOp) is an operation that
combines two or more bit maps to produce a third.  The bit maps
are typically rectangular, can be aligned at any bit boundary in memory
(or in a frame store) and can usually be a sub-rectangle of a larger
one (thus, all the bits are not necessarily contiguous).  Typically,
these bit matrices are combined with Boolean functions (and, or, xor,
and-not, etc).  Fancy implementations will merge more than two bit
matrices at once (using a Boolean operation with three arguments) or
will do funny alignment things to make replicated patterns (like gray
stipple patterns) come out looking right.  

Typical bit maps are:  the screen; an icon; a letter of the alphabet; a
whole font of characters; a line segment; a block of black or white; a
window; a region to be scrolled; a region to be cleared; a cursor
(arrow, hourglass, etc).

Bitblt was invented for the Alto at Xerox Parc; there it was
implemented in microcode.  It has been done in hardware, CPU microcode,
software, and custom I/O chips since.  Modern processor chips (68020,
32016, I believe 80386) implement a one-word subset of bitblt which can
read or store bits from the middle of a word anywhere in memory.  This
can be used in the inner loop of a more complete software bitblt
implementation.  Most systems that do a lot of bit-mapped graphics
provide hardware support of one sort or another for bitblt.  Some, like
monochrome Suns, AT&T Blits, or the Atari ST, just provide fast access
to the frame buffer, a fast CPU, and tight software.

There's an excellent tutorial on bit-mapped graphics in the Siggraph
tutorials binders from a few years back.  Modern graphics textbooks
(eg Newman & Sproull _Principles of Interactive Computer Graphics_)
also cover it, though not as well from the bitblt point of view.

ian@wcwvax.UUCP (Ian Kemmish) (01/07/86)

There are only 16 functions of two Boolean variables, so it's
easy to cater for all possible cases in monochrome.  In addition,
the fact that historically bitblt has often been done in hardware
has meant that there was no extra cost involved in providing all
sixteen.  By the time we get to mainly-software implementations,
history dictates what to implement!

In colour, with 8, 16 or 24 bits/pixel, it's clearly ludicrous to
try and cater for all eventualities.   A lot of people implement
their colour screens as multiple bitplanes, so they tend to just
allow monochrome bitblts on each plane.   This is why colour bitblt
often appears to be a no-no.   The trick is to define a sensible
(but small) set of "useful" operations.

Here at WCW, we have done:
PAINT (overlay), HIGHLIGHT (invertible), MIX and UNMIX (complementary).
Each of these rules can be applied direct between two rasters
(except for HIGHLIGHT, which is a unary operation) or via a stencil.

This set of rules seems to be enough to do most of the things people
need to do with bitmap displays - we have implemented a brush graphics
library with arbitrarily shaped, coloured and patterned brushes with
no real trouble.  We have also mapped these rules into the traditional
Boolean functions for operating on monochrome rasters.

Footnote:
I don't think the Mac actually uses bitblt very much at all.  I suspect
that Quickdraw calculates the region to fill with a pattern and then
fills that region.   The reason for my suspicion is that an ellispe
drawn with a rectangular brush actually comes out a slightly different
shape from a Quickdraw outline oval!


++ You know whose trademarks I've been using ++

frank@sagan.UUCP (Frank Whaley) (01/11/86)

The January '86 IEEE Computer Graphics and Applications contains a 
lovely article "Requirements for a VLSI Graphics Processor" by Karl 
Guttag, Jerry Van Aken, and Michael Asal of Texas Instruments.  They 
describe a number of issues for a PixBlt (pixel block transfer) 
concept as the color extension of BitBlt, and define both Boolean and 
arithmetic operations to be performed on multiple-bit pixels.
I couldn't put it down.  
-- 
...Frank Whaley, MicroPro Product Development
UUCP: {decvax!decwrl | ucbvax}!dual!
	    {hplabs | glacier}!well!
		     seismo!lll-crg!
			ihnp4!ptsfa!micropro!sagan!frank
ARPA: micropro!sagan!frank@lll-crg.ARPA

"I'm told there are better programs [than WordStar],
 but I'm also told there are better alphabets."
	--William F. Buckley Jr.