diff options
Diffstat (limited to 'src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java')
-rw-r--r-- | src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java | 62 |
1 files changed, 50 insertions, 12 deletions
diff --git a/src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java b/src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java index bf8f63e62..38748055c 100644 --- a/src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java +++ b/src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2005 Sun Microsystems, Inc. All Rights Reserved. + * Copyright 2003-2008 Sun Microsystems, Inc. All Rights Reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it @@ -25,16 +25,21 @@ package sun.java2d.opengl; +import java.awt.BufferCapabilities; +import static java.awt.BufferCapabilities.FlipContents.*; import java.awt.Component; import java.awt.GraphicsConfiguration; -import java.awt.ImageCapabilities; -import java.awt.Rectangle; import java.awt.Transparency; import java.awt.image.ColorModel; import sun.awt.X11ComponentPeer; import sun.awt.image.SunVolatileImage; import sun.awt.image.VolatileSurfaceManager; +import sun.java2d.BackBufferCapsProvider; import sun.java2d.SurfaceData; +import static sun.java2d.opengl.OGLContext.OGLContextCaps.*; +import sun.java2d.pipe.hw.ExtendedBufferCapabilities; +import static sun.java2d.pipe.hw.AccelSurface.*; +import static sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.*; public class GLXVolatileSurfaceManager extends VolatileSurfaceManager { @@ -56,8 +61,8 @@ public class GLXVolatileSurfaceManager extends VolatileSurfaceManager { accelerationEnabled = (transparency == Transparency.OPAQUE) || ((transparency == Transparency.TRANSLUCENT) && - (gc.isCapPresent(OGLContext.CAPS_EXT_FBOBJECT) || - gc.isCapPresent(OGLContext.CAPS_STORED_ALPHA))); + (gc.isCapPresent(CAPS_EXT_FBOBJECT) || + gc.isCapPresent(CAPS_STORED_ALPHA))); } protected boolean isAccelerationEnabled() { @@ -75,24 +80,49 @@ public class GLXVolatileSurfaceManager extends VolatileSurfaceManager { (comp != null) ? (X11ComponentPeer)comp.getPeer() : null; try { + boolean createVSynced = false; boolean forceback = false; if (context instanceof Boolean) { forceback = ((Boolean)context).booleanValue(); + if (forceback && peer instanceof BackBufferCapsProvider) { + BackBufferCapsProvider provider = + (BackBufferCapsProvider)peer; + BufferCapabilities caps = provider.getBackBufferCaps(); + if (caps instanceof ExtendedBufferCapabilities) { + ExtendedBufferCapabilities ebc = + (ExtendedBufferCapabilities)caps; + if (ebc.getVSync() == VSYNC_ON && + ebc.getFlipContents() == COPIED) + { + createVSynced = true; + forceback = false; + } + } + } } if (forceback) { // peer must be non-null in this case - sData = GLXSurfaceData.createData(peer, vImg); + sData = GLXSurfaceData.createData(peer, vImg, FLIP_BACKBUFFER); } else { GLXGraphicsConfig gc = (GLXGraphicsConfig)vImg.getGraphicsConfig(); ColorModel cm = gc.getColorModel(vImg.getTransparency()); - int type = gc.isCapPresent(OGLContext.CAPS_EXT_FBOBJECT) ? - OGLSurfaceData.FBOBJECT : OGLSurfaceData.PBUFFER; - sData = GLXSurfaceData.createData(gc, - vImg.getWidth(), - vImg.getHeight(), - cm, vImg, type); + int type = vImg.getForcedAccelSurfaceType(); + // if acceleration type is forced (type != UNDEFINED) then + // use the forced type, otherwise choose one based on caps + if (type == OGLSurfaceData.UNDEFINED) { + type = gc.isCapPresent(CAPS_EXT_FBOBJECT) ? + OGLSurfaceData.FBOBJECT : OGLSurfaceData.PBUFFER; + } + if (createVSynced) { + sData = GLXSurfaceData.createData(peer, vImg, type); + } else { + sData = GLXSurfaceData.createData(gc, + vImg.getWidth(), + vImg.getHeight(), + cm, vImg, type); + } } } catch (NullPointerException ex) { sData = null; @@ -103,7 +133,15 @@ public class GLXVolatileSurfaceManager extends VolatileSurfaceManager { return sData; } + @Override protected boolean isConfigValid(GraphicsConfiguration gc) { return ((gc == null) || (gc == vImg.getGraphicsConfig())); } + + @Override + public void initContents() { + if (vImg.getForcedAccelSurfaceType() != OGLSurfaceData.TEXTURE) { + super.initContents(); + } + } } |