Certain applications can use layers to display a static
background on top of which “live” graphic objects will
be drawn and manipulated by the user.
In this type of application, the graphic objects taking
part in the background are static and are not modified by the user
or the application. Thus, it is possible to draw just once for all
of the layers constituting the graphic background. This increases
the drawing speed of the application.
The process is called
triple buffering. This term is used because the layers will
be drawn in an additional off screen image. Thereafter, when the view
needs to be redrawn, this image is used instead of redrawing the graphic
objects.
Note
Unlike
double buffering, triple buffering is not engaged to remove
flickering but to increase the drawing speed. Double and triple buffering
can be used together.
For an instance of IlvManagerView
,
it is possible to indicate that a certain number of layers will be
part of the triple buffering.
This is done using the following method of IlvManagerView
:
void setTripleBufferedLayerCount(int n)
When this method is called, layers with indices between
0 and n-1 (the nth background layers) will be triple buffered.
Once the method is called and the view has been painted
once, further modifications to graphic objects will not be rendered
on the screen, since only the triple buffer image will be displayed.
Note that the triple buffer will be updated only when:
The transformer of the view changes
(you are zooming or panning the view).
You add or remove layers.
You change the number of triple-buffered
layers.
The triple-buffered layer visibility
changes.
You add graphic objects to or remove
them from the triple-buffered layers.
You call
applyToObject to make changes to the triple-buffered graphic objects
on the triple-buffered layers.
Note
Some interactors, such as the reshape interactor, call
this function. Therefore, when you reshape a graphic object on a triple-buffered
layer with the mouse, the triple buffer is invalidated.
You change the visibility of the graphic
objects on the triple-buffered layers.
You change the triple-buffered layer
on which the graphic objects are positioned.
If for any reason you need to update the triple buffer,
you can use these methods:
void invalidateTripleBuffer(boolean repaint)
void invalidateTripleBuffer(IlvRect rect, boolean repaint)
To summarize, an application will use triple buffering
when the contents of background layers are static, and when the application
does not require the user to zoom and pan frequently.