Search in sources :

Example 6 with BufferCapabilities

use of java.awt.BufferCapabilities in project javatari by ppeccin.

the class MonitorPanel 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 7 with BufferCapabilities

use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.

the class GLXVolatileSurfaceManager 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;
    Component comp = vImg.getComponent();
    X11ComponentPeer peer = (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, FLIP_BACKBUFFER);
        } else {
            GLXGraphicsConfig gc = (GLXGraphicsConfig) 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) {
                sData = GLXSurfaceData.createData(peer, vImg, type);
            } else {
                sData = GLXSurfaceData.createData(gc, vImg.getWidth(), vImg.getHeight(), cm, vImg, type);
            }
        }
    } catch (NullPointerException ex) {
        sData = null;
    } catch (OutOfMemoryError er) {
        sData = null;
    }
    return sData;
}
Also used : X11ComponentPeer(sun.awt.X11ComponentPeer) 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 8 with BufferCapabilities

use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.

the class WGLVolatileSurfaceManager 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;
    Component comp = vImg.getComponent();
    WComponentPeer peer = (comp != null) ? (WComponentPeer) comp.getPeer() : null;
    try {
        boolean createVSynced = false;
        boolean forceback = false;
        if (context instanceof Boolean) {
            forceback = ((Boolean) context).booleanValue();
            if (forceback) {
                BufferCapabilities caps = peer.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 = WGLSurfaceData.createData(peer, vImg, FLIP_BACKBUFFER);
        } else {
            WGLGraphicsConfig gc = (WGLGraphicsConfig) 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) {
                sData = WGLSurfaceData.createData(peer, vImg, type);
            } else {
                sData = WGLSurfaceData.createData(gc, vImg.getWidth(), vImg.getHeight(), cm, vImg, type);
            }
        }
    } catch (NullPointerException ex) {
        sData = null;
    } catch (OutOfMemoryError er) {
        sData = null;
    }
    return sData;
}
Also used : 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) WComponentPeer(sun.awt.windows.WComponentPeer) Component(java.awt.Component)

Example 9 with BufferCapabilities

use of java.awt.BufferCapabilities in project jdk8u_jdk by JetBrains.

the class D3DSurfaceData method createData.

/**
     * Creates a SurfaceData object representing the back buffer of a
     * double-buffered on-screen Window.
     */
public static D3DSurfaceData createData(WComponentPeer peer, Image image) {
    D3DGraphicsConfig gc = getGC(peer);
    if (gc == null || !peer.isAccelCapable()) {
        return null;
    }
    BufferCapabilities caps = peer.getBackBufferCaps();
    VSyncType vSyncType = VSYNC_DEFAULT;
    if (caps instanceof ExtendedBufferCapabilities) {
        vSyncType = ((ExtendedBufferCapabilities) caps).getVSync();
    }
    Rectangle r = peer.getBounds();
    BufferCapabilities.FlipContents flip = caps.getFlipContents();
    int swapEffect;
    if (flip == FlipContents.COPIED) {
        swapEffect = SWAP_COPY;
    } else if (flip == FlipContents.PRIOR) {
        swapEffect = SWAP_FLIP;
    } else {
        // flip == FlipContents.UNDEFINED || .BACKGROUND
        swapEffect = SWAP_DISCARD;
    }
    return new D3DSurfaceData(peer, gc, r.width, r.height, image, peer.getColorModel(), peer.getBackBuffersNum(), swapEffect, vSyncType, FLIP_BACKBUFFER);
}
Also used : ExtendedBufferCapabilities(sun.java2d.pipe.hw.ExtendedBufferCapabilities) ExtendedBufferCapabilities(sun.java2d.pipe.hw.ExtendedBufferCapabilities) BufferCapabilities(java.awt.BufferCapabilities) Rectangle(java.awt.Rectangle) VSyncType(sun.java2d.pipe.hw.ExtendedBufferCapabilities.VSyncType) FlipContents(java.awt.BufferCapabilities.FlipContents)

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