Drawing Pixels, Bitmaps, Fonts, and Images
After reading this chapter, you'll be able to do the following:
- Position and draw bitmapped data
- Read pixel data (bitmaps and images) from the framebuffer
into processor memory and from memory into the framebuffer
- Copy pixel data from one color buffer to another, or to
another location in the same buffer
- Magnify or reduce an image as it's written to the framebuffer
- Control pixel-data formatting and perform
other transformations as the data is moved to and from the framebuffer
So far, most of the discussion in this guide has concerned
the rendering of geometric data - points, lines, and polygons. Two other important
classes of data that can be rendered by OpenGL are
- Bitmaps, typically used for characters in fonts
- Image data, which might have been scanned
in or calculated
Both bitmaps and image data take the form of rectangular arrays
of pixels. One difference between them is that a bitmap consists of a single
bit of information about each pixel, and image data typically includes several
pieces of data per pixel (the complete red, green, blue, and alpha color components,
for example). Also, bitmaps are like masks in that they're used to overlay another
image, but image data simply overwrites or is blended with whatever data is
in the framebuffer.
This chapter describes how to draw pixel data (bitmaps and
images) from processor memory to the framebuffer and how to read pixel data
from the framebuffer into processor memory. It also describes how to copy pixel
data from one position to another, either from one buffer to another or within
a single buffer. This chapter contains the following major sections:
- "Bitmaps and Fonts"
describes the commands for positioning and drawing bitmapped data. Such data
may describe a font.
- "Images" presents the basic information about drawing, reading and copying
- "Imaging Pipeline"
describes the operations that are performed on images and bitmaps when they
are read from the framebuffer and when they are written to the framebuffer.
- "Reading and Drawing Pixel Rectangles"
covers all the details of how pixel data is stored in memory and how to transform
it as it's moved into or out of memory.
- "Tips for Improving Pixel Drawing Rates"
lists tips for getting better performance when drawing pixel rectangles.
In most cases, the necessary pixel operations are simple,
so the first three sections might be all you need to read for your application.
However, pixel manipulation can be complex - there are many ways to store pixel
data in memory, and you can apply any of several transformations to pixels as
they're moved to and from the framebuffer. These details are the subject of
the fourth section of this chapter. Most likely, you'll want to read this section
only when you actually need to make use of the information. The last section
provides useful tips to get the best performance when rendering bitmaps and