java.awt.image
Class BufferStrategy

java.lang.Object sample code for java.lang.Object definition code for java.lang.Object 
  extended by java.awt.image.BufferStrategy
Direct Known Subclasses:
Component.BltBufferStrategy sample code for java.awt.Component.BltBufferStrategy definition code for java.awt.Component.BltBufferStrategy , Component.FlipBufferStrategy sample code for java.awt.Component.FlipBufferStrategy definition code for java.awt.Component.FlipBufferStrategy

public abstract class BufferStrategy
extends Object sample code for java.lang.Object definition code for java.lang.Object

The BufferStrategy class represents the mechanism with which to organize complex memory on a particular Canvas or Window. Hardware and software limitations determine whether and how a particular buffer strategy can be implemented. These limitations are detectible through the capabilities of the GraphicsConfiguration used when creating the Canvas or Window.

It is worth noting that the terms buffer and surface are meant to be synonymous: an area of contiguous memory, either in video device memory or in system memory.

There are several types of complex buffer strategies; sequential ring buffering, blit buffering, and stereo buffering are common types. Sequential ring buffering (i.e., double or triple buffering) is the most common; an application draws to a single back buffer and then moves the contents to the front (display) in a single step, either by copying the data or moving the video pointer. Moving the video pointer exchanges the buffers so that the first buffer drawn becomes the front buffer, or what is currently displayed on the device; this is called page flipping.

Alternatively, the contents of the back buffer can be copied, or blitted forward in a chain instead of moving the video pointer.

 Double buffering:

                    ***********         ***********
                    *         * ------> *         *
 [To display] <---- * Front B *   Show  * Back B. * <---- Rendering
                    *         * <------ *         *
                    ***********         ***********

 Triple buffering:

 [To      ***********         ***********        ***********
 display] *         * --------+---------+------> *         *
    <---- * Front B *   Show  * Mid. B. *        * Back B. * <---- Rendering
          *         * <------ *         * <----- *         *
          ***********         ***********        ***********

 

Stereo buffering is for hardware that supports rendering separate images for a left and right eye. It is similar to sequential ring buffering, but there are two buffer chains, one for each eye. Both buffer chains flip simultaneously:

 Stereo buffering:

                     ***********         ***********
                     *         * ------> *         *
 [To left eye] <---- * Front B *         * Back B. * <---- Rendering
                     *         * <------ *         *
                     ***********         ***********
                                  Show
                     ***********         ***********
                     *         * ------> *         *
 [To right eye] <--- * Front B *         * Back B. * <---- Rendering
                     *         * <------ *         *
                     ***********         ***********
 

Here is an example of how buffer strategies can be created and used:



 // Check the capabilities of the GraphicsConfiguration
 ...

 // Create our component
 Window w = new Window(gc);

 // Show our window
 w.setVisible(true);

 // Create a general double-buffering strategy
 w.createBufferStrategy(2);
 BufferStrategy strategy = w.getBufferStrategy();

 // Render loop
 while (!done) {
    Graphics g = strategy.getDrawGraphics();
    // Draw to graphics
    ...
    strategy.show();
 }

 // Dispose the window
 w.setVisible(false);
 w.dispose();
 

Since:
1.4
See Also:
Component sample code for java.awt.Component definition code for java.awt.Component , GraphicsConfiguration sample code for java.awt.GraphicsConfiguration definition code for java.awt.GraphicsConfiguration

Constructor Summary
BufferStrategy sample code for java.awt.image.BufferStrategy.BufferStrategy() definition code for java.awt.image.BufferStrategy.BufferStrategy() ()
           
 
Method Summary
abstract  boolean contentsLost sample code for java.awt.image.BufferStrategy.contentsLost() definition code for java.awt.image.BufferStrategy.contentsLost() ()
          Returns whether the drawing buffer was lost since the last call to getDrawGraphics.
abstract  boolean contentsRestored sample code for java.awt.image.BufferStrategy.contentsRestored() definition code for java.awt.image.BufferStrategy.contentsRestored() ()
          Returns whether the drawing buffer was recently restored from a lost state and reinitialized to the default background color (white).
abstract  BufferCapabilities sample code for java.awt.BufferCapabilities definition code for java.awt.BufferCapabilities getCapabilities sample code for java.awt.image.BufferStrategy.getCapabilities() definition code for java.awt.image.BufferStrategy.getCapabilities() ()
           
abstract  Graphics sample code for java.awt.Graphics definition code for java.awt.Graphics getDrawGraphics sample code for java.awt.image.BufferStrategy.getDrawGraphics() definition code for java.awt.image.BufferStrategy.getDrawGraphics() ()
           
abstract  void show sample code for java.awt.image.BufferStrategy.show() definition code for java.awt.image.BufferStrategy.show() ()
          Makes the next available buffer visible by either copying the memory (blitting) or changing the display pointer (flipping).
 
Methods inherited from class java.lang.Object sample code for java.lang.Object definition code for java.lang.Object
clone sample code for java.lang.Object.clone() definition code for java.lang.Object.clone() , equals sample code for java.lang.Object.equals(java.lang.Object) definition code for java.lang.Object.equals(java.lang.Object) , finalize sample code for java.lang.Object.finalize() definition code for java.lang.Object.finalize() , getClass sample code for java.lang.Object.getClass() definition code for java.lang.Object.getClass() , hashCode sample code for java.lang.Object.hashCode() definition code for java.lang.Object.hashCode() , notify sample code for java.lang.Object.notify() definition code for java.lang.Object.notify() , notifyAll sample code for java.lang.Object.notifyAll() definition code for java.lang.Object.notifyAll() , toString sample code for java.lang.Object.toString() definition code for java.lang.Object.toString() , wait sample code for java.lang.Object.wait() definition code for java.lang.Object.wait() , wait sample code for java.lang.Object.wait(long) definition code for java.lang.Object.wait(long) , wait sample code for java.lang.Object.wait(long, int) definition code for java.lang.Object.wait(long, int)
 

Constructor Detail

BufferStrategy sample code for java.awt.image.BufferStrategy() definition code for java.awt.image.BufferStrategy()

public BufferStrategy()
Method Detail

getCapabilities sample code for java.awt.image.BufferStrategy.getCapabilities() definition code for java.awt.image.BufferStrategy.getCapabilities()

public abstract BufferCapabilities sample code for java.awt.BufferCapabilities definition code for java.awt.BufferCapabilities  getCapabilities()
Returns:
the buffering capabilities of this strategy

getDrawGraphics sample code for java.awt.image.BufferStrategy.getDrawGraphics() definition code for java.awt.image.BufferStrategy.getDrawGraphics()

public abstract Graphics sample code for java.awt.Graphics definition code for java.awt.Graphics  getDrawGraphics()
Returns:
the graphics on the drawing buffer. This method may not be synchronized for performance reasons; use of this method by multiple threads should be handled at the application level. Disposal of the graphics object obtained must be handled by the application.

contentsLost sample code for java.awt.image.BufferStrategy.contentsLost() definition code for java.awt.image.BufferStrategy.contentsLost()

public abstract boolean contentsLost()
Returns whether the drawing buffer was lost since the last call to getDrawGraphics. Since the buffers in a buffer strategy are usually type VolatileImage, they may become lost. For a discussion on lost buffers, see VolatileImage.

See Also:
VolatileImage sample code for java.awt.image.VolatileImage definition code for java.awt.image.VolatileImage

contentsRestored sample code for java.awt.image.BufferStrategy.contentsRestored() definition code for java.awt.image.BufferStrategy.contentsRestored()

public abstract boolean contentsRestored()
Returns whether the drawing buffer was recently restored from a lost state and reinitialized to the default background color (white). Since the buffers in a buffer strategy are usually type VolatileImage, they may become lost. If a surface has been recently restored from a lost state since the last call to getDrawGraphics, it may require repainting. For a discussion on lost buffers, see VolatileImage.

See Also:
VolatileImage sample code for java.awt.image.VolatileImage definition code for java.awt.image.VolatileImage

show sample code for java.awt.image.BufferStrategy.show() definition code for java.awt.image.BufferStrategy.show()

public abstract void show()
Makes the next available buffer visible by either copying the memory (blitting) or changing the display pointer (flipping).