Copyright (c) Hyperion Entertainment and contributors.

Optimized Window Refreshing: Difference between revisions

From AmigaOS Documentation Wiki
Jump to navigation Jump to search
Content deleted Content added
Steven Solie (talk | contribs)
Created page with "Maintaining the graphical contents of an Amiga window can be difficult. There are many subtleties associated with the process known as window refreshing. At present, many appl..."
 
Steven Solie (talk | contribs)
No edit summary
Line 1: Line 1:
Maintaining the graphical contents of an Amiga window can be difficult. There are many subtleties associated with the process
Maintaining the graphical contents of an Amiga window can be difficult. There are many subtleties associated with the process
known as window refreshing. At present, many applications refresh their windows in suboptimal ways, or fail to refresh correctly under all conditions. This article attempts to explore and resolve the window refreshing problems commonly encountered by applications.
known as window refreshing. At present, many applications refresh their windows in suboptimal ways, or fail to refresh correctly under all conditions. This article attempts to explore and resolve the window refreshing problems commonly encountered by applications.

= Damaging Information =

Although many people think of Intuition as the Amiga's windowing
system, the lower-level Layers library actually handles most of the
work involved in maintaining Intuition's windowed environment. The
Layers library divides a single physical display (a BitMap) into
multiple virtual displays. Each of these virtual displays is known
as a layer. Intuition uses the functions in the Layers library to
move, resize, and depth arrange these layers.

Normally, each Intuition window consists of a single layer.
Intuition adds borders and gadgetry to the layer to give it the
familiar Intuition window appearance. Intuition also takes care of
monitoring user input to let the user move, resize, and depth arrange
windows. When Intuition wishes to change the size or position of a
window, it calls functions in the Layers library to do most of the
grunt work.

One of the main reasons for a layered rendering system is to provide
multiple independent logical rendering regions to applications. The
layer is the basis for the Intuition Window. The functions in the
Layers library allow several applications to render into the same
physical display (an Intuition Screen for example) without worrying
about interfering with each other. As far as the application is
concerned, it has an entire display all to itself.

There is a limit to the isolation that this layered environment
offers applications. Because layers can overlap, by moving,
resizing, or deleting a layer, a program can uncover portions of
underlying layers. These newly exposed portions are called "damage
regions". A layer can sustain damage when a task performs layers
operations on it or other layers in the same display. When the
Layers library damages a layer, it sets the layer's LAYERREFRESH bit
in the Flags field of the Layer structure.

When damage occurs to a layer, the damaged region of the layer must
be repaired by redrawing it. The entity responsible for redrawing
the damaged region depends on the type of layer. The Layers library
offers three types of layers: simple refresh, smart refresh, and
superbitmap. Subsequently, Intuition bases its three types of
windows on these three types of layers. The difference between each
type has to do with the way in which each handles damage repair.

When a layers operation damages a simple refresh layer, the entire
burden of repairing the layer's damage rests on the application that
created the layer (if the application is using Intuition windows,
which are built on top of layers, Intuition shares the burden of
damage repair with the application. More on this later). This is
because a simple refresh layer does not preserve its contents. The
advantage of this type of layer is that it doesn't use much memory.
The disadvantage is that every time a layers operation reveals a
portion of a simple refresh layer, the application must explicitly
rerender the exposed damaged regions.

Smart refresh layers help the application by doing some of the
refreshing automatically. If a layer operation conceals a portion of
a layer, that portion is automatically copied to an off-screen
buffer. If a layer operation later reveals that portion of the
layer, the Layers library uses the temporary buffer to update the
revealed region. The Layers library does not leave the LAYERREFRESH
bit set in this case because the Layers library took care of the
damage. The application still needs to refresh the smart refresh
layer whenever it is made larger, as the Layers library has no idea
what should be in the newly exposed areas. In this case, the Layers
library will leave the LAYERREFRESH bit set.

Finally, superbitmap layers totally eliminate the need for an
application to refresh the display. The Layers library maintains a
complete off-screen buffer representing the layer's contents. When a
layer operation exposes new portions of a layer, the Layers library
automatically updates these regions by copying from the off-screen
buffer. The Layers library will never leave the LAYERREFRESH bit set
for a superbitmap layer.

For the application programmer, a superbitmap layer offers the
simplest approach to refreshing the layer as the entire burden of
repairing damaged regions falls on the Layers library. This added
convenience does have a cost--because of its off-screen buffer, the
superbitmap layer requires a significantly larger amount of memory
compared to the simple and smart refresh layers. The Layers library
allocates this memory even if the layer never sustains damage.

Revision as of 17:07, 5 June 2013

Maintaining the graphical contents of an Amiga window can be difficult. There are many subtleties associated with the process known as window refreshing. At present, many applications refresh their windows in suboptimal ways, or fail to refresh correctly under all conditions. This article attempts to explore and resolve the window refreshing problems commonly encountered by applications.

Damaging Information

Although many people think of Intuition as the Amiga's windowing system, the lower-level Layers library actually handles most of the work involved in maintaining Intuition's windowed environment. The Layers library divides a single physical display (a BitMap) into multiple virtual displays. Each of these virtual displays is known as a layer. Intuition uses the functions in the Layers library to move, resize, and depth arrange these layers.

Normally, each Intuition window consists of a single layer. Intuition adds borders and gadgetry to the layer to give it the familiar Intuition window appearance. Intuition also takes care of monitoring user input to let the user move, resize, and depth arrange windows. When Intuition wishes to change the size or position of a window, it calls functions in the Layers library to do most of the grunt work.

One of the main reasons for a layered rendering system is to provide multiple independent logical rendering regions to applications. The layer is the basis for the Intuition Window. The functions in the Layers library allow several applications to render into the same physical display (an Intuition Screen for example) without worrying about interfering with each other. As far as the application is concerned, it has an entire display all to itself.

There is a limit to the isolation that this layered environment offers applications. Because layers can overlap, by moving, resizing, or deleting a layer, a program can uncover portions of underlying layers. These newly exposed portions are called "damage regions". A layer can sustain damage when a task performs layers operations on it or other layers in the same display. When the Layers library damages a layer, it sets the layer's LAYERREFRESH bit in the Flags field of the Layer structure.

When damage occurs to a layer, the damaged region of the layer must be repaired by redrawing it. The entity responsible for redrawing the damaged region depends on the type of layer. The Layers library offers three types of layers: simple refresh, smart refresh, and superbitmap. Subsequently, Intuition bases its three types of windows on these three types of layers. The difference between each type has to do with the way in which each handles damage repair.

When a layers operation damages a simple refresh layer, the entire burden of repairing the layer's damage rests on the application that created the layer (if the application is using Intuition windows, which are built on top of layers, Intuition shares the burden of damage repair with the application. More on this later). This is because a simple refresh layer does not preserve its contents. The advantage of this type of layer is that it doesn't use much memory. The disadvantage is that every time a layers operation reveals a portion of a simple refresh layer, the application must explicitly rerender the exposed damaged regions.

Smart refresh layers help the application by doing some of the refreshing automatically. If a layer operation conceals a portion of a layer, that portion is automatically copied to an off-screen buffer. If a layer operation later reveals that portion of the layer, the Layers library uses the temporary buffer to update the revealed region. The Layers library does not leave the LAYERREFRESH bit set in this case because the Layers library took care of the damage. The application still needs to refresh the smart refresh layer whenever it is made larger, as the Layers library has no idea what should be in the newly exposed areas. In this case, the Layers library will leave the LAYERREFRESH bit set.

Finally, superbitmap layers totally eliminate the need for an application to refresh the display. The Layers library maintains a complete off-screen buffer representing the layer's contents. When a layer operation exposes new portions of a layer, the Layers library automatically updates these regions by copying from the off-screen buffer. The Layers library will never leave the LAYERREFRESH bit set for a superbitmap layer.

For the application programmer, a superbitmap layer offers the simplest approach to refreshing the layer as the entire burden of repairing damaged regions falls on the Layers library. This added convenience does have a cost--because of its off-screen buffer, the superbitmap layer requires a significantly larger amount of memory compared to the simple and smart refresh layers. The Layers library allocates this memory even if the layer never sustains damage.