Tips for Improving Pixel Drawing Rates
As you can see, OpenGL has a rich set of features for reading,
drawing and manipulating pixel data. Although these features are often very
useful, they can also decrease performance. Here are some tips for improving
pixel draw rates.
- For best performance, set all pixel-transfer parameters
to their default values, and set pixel zoom to (1.0,1.0).
- A series of fragment operations is applied to pixels as
they are drawn into the framebuffer. (See "Testing and Operating on Fragments"
in Chapter 10.) For optimum performance disable
all fragment operations.
- While performing pixel operations, disable other costly
states, such as texturing and lighting.
- If you use an image format and type that matches the framebuffer,
you can reduce the amount of work that the OpenGL implementation has to do.
For example, if you are writing images to an RGB framebuffer with 8 bits per
component, call glDrawPixels() with format set to RGB and
type set to UNSIGNED_BYTE.
- For some implementations, unsigned image formats are faster
to use than signed image formats.
- It is usually faster to draw a large pixel rectangle than
to draw several small ones, since the cost of transferring the pixel data
can be amortized over many pixels.
- If possible, reduce the amount of data that needs to be
copied by using small data types (for example, use GL_UNSIGNED_BYTE) and fewer
components (for example, use format GL_LUMINANCE_ALPHA).
- Pixel-transfer operations, including pixel
mapping and values for scale, bias, offset, and shift other than the defaults,
may decrease performance.