use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.
the class VSyncedBufferStrategyTest method createBS.
private void createBS(boolean requestVSync) {
if (bs != null && requestVSync == currentBSVSynced) {
return;
}
BufferCapabilities bc = defaultBC;
if (requestVSync) {
bc = new sun.java2d.pipe.hw.ExtendedBufferCapabilities(new ImageCapabilities(true), new ImageCapabilities(true), FlipContents.COPIED, sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType.VSYNC_ON);
}
try {
createBufferStrategy(2, bc);
} catch (AWTException e) {
System.err.println("Warning: cap is not supported: " + bc);
e.printStackTrace();
createBufferStrategy(2);
}
currentBSVSynced = requestVSync;
bs = getBufferStrategy();
String s = getParent() instanceof Frame ? ((Frame) getParent()).getTitle() : "parent";
System.out.println("Created BS for \"" + s + "\" frame, bs=" + bs);
}
use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.
the class CGLVolatileSurfaceManager method initAcceleratedSurface.
/**
* Create a pbuffer-based SurfaceData object (or init the backbuffer
* of an existing window if this is a double buffered GraphicsConfig)
*/
protected SurfaceData initAcceleratedSurface() {
SurfaceData sData = null;
Component comp = vImg.getComponent();
final ComponentPeer peer = (comp != null) ? 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
// TODO: modify parameter to delegate
// sData = CGLSurfaceData.createData(peer, vImg, FLIP_BACKBUFFER);
} else {
CGLGraphicsConfig gc = (CGLGraphicsConfig) vImg.getGraphicsConfig();
ColorModel cm = gc.getColorModel(vImg.getTransparency());
int type = vImg.getForcedAccelSurfaceType();
// 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) {
// TODO: modify parameter to delegate
// sData = CGLSurfaceData.createData(peer, vImg, type);
} else {
sData = CGLSurfaceData.createData(gc, vImg.getWidth(), vImg.getHeight(), cm, vImg, type);
}
}
} catch (NullPointerException ex) {
sData = null;
} catch (OutOfMemoryError er) {
sData = null;
}
return sData;
}
use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.
the class X11GraphicsConfig method createBackBuffer.
/**
* Attempts to create an XDBE-based backbuffer for the given peer. If
* the requested configuration is not natively supported, an AWTException
* is thrown. Otherwise, if the backbuffer creation is successful, a
* handle to the native backbuffer is returned.
*/
public long createBackBuffer(X11ComponentPeer peer, int numBuffers, BufferCapabilities caps) throws AWTException {
if (!X11GraphicsDevice.isDBESupported()) {
throw new AWTException("Page flipping is not supported");
}
if (numBuffers > 2) {
throw new AWTException("Only double or single buffering is supported");
}
BufferCapabilities configCaps = getBufferCapabilities();
if (!configCaps.isPageFlipping()) {
throw new AWTException("Page flipping is not supported");
}
long window = peer.getContentWindow();
int swapAction = getSwapAction(caps.getFlipContents());
return createBackBuffer(window, swapAction);
}
use of java.awt.BufferCapabilities in project javatari by ppeccin.
the class DesktopScreenWindow method canvasSetRenderingMode.
public void canvasSetRenderingMode() {
if (Monitor.MULTI_BUFFERING <= 0)
return;
BufferCapabilities desiredCaps = new BufferCapabilities(new ImageCapabilities(true), new ImageCapabilities(true), Monitor.PAGE_FLIPPING ? FlipContents.BACKGROUND : null);
Class<?> extBufCapClass = null;
try {
// Creates ExtendedBufferCapabilities via reflection to avoid problems with AccessControl
extBufCapClass = Class.forName("sun.java2d.pipe.hw.ExtendedBufferCapabilities");
} catch (Exception ex) {
}
// First try with vSync option
if (extBufCapClass != null && Monitor.BUFFER_VSYNC != -1)
try {
// Creates ExtendedBufferCapabilities via reflection to avoid problems with AccessControl
Class<?> vSyncTypeClass = Class.forName("sun.java2d.pipe.hw.ExtendedBufferCapabilities$VSyncType");
Constructor<?> extBufCapConstructor = extBufCapClass.getConstructor(new Class[] { BufferCapabilities.class, vSyncTypeClass });
Object vSyncType = vSyncTypeClass.getField(Monitor.BUFFER_VSYNC == 1 ? "VSYNC_ON" : "VSYNC_OFF").get(null);
BufferCapabilities extBuffCaps = (BufferCapabilities) extBufCapConstructor.newInstance(new Object[] { desiredCaps, vSyncType });
// Try creating the BufferStrategy
canvas.createBufferStrategy(Monitor.MULTI_BUFFERING, extBuffCaps);
} catch (Exception ex) {
}
// Then try with remaining options (Flipping, etc)
if (canvas.getBufferStrategy() == null)
try {
canvas.createBufferStrategy(Monitor.MULTI_BUFFERING, desiredCaps);
} catch (Exception ex) {
}
// Last, use the default
if (canvas.getBufferStrategy() == null) {
System.out.println("Could not create desired BufferStrategy. Switching to default...");
canvas.createBufferStrategy(Monitor.MULTI_BUFFERING);
}
bufferStrategy = canvas.getBufferStrategy();
// Show info about the granted BufferStrategy
if (bufferStrategy != null)
System.out.println("Buffer Strategy: " + bufferStrategy.getClass().getSimpleName());
BufferCapabilities grantedCaps = bufferStrategy.getCapabilities();
System.out.println("Backbuffer Accelerated: " + grantedCaps.getBackBufferCapabilities().isAccelerated());
System.out.println("PageFlipping Active: " + grantedCaps.isPageFlipping() + ", " + grantedCaps.getFlipContents());
if (extBufCapClass != null && grantedCaps.getClass().equals(extBufCapClass))
try {
System.out.println("VSynch active: " + extBufCapClass.getMethod("getVSync", (Class<?>[]) null).invoke(grantedCaps));
} catch (Exception ex) {
}
}
use of java.awt.BufferCapabilities in project javatari by ppeccin.
the class DesktopScreenFullWindow method canvasSetRenderingMode.
public void canvasSetRenderingMode() {
if (Monitor.MULTI_BUFFERING <= 0)
return;
BufferCapabilities desiredCaps = new BufferCapabilities(new ImageCapabilities(true), new ImageCapabilities(true), Monitor.PAGE_FLIPPING ? FlipContents.BACKGROUND : null);
Class<?> extBufCapClass = null;
try {
// Creates ExtendedBufferCapabilities via reflection to avoid problems with AccessControl
extBufCapClass = Class.forName("sun.java2d.pipe.hw.ExtendedBufferCapabilities");
} catch (Exception ex) {
}
// First try with vSync option
if (extBufCapClass != null && Monitor.BUFFER_VSYNC != -1)
try {
// Creates ExtendedBufferCapabilities via reflection to avoid problems with AccessControl
Class<?> vSyncTypeClass = Class.forName("sun.java2d.pipe.hw.ExtendedBufferCapabilities$VSyncType");
Constructor<?> extBufCapConstructor = extBufCapClass.getConstructor(new Class[] { BufferCapabilities.class, vSyncTypeClass });
Object vSyncType = vSyncTypeClass.getField(Monitor.BUFFER_VSYNC == 1 ? "VSYNC_ON" : "VSYNC_OFF").get(null);
BufferCapabilities extBuffCaps = (BufferCapabilities) extBufCapConstructor.newInstance(new Object[] { desiredCaps, vSyncType });
// Try creating the BufferStrategy
this.createBufferStrategy(Monitor.MULTI_BUFFERING, extBuffCaps);
} catch (Exception ex) {
}
// Then try with remaining options (Flipping, etc)
if (this.getBufferStrategy() == null)
try {
this.createBufferStrategy(Monitor.MULTI_BUFFERING, desiredCaps);
} catch (Exception ex) {
}
// Last, use the default
if (this.getBufferStrategy() == null) {
System.out.println("Could not create desired BufferStrategy. Switching to default...");
this.createBufferStrategy(Monitor.MULTI_BUFFERING);
}
bufferStrategy = this.getBufferStrategy();
// Show info about the granted BufferStrategy
if (bufferStrategy != null)
System.out.println("Buffer Strategy: " + bufferStrategy.getClass().getSimpleName());
BufferCapabilities grantedCaps = bufferStrategy.getCapabilities();
System.out.println("Backbuffer Accelerated: " + grantedCaps.getBackBufferCapabilities().isAccelerated());
System.out.println("PageFlipping Active: " + grantedCaps.isPageFlipping() + ", " + grantedCaps.getFlipContents());
if (extBufCapClass != null && grantedCaps.getClass().equals(extBufCapClass))
try {
System.out.println("VSynch active: " + extBufCapClass.getMethod("getVSync", (Class<?>[]) null).invoke(grantedCaps));
} catch (Exception ex) {
}
}
Aggregations