aboutsummaryrefslogtreecommitdiff
path: root/src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java')
-rw-r--r--src/solaris/classes/sun/java2d/opengl/GLXVolatileSurfaceManager.java62
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();
+ }
+ }
}