public abstract class

VolatileSurfaceManager

extends SurfaceManager
implements DisplayChangedListener
java.lang.Object
   ↳ sun.awt.image.SurfaceManager
     ↳ sun.awt.image.VolatileSurfaceManager
Known Direct Subclasses

Class Overview

This SurfaceManager variant manages an accelerated volatile surface, if it is possible to create that surface. If there is limited accelerated memory, or if the volatile surface disappears due to an operating system event, the VolatileSurfaceManager will attempt to restore the accelerated surface. If that fails, a system memory surface will be created in its place.

Summary

Fields
protected Object context Context for extra initialization parameters.
protected boolean lostSurface Tracks loss of surface contents; queriable by user to see whether contents need to be restored.
protected SurfaceData sdAccel The accelerated SurfaceData object.
protected SurfaceData sdBackup The software-based SurfaceData object.
protected SurfaceData sdCurrent The current SurfaceData object.
protected SurfaceData sdPrevious A record-keeping object.
protected SunVolatileImage vImg A reference to the VolatileImage whose contents are being managed.
Protected Constructors
VolatileSurfaceManager(SunVolatileImage vImg, Object context)
Public Methods
void acceleratedSurfaceLost()
If the accelerated surface is the current SurfaceData for this manager, sets the variable lostSurface to true, which indicates that something happened to the image under management.
boolean contentsLost()
Returns true if rendering data was lost since the last validate call.
void displayChanged()
Called from SunGraphicsEnv when there has been a display mode change.
void flush()
Releases any associated hardware memory for this image by calling flush on sdAccel.
ImageCapabilities getCapabilities(GraphicsConfiguration gc)
Returns an ImageCapabilities object which can be inquired as to the specific capabilities of this Image.
SurfaceData getPrimarySurfaceData()
Returns the main SurfaceData object that "owns" the pixels for this SurfaceManager.
void initContents()
Set contents of the current SurfaceData to default state (i.e.
void initialize()
This init function is separate from the constructor because the things we are doing here necessitate the object's existence.
void paletteChanged()
When device palette changes, need to force a new copy of the image into our hardware cache to update the color indices of the pixels (indexed mode only).
SurfaceData restoreContents()
Called from a SurfaceData object, indicating that our accelerated surface has been lost and should be restored (perhaps using a backup system memory surface).
int validate(GraphicsConfiguration gc)
Get the image ready for rendering.
Protected Methods
SurfaceData getBackupSurface()
Creates a software-based surface (of type BufImgSurfaceData).
abstract SurfaceData initAcceleratedSurface()
Creates a new accelerated surface that is compatible with the current GraphicsConfiguration.
abstract boolean isAccelerationEnabled()
Returns true if acceleration is enabled.
boolean isConfigValid(GraphicsConfiguration gc)
Called by validate() to see whether the GC passed in is ok for rendering to.
void restoreAcceleratedSurface()
Restore sdAccel in case it was lost.
[Expand]
Inherited Methods
From class sun.awt.image.SurfaceManager
From class java.lang.Object
From interface sun.awt.DisplayChangedListener

Fields

protected Object context

Context for extra initialization parameters.

protected boolean lostSurface

Tracks loss of surface contents; queriable by user to see whether contents need to be restored.

protected SurfaceData sdAccel

The accelerated SurfaceData object.

protected SurfaceData sdBackup

The software-based SurfaceData object. Only create when first asked to (otherwise it is a waste of memory as it will only be used in situations of surface loss).

protected SurfaceData sdCurrent

The current SurfaceData object.

protected SurfaceData sdPrevious

A record-keeping object. This keeps track of which SurfaceData was in use during the last call to validate(). This lets us see whether the SurfaceData object has changed since then and allows us to return the correct returnCode to the user in the validate() call.

protected SunVolatileImage vImg

A reference to the VolatileImage whose contents are being managed.

Protected Constructors

protected VolatileSurfaceManager (SunVolatileImage vImg, Object context)

Public Methods

public void acceleratedSurfaceLost ()

If the accelerated surface is the current SurfaceData for this manager, sets the variable lostSurface to true, which indicates that something happened to the image under management. This variable is used in the validate method to tell the caller that the surface contents need to be restored.

public boolean contentsLost ()

Returns true if rendering data was lost since the last validate call.

See Also

public void displayChanged ()

Called from SunGraphicsEnv when there has been a display mode change. Note that we simply invalidate hardware surfaces here; we do not attempt to recreate or re-render them. This is to avoid threading conflicts with the native toolkit and associated threads. Instead, we just nullify the old surface data object and wait for a future method in the rendering process to recreate the surface.

public void flush ()

Releases any associated hardware memory for this image by calling flush on sdAccel. This method forces a lostSurface situation so any future operations on the image will need to revalidate the image first.

public ImageCapabilities getCapabilities (GraphicsConfiguration gc)

Returns an ImageCapabilities object which can be inquired as to the specific capabilities of this Image. The capabilities object will return true for isAccelerated() if the image has a current and valid SurfaceDataProxy object cached for the specified GraphicsConfiguration parameter.

This class provides a default implementation of the ImageCapabilities that will try to determine if there is an associated SurfaceDataProxy object and if it is up to date, but only works for GraphicsConfiguration objects which implement the ProxiedGraphicsConfig interface defined below. In practice, all configs which can be accelerated are currently implementing that interface.

A null GraphicsConfiguration returns a value based on whether the image is currently accelerated on its default GraphicsConfiguration.

public SurfaceData getPrimarySurfaceData ()

Returns the main SurfaceData object that "owns" the pixels for this SurfaceManager. This SurfaceData is used as the destination surface in a rendering operation and is the most authoritative storage for the current state of the pixels, though other versions might be cached in other locations for efficiency.

public void initContents ()

Set contents of the current SurfaceData to default state (i.e. clear the background).

public void initialize ()

This init function is separate from the constructor because the things we are doing here necessitate the object's existence. Otherwise, we end up calling into a subclass' overridden method during construction, before that subclass is completely constructed.

public void paletteChanged ()

When device palette changes, need to force a new copy of the image into our hardware cache to update the color indices of the pixels (indexed mode only).

public SurfaceData restoreContents ()

Called from a SurfaceData object, indicating that our accelerated surface has been lost and should be restored (perhaps using a backup system memory surface). Returns the newly restored primary SurfaceData object.

public int validate (GraphicsConfiguration gc)

Get the image ready for rendering. This method is called to make sure that the accelerated SurfaceData exists and is ready to be used. Users call this method prior to any set of rendering to or from the image, to make sure the image is ready and compatible with the given GraphicsConfiguration. The image may not be "ready" if either we had problems creating it in the first place (e.g., there was no space in vram) or if the surface became lost (e.g., some other app or the OS caused vram surfaces to be removed). Note that we want to return RESTORED in any situation where the SurfaceData is different than it was last time. So whether it's software or hardware, if we have a different SurfaceData object, then the contents have been altered and we must reflect that change to the user.

Protected Methods

protected SurfaceData getBackupSurface ()

Creates a software-based surface (of type BufImgSurfaceData). The software representation is only created when needed, which is only during some situation in which the hardware surface cannot be allocated. This allows apps to at least run, albeit more slowly than they would otherwise.

protected abstract SurfaceData initAcceleratedSurface ()

Creates a new accelerated surface that is compatible with the current GraphicsConfiguration. Returns the new accelerated SurfaceData object, or null if the surface creation was not successful. Platform-specific subclasses should initialize an accelerated surface (e.g. a DirectDraw surface on Windows, an OpenGL pbuffer, or an X11 pixmap).

protected abstract boolean isAccelerationEnabled ()

Returns true if acceleration is enabled. If not, we simply use the backup SurfaceData object and return quickly from most methods in this class.

protected boolean isConfigValid (GraphicsConfiguration gc)

Called by validate() to see whether the GC passed in is ok for rendering to. This generic implementation checks to see whether the GC is either null or is from the same device as the one that this image was created on. Platform- specific implementations may perform other checks as appropriate.

protected void restoreAcceleratedSurface ()

Restore sdAccel in case it was lost. Do nothing in this default case; platform-specific implementations may do more in this situation as appropriate.