Search in sources :

Example 1 with BufferCapabilities

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);
}
Also used : JFrame(javax.swing.JFrame) Frame(java.awt.Frame) BufferCapabilities(java.awt.BufferCapabilities) ImageCapabilities(java.awt.ImageCapabilities) AWTException(java.awt.AWTException)

Example 2 with BufferCapabilities

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;
}
Also used : ComponentPeer(java.awt.peer.ComponentPeer) ExtendedBufferCapabilities(sun.java2d.pipe.hw.ExtendedBufferCapabilities) SurfaceData(sun.java2d.SurfaceData) ExtendedBufferCapabilities(sun.java2d.pipe.hw.ExtendedBufferCapabilities) BufferCapabilities(java.awt.BufferCapabilities) ColorModel(java.awt.image.ColorModel) BackBufferCapsProvider(sun.java2d.BackBufferCapsProvider) Component(java.awt.Component)

Example 3 with BufferCapabilities

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);
}
Also used : BufferCapabilities(java.awt.BufferCapabilities) AWTException(java.awt.AWTException)

Example 4 with BufferCapabilities

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) {
        }
}
Also used : BufferCapabilities(java.awt.BufferCapabilities) Constructor(java.lang.reflect.Constructor) ImageCapabilities(java.awt.ImageCapabilities) IOException(java.io.IOException)

Example 5 with BufferCapabilities

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) {
        }
}
Also used : BufferCapabilities(java.awt.BufferCapabilities) Constructor(java.lang.reflect.Constructor) ImageCapabilities(java.awt.ImageCapabilities)

Aggregations

BufferCapabilities (java.awt.BufferCapabilities)9 ImageCapabilities (java.awt.ImageCapabilities)4 ExtendedBufferCapabilities (sun.java2d.pipe.hw.ExtendedBufferCapabilities)4 Component (java.awt.Component)3 ColorModel (java.awt.image.ColorModel)3 Constructor (java.lang.reflect.Constructor)3 SurfaceData (sun.java2d.SurfaceData)3 AWTException (java.awt.AWTException)2 IOException (java.io.IOException)2 BackBufferCapsProvider (sun.java2d.BackBufferCapsProvider)2 FlipContents (java.awt.BufferCapabilities.FlipContents)1 Frame (java.awt.Frame)1 Rectangle (java.awt.Rectangle)1 ComponentPeer (java.awt.peer.ComponentPeer)1 JFrame (javax.swing.JFrame)1 X11ComponentPeer (sun.awt.X11ComponentPeer)1 WComponentPeer (sun.awt.windows.WComponentPeer)1 VSyncType (sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType)1