Graphical overlay planes are made up of additional memory positioned logically on top of the frame buffer (thus the name overlay). Typically, graphics applications would use this extra hardware for creating windows that would not disturb the contents of existing windows in the frame buffer.
The primary goals for implementing this feature are:
At X server startup/reset time, the following property is created on the root window of any screen that has overlay capabilities:
property_name: SERVER_OVERLAY_VISUALS property_type: SERVER_OVERLAY_VISUALS format: 32
The contents of the property is a list of each visual that resides in the overlays. Each element of the list contains information in the following format:
SERVER_OVERLAY_VISUALS { overlay_visual: VISUALID transparent_type: {None, TransparentPixel, TransparentMask} value: CARD32 layer: CARD32 }
Visuals in layer 0 (zero) are nonoverlay visuals, and would not appear in the list. Overlay visuals start in layer 1 (one). (See the -layer flag of the X command for information concerning how to specify the default visual.)
Drawing into a window created with an overlay visual (an overlay window) does not disturb the contents of windows in layers different from the layer containing the overlay window. Additionally, there is a set (perhaps empty) of transparent pixel values such that when written into an overlay window, pixels of windows in the next lower-numbered layer show through. If these pixel values also happen to be transparent, the process is applied until a window containing a nontransparent pixel value is found. Since visuals in layer 0 are not displayed in the list, they cannot have any transparent pixel values. The transparent_type and value fields specify the set of transparent pixel values as follows:
transparent_type | Meaning of Value Field |
0 - None | Ignore the value field; there are no transparent pixels. |
1 - TransparentPixel | The value field explicitly names a transparent pixel. |
2 - TransparentMask | Any pixel value that has at least the same bits on as the value field is transparent. A pixel is transparent if and only if (value & pixel) == value. |
The same overlay_visual element may appear more than once in the list. If it does:
Note: There is no restriction on the parent-child relationships of windows with respect to the visual with which the windows were created. A window can have combinations of children in any layer on, below, or above its own layer.
On the GXT150 and GXT155 families of graphics adapters (except for the GXT150M), the GXT_OVERLAYS environment variable must be set to a value of TRUE to enable 4-bit overlays.