use of sun.java2d.windows.GDIWindowSurfaceData in project jdk8u_jdk by JetBrains.
the class D3DScreenUpdateManager method removeGdiSurface.
/**
* Remove the gdi surface corresponding to the passed d3dw surface
* from list of the cached gdi surfaces.
*
* @param d3dw surface for which associated gdi surface is to be removed
*/
private void removeGdiSurface(final D3DWindowSurfaceData d3dw) {
if (gdiSurfaces != null) {
GDIWindowSurfaceData gdisd = gdiSurfaces.get(d3dw);
if (gdisd != null) {
gdisd.invalidate();
gdiSurfaces.remove(d3dw);
}
}
}
use of sun.java2d.windows.GDIWindowSurfaceData in project jdk8u_jdk by JetBrains.
the class D3DScreenUpdateManager method getGdiSurface.
/**
* Creates (or returns a cached one) gdi surface for the same peer as
* the passed d3dw surface has.
*
* @param d3dw surface used as key into the cache
* @return gdi window surface associated with the d3d window surfaces' peer
*/
private synchronized SurfaceData getGdiSurface(D3DWindowSurfaceData d3dw) {
if (gdiSurfaces == null) {
gdiSurfaces = new HashMap<D3DWindowSurfaceData, GDIWindowSurfaceData>();
}
GDIWindowSurfaceData gdisd = gdiSurfaces.get(d3dw);
if (gdisd == null) {
gdisd = GDIWindowSurfaceData.createData(d3dw.getPeer());
gdiSurfaces.put(d3dw, gdisd);
}
return gdisd;
}
use of sun.java2d.windows.GDIWindowSurfaceData in project jdk8u_jdk by JetBrains.
the class D3DVolatileSurfaceManager method handleVItoScreenOp.
/**
* If the destination surface's peer can potentially handle accelerated
* on-screen rendering then it is likely that the condition which resulted
* in VI to Screen operation is temporary, so this method sets the
* restore countdown in hope that the on-screen accelerated rendering will
* resume. In the meantime the backup surface of the VISM will be used.
*
* The countdown is needed because otherwise we may never break out
* of "do { vi.validate()..} while(vi.lost)" loop since validate() could
* restore the source surface every time and it will get lost again on the
* next copy attempt, and we would never get a chance to use the backup
* surface. By using the countdown we allow the backup surface to be used
* while the screen surface gets sorted out, or if it for some reason can
* never be restored.
*
* If the destination surface's peer could never do accelerated onscreen
* rendering then the acceleration for the SurfaceManager associated with
* the source surface is disabled forever.
*/
static void handleVItoScreenOp(SurfaceData src, SurfaceData dst) {
if (src instanceof D3DSurfaceData && dst instanceof GDIWindowSurfaceData) {
D3DSurfaceData d3dsd = (D3DSurfaceData) src;
SurfaceManager mgr = SurfaceManager.getManager((Image) d3dsd.getDestination());
if (mgr instanceof D3DVolatileSurfaceManager) {
D3DVolatileSurfaceManager vsm = (D3DVolatileSurfaceManager) mgr;
if (vsm != null) {
d3dsd.setSurfaceLost(true);
GDIWindowSurfaceData wsd = (GDIWindowSurfaceData) dst;
WComponentPeer p = wsd.getPeer();
if (D3DScreenUpdateManager.canUseD3DOnScreen(p, (Win32GraphicsConfig) p.getGraphicsConfiguration(), p.getBackBuffersNum())) {
// 10 is only chosen to be greater than the number of
// times a sane person would call validate() inside
// a validation loop, and to reduce thrashing between
// accelerated and backup surfaces
vsm.setRestoreCountdown(10);
} else {
vsm.setAccelerationEnabled(false);
}
}
}
}
}
Aggregations