Java 类sun.awt.Win32GraphicsConfig 实例源码

项目:OpenJSharp    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:jdk8u-jdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:openjdk-jdk10    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:openjdk9    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:jdk8u_jdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:lookaside_java-1.8.0-openjdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:infobip-open-jdk-8    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:jdk8u-dev-jdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:jdk7-jdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:openjdk-source-code-learn    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:OLD-OpenJDK8    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:openjdk-jdk7u-jdk    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:openjdk-icedtea7    文件:WComponentPeer.java   
/**
 * The following multibuffering-related methods delegate to our
 * associated GraphicsConfig (Win or WGL) to handle the appropriate
 * native windowing system specific actions.
 */

@Override
public void createBuffers(int numBuffers, BufferCapabilities caps)
    throws AWTException
{
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.assertOperationSupported((Component)target, numBuffers, caps);

    // Re-create the primary surface with the new number of back buffers
    try {
        replaceSurfaceData(numBuffers - 1, caps);
    } catch (InvalidPipeException e) {
        throw new AWTException(e.getMessage());
    }
}
项目:OpenJSharp    文件:D3DScreenUpdateManager.java   
/**
 * Determines if we can use a d3d surface for onscreen rendering for this
 * peer.
 * We only create onscreen d3d surfaces if the following conditions are met:
 *  - d3d is enabled on this device and onscreen emulation is enabled
 *  - window is big enough to bother (either dimension > MIN_WIN_SIZE)
 *  - this heavyweight doesn't have a BufferStrategy
 *  - if we are in full-screen mode then it must be the peer of the
 *    full-screen window (since there could be only one SwapChain in fs)
 *    and it must not have any heavyweight children
 *    (as Present() doesn't respect component clipping in fullscreen mode)
 *  - it's one of the classes likely to have custom rendering worth
 *    accelerating
 *
 * @returns true if we can use a d3d surface for this peer's onscreen
 *          rendering
 */
public static boolean canUseD3DOnScreen(final WComponentPeer peer,
                                        final Win32GraphicsConfig gc,
                                        final int bbNum)
{
    if (!(gc instanceof D3DGraphicsConfig)) {
        return false;
    }
    D3DGraphicsConfig d3dgc = (D3DGraphicsConfig)gc;
    D3DGraphicsDevice d3dgd = d3dgc.getD3DDevice();
    String peerName = peer.getClass().getName();
    Rectangle r = peer.getBounds();
    Component target = (Component)peer.getTarget();
    Window fsw = d3dgd.getFullScreenWindow();

    return
        WindowsFlags.isD3DOnScreenEnabled() &&
        d3dgd.isD3DEnabledOnDevice() &&
        peer.isAccelCapable() &&
        (r.width > MIN_WIN_SIZE || r.height > MIN_WIN_SIZE) &&
        bbNum == 0 &&
        (fsw == null || (fsw == target && !hasHWChildren(target))) &&
        (peerName.equals("sun.awt.windows.WCanvasPeer") ||
         peerName.equals("sun.awt.windows.WDialogPeer") ||
         peerName.equals("sun.awt.windows.WPanelPeer")  ||
         peerName.equals("sun.awt.windows.WWindowPeer") ||
         peerName.equals("sun.awt.windows.WFramePeer")  ||
         peerName.equals("sun.awt.windows.WEmbeddedFramePeer"));
}
项目:OpenJSharp    文件:D3DVolatileSurfaceManager.java   
/**
 * If the destination surface's peer can potentially handle accelerated
 * on-screen rendering then it is likely that the condition which resulted
 * in VI to Screen operation is temporary, so this method sets the
 * restore countdown in hope that the on-screen accelerated rendering will
 * resume. In the meantime the backup surface of the VISM will be used.
 *
 * The countdown is needed because otherwise we may never break out
 * of "do { vi.validate()..} while(vi.lost)" loop since validate() could
 * restore the source surface every time and it will get lost again on the
 * next copy attempt, and we would never get a chance to use the backup
 * surface. By using the countdown we allow the backup surface to be used
 * while the screen surface gets sorted out, or if it for some reason can
 * never be restored.
 *
 * If the destination surface's peer could never do accelerated onscreen
 * rendering then the acceleration for the SurfaceManager associated with
 * the source surface is disabled forever.
 */
static void handleVItoScreenOp(SurfaceData src, SurfaceData dst) {
    if (src instanceof D3DSurfaceData &&
        dst instanceof GDIWindowSurfaceData)
    {
        D3DSurfaceData d3dsd = (D3DSurfaceData)src;
        SurfaceManager mgr =
            SurfaceManager.getManager((Image)d3dsd.getDestination());
        if (mgr instanceof D3DVolatileSurfaceManager) {
            D3DVolatileSurfaceManager vsm = (D3DVolatileSurfaceManager)mgr;
            if (vsm != null) {
                d3dsd.setSurfaceLost(true);

                GDIWindowSurfaceData wsd = (GDIWindowSurfaceData)dst;
                WComponentPeer p = wsd.getPeer();
                if (D3DScreenUpdateManager.canUseD3DOnScreen(p,
                        (Win32GraphicsConfig)p.getGraphicsConfiguration(),
                        p.getBackBuffersNum()))
                {
                    // 10 is only chosen to be greater than the number of
                    // times a sane person would call validate() inside
                    // a validation loop, and to reduce thrashing between
                    // accelerated and backup surfaces
                    vsm.setRestoreCountdown(10);
                } else {
                    vsm.setAccelerationEnabled(false);
                }
            }
        }
    }
}
项目:OpenJSharp    文件:GDIWindowSurfaceData.java   
private GDIWindowSurfaceData(WComponentPeer peer, SurfaceType sType) {
    super(sType, peer.getDeviceColorModel());
    ColorModel cm = peer.getDeviceColorModel();
    this.peer = peer;
    int rMask = 0, gMask = 0, bMask = 0;
    int depth;
    switch (cm.getPixelSize()) {
    case 32:
    case 24:
        if (cm instanceof DirectColorModel) {
            depth = 32;
        } else {
            depth = 24;
        }
        break;
    default:
        depth = cm.getPixelSize();
    }
    if (cm instanceof DirectColorModel) {
        DirectColorModel dcm = (DirectColorModel)cm;
        rMask = dcm.getRedMask();
        gMask = dcm.getGreenMask();
        bMask = dcm.getBlueMask();
    }
    this.graphicsConfig =
        (Win32GraphicsConfig) peer.getGraphicsConfiguration();
    this.solidloops = graphicsConfig.getSolidLoops(sType);

    Win32GraphicsDevice gd =
        (Win32GraphicsDevice)graphicsConfig.getDevice();
    initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
    setBlitProxyKey(graphicsConfig.getProxyKey());
}
项目:OpenJSharp    文件:WComponentPeer.java   
public void createScreenSurface(boolean isResize)
{
    Win32GraphicsConfig gc = (Win32GraphicsConfig)getGraphicsConfiguration();
    ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();

    surfaceData = mgr.createScreenSurface(gc, this, numBackBuffers, isResize);
}
项目:OpenJSharp    文件:WComponentPeer.java   
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
    winGraphicsConfig = (Win32GraphicsConfig)gc;
    try {
        replaceSurfaceData();
    } catch (InvalidPipeException e) {
        // REMIND : what do we do if our surface creation failed?
    }
    return false;
}
项目:OpenJSharp    文件:WComponentPeer.java   
public ColorModel getDeviceColorModel() {
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    if (gc != null) {
        return gc.getDeviceColorModel();
    }
    else {
        return null;
    }
}
项目:OpenJSharp    文件:WComponentPeer.java   
@Override
public void flip(int x1, int y1, int x2, int y2,
                              BufferCapabilities.FlipContents flipAction)
{
    VolatileImage backBuffer = this.backBuffer;
    if (backBuffer == null) {
        throw new IllegalStateException("Buffers have not been created");
    }
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.flip(this, (Component)target, backBuffer, x1, y1, x2, y2, flipAction);
}
项目:jdk8u-jdk    文件:D3DScreenUpdateManager.java   
/**
 * Determines if we can use a d3d surface for onscreen rendering for this
 * peer.
 * We only create onscreen d3d surfaces if the following conditions are met:
 *  - d3d is enabled on this device and onscreen emulation is enabled
 *  - window is big enough to bother (either dimension > MIN_WIN_SIZE)
 *  - this heavyweight doesn't have a BufferStrategy
 *  - if we are in full-screen mode then it must be the peer of the
 *    full-screen window (since there could be only one SwapChain in fs)
 *    and it must not have any heavyweight children
 *    (as Present() doesn't respect component clipping in fullscreen mode)
 *  - it's one of the classes likely to have custom rendering worth
 *    accelerating
 *
 * @returns true if we can use a d3d surface for this peer's onscreen
 *          rendering
 */
public static boolean canUseD3DOnScreen(final WComponentPeer peer,
                                        final Win32GraphicsConfig gc,
                                        final int bbNum)
{
    if (!(gc instanceof D3DGraphicsConfig)) {
        return false;
    }
    D3DGraphicsConfig d3dgc = (D3DGraphicsConfig)gc;
    D3DGraphicsDevice d3dgd = d3dgc.getD3DDevice();
    String peerName = peer.getClass().getName();
    Rectangle r = peer.getBounds();
    Component target = (Component)peer.getTarget();
    Window fsw = d3dgd.getFullScreenWindow();

    return
        WindowsFlags.isD3DOnScreenEnabled() &&
        d3dgd.isD3DEnabledOnDevice() &&
        peer.isAccelCapable() &&
        (r.width > MIN_WIN_SIZE || r.height > MIN_WIN_SIZE) &&
        bbNum == 0 &&
        (fsw == null || (fsw == target && !hasHWChildren(target))) &&
        (peerName.equals("sun.awt.windows.WCanvasPeer") ||
         peerName.equals("sun.awt.windows.WDialogPeer") ||
         peerName.equals("sun.awt.windows.WPanelPeer")  ||
         peerName.equals("sun.awt.windows.WWindowPeer") ||
         peerName.equals("sun.awt.windows.WFramePeer")  ||
         peerName.equals("sun.awt.windows.WEmbeddedFramePeer"));
}
项目:jdk8u-jdk    文件:D3DVolatileSurfaceManager.java   
/**
 * If the destination surface's peer can potentially handle accelerated
 * on-screen rendering then it is likely that the condition which resulted
 * in VI to Screen operation is temporary, so this method sets the
 * restore countdown in hope that the on-screen accelerated rendering will
 * resume. In the meantime the backup surface of the VISM will be used.
 *
 * The countdown is needed because otherwise we may never break out
 * of "do { vi.validate()..} while(vi.lost)" loop since validate() could
 * restore the source surface every time and it will get lost again on the
 * next copy attempt, and we would never get a chance to use the backup
 * surface. By using the countdown we allow the backup surface to be used
 * while the screen surface gets sorted out, or if it for some reason can
 * never be restored.
 *
 * If the destination surface's peer could never do accelerated onscreen
 * rendering then the acceleration for the SurfaceManager associated with
 * the source surface is disabled forever.
 */
static void handleVItoScreenOp(SurfaceData src, SurfaceData dst) {
    if (src instanceof D3DSurfaceData &&
        dst instanceof GDIWindowSurfaceData)
    {
        D3DSurfaceData d3dsd = (D3DSurfaceData)src;
        SurfaceManager mgr =
            SurfaceManager.getManager((Image)d3dsd.getDestination());
        if (mgr instanceof D3DVolatileSurfaceManager) {
            D3DVolatileSurfaceManager vsm = (D3DVolatileSurfaceManager)mgr;
            if (vsm != null) {
                d3dsd.setSurfaceLost(true);

                GDIWindowSurfaceData wsd = (GDIWindowSurfaceData)dst;
                WComponentPeer p = wsd.getPeer();
                if (D3DScreenUpdateManager.canUseD3DOnScreen(p,
                        (Win32GraphicsConfig)p.getGraphicsConfiguration(),
                        p.getBackBuffersNum()))
                {
                    // 10 is only chosen to be greater than the number of
                    // times a sane person would call validate() inside
                    // a validation loop, and to reduce thrashing between
                    // accelerated and backup surfaces
                    vsm.setRestoreCountdown(10);
                } else {
                    vsm.setAccelerationEnabled(false);
                }
            }
        }
    }
}
项目:jdk8u-jdk    文件:GDIWindowSurfaceData.java   
private GDIWindowSurfaceData(WComponentPeer peer, SurfaceType sType) {
    super(sType, peer.getDeviceColorModel());
    ColorModel cm = peer.getDeviceColorModel();
    this.peer = peer;
    int rMask = 0, gMask = 0, bMask = 0;
    int depth;
    switch (cm.getPixelSize()) {
    case 32:
    case 24:
        if (cm instanceof DirectColorModel) {
            depth = 32;
        } else {
            depth = 24;
        }
        break;
    default:
        depth = cm.getPixelSize();
    }
    if (cm instanceof DirectColorModel) {
        DirectColorModel dcm = (DirectColorModel)cm;
        rMask = dcm.getRedMask();
        gMask = dcm.getGreenMask();
        bMask = dcm.getBlueMask();
    }
    this.graphicsConfig =
        (Win32GraphicsConfig) peer.getGraphicsConfiguration();
    this.solidloops = graphicsConfig.getSolidLoops(sType);

    Win32GraphicsDevice gd =
        (Win32GraphicsDevice)graphicsConfig.getDevice();
    initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
    setBlitProxyKey(graphicsConfig.getProxyKey());
}
项目:jdk8u-jdk    文件:WComponentPeer.java   
public void createScreenSurface(boolean isResize)
{
    Win32GraphicsConfig gc = (Win32GraphicsConfig)getGraphicsConfiguration();
    ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();

    surfaceData = mgr.createScreenSurface(gc, this, numBackBuffers, isResize);
}
项目:jdk8u-jdk    文件:WComponentPeer.java   
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
    winGraphicsConfig = (Win32GraphicsConfig)gc;
    try {
        replaceSurfaceData();
    } catch (InvalidPipeException e) {
        // REMIND : what do we do if our surface creation failed?
    }
    return false;
}
项目:jdk8u-jdk    文件:WComponentPeer.java   
public ColorModel getDeviceColorModel() {
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    if (gc != null) {
        return gc.getDeviceColorModel();
    }
    else {
        return null;
    }
}
项目:jdk8u-jdk    文件:WComponentPeer.java   
@Override
public void flip(int x1, int y1, int x2, int y2,
                              BufferCapabilities.FlipContents flipAction)
{
    VolatileImage backBuffer = this.backBuffer;
    if (backBuffer == null) {
        throw new IllegalStateException("Buffers have not been created");
    }
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.flip(this, (Component)target, backBuffer, x1, y1, x2, y2, flipAction);
}
项目:openjdk-jdk10    文件:D3DScreenUpdateManager.java   
/**
 * Determines if we can use a d3d surface for onscreen rendering for this
 * peer.
 * We only create onscreen d3d surfaces if the following conditions are met:
 *  - d3d is enabled on this device and onscreen emulation is enabled
 *  - window is big enough to bother (either dimension > MIN_WIN_SIZE)
 *  - this heavyweight doesn't have a BufferStrategy
 *  - if we are in full-screen mode then it must be the peer of the
 *    full-screen window (since there could be only one SwapChain in fs)
 *    and it must not have any heavyweight children
 *    (as Present() doesn't respect component clipping in fullscreen mode)
 *  - it's one of the classes likely to have custom rendering worth
 *    accelerating
 *
 * @return true if we can use a d3d surface for this peer's onscreen
 *         rendering
 */
public static boolean canUseD3DOnScreen(final WComponentPeer peer,
                                        final Win32GraphicsConfig gc,
                                        final int bbNum)
{
    if (!(gc instanceof D3DGraphicsConfig)) {
        return false;
    }
    D3DGraphicsConfig d3dgc = (D3DGraphicsConfig)gc;
    D3DGraphicsDevice d3dgd = d3dgc.getD3DDevice();
    String peerName = peer.getClass().getName();
    Rectangle r = peer.getBounds();
    Component target = (Component)peer.getTarget();
    Window fsw = d3dgd.getFullScreenWindow();

    return
        WindowsFlags.isD3DOnScreenEnabled() &&
        d3dgd.isD3DEnabledOnDevice() &&
        peer.isAccelCapable() &&
        (r.width > MIN_WIN_SIZE || r.height > MIN_WIN_SIZE) &&
        bbNum == 0 &&
        (fsw == null || (fsw == target && !hasHWChildren(target))) &&
        (peerName.equals("sun.awt.windows.WCanvasPeer") ||
         peerName.equals("sun.awt.windows.WDialogPeer") ||
         peerName.equals("sun.awt.windows.WPanelPeer")  ||
         peerName.equals("sun.awt.windows.WWindowPeer") ||
         peerName.equals("sun.awt.windows.WFramePeer")  ||
         peerName.equals("sun.awt.windows.WEmbeddedFramePeer"));
}
项目:openjdk-jdk10    文件:D3DVolatileSurfaceManager.java   
/**
 * If the destination surface's peer can potentially handle accelerated
 * on-screen rendering then it is likely that the condition which resulted
 * in VI to Screen operation is temporary, so this method sets the
 * restore countdown in hope that the on-screen accelerated rendering will
 * resume. In the meantime the backup surface of the VISM will be used.
 *
 * The countdown is needed because otherwise we may never break out
 * of "do { vi.validate()..} while(vi.lost)" loop since validate() could
 * restore the source surface every time and it will get lost again on the
 * next copy attempt, and we would never get a chance to use the backup
 * surface. By using the countdown we allow the backup surface to be used
 * while the screen surface gets sorted out, or if it for some reason can
 * never be restored.
 *
 * If the destination surface's peer could never do accelerated onscreen
 * rendering then the acceleration for the SurfaceManager associated with
 * the source surface is disabled forever.
 */
static void handleVItoScreenOp(SurfaceData src, SurfaceData dst) {
    if (src instanceof D3DSurfaceData &&
        dst instanceof GDIWindowSurfaceData)
    {
        D3DSurfaceData d3dsd = (D3DSurfaceData)src;
        SurfaceManager mgr =
            SurfaceManager.getManager((Image)d3dsd.getDestination());
        if (mgr instanceof D3DVolatileSurfaceManager) {
            D3DVolatileSurfaceManager vsm = (D3DVolatileSurfaceManager)mgr;
            if (vsm != null) {
                d3dsd.setSurfaceLost(true);

                GDIWindowSurfaceData wsd = (GDIWindowSurfaceData)dst;
                WComponentPeer p = wsd.getPeer();
                if (D3DScreenUpdateManager.canUseD3DOnScreen(p,
                        (Win32GraphicsConfig)p.getGraphicsConfiguration(),
                        p.getBackBuffersNum()))
                {
                    // 10 is only chosen to be greater than the number of
                    // times a sane person would call validate() inside
                    // a validation loop, and to reduce thrashing between
                    // accelerated and backup surfaces
                    vsm.setRestoreCountdown(10);
                } else {
                    vsm.setAccelerationEnabled(false);
                }
            }
        }
    }
}
项目:openjdk-jdk10    文件:GDIWindowSurfaceData.java   
private GDIWindowSurfaceData(WComponentPeer peer, SurfaceType sType) {
    super(sType, peer.getDeviceColorModel());
    ColorModel cm = peer.getDeviceColorModel();
    this.peer = peer;
    int rMask = 0, gMask = 0, bMask = 0;
    int depth;
    switch (cm.getPixelSize()) {
    case 32:
    case 24:
        if (cm instanceof DirectColorModel) {
            depth = 32;
        } else {
            depth = 24;
        }
        break;
    default:
        depth = cm.getPixelSize();
    }
    if (cm instanceof DirectColorModel) {
        DirectColorModel dcm = (DirectColorModel)cm;
        rMask = dcm.getRedMask();
        gMask = dcm.getGreenMask();
        bMask = dcm.getBlueMask();
    }
    this.graphicsConfig =
        (Win32GraphicsConfig) peer.getGraphicsConfiguration();
    this.solidloops = graphicsConfig.getSolidLoops(sType);
    Win32GraphicsDevice gd = graphicsConfig.getDevice();
    scaleX = gd.getDefaultScaleX();
    scaleY = gd.getDefaultScaleY();
    initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
    setBlitProxyKey(graphicsConfig.getProxyKey());
}
项目:openjdk-jdk10    文件:WComponentPeer.java   
public void createScreenSurface(boolean isResize)
{
    Win32GraphicsConfig gc = (Win32GraphicsConfig)getGraphicsConfiguration();
    ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();

    surfaceData = mgr.createScreenSurface(gc, this, numBackBuffers, isResize);
}
项目:openjdk-jdk10    文件:WComponentPeer.java   
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
    winGraphicsConfig = (Win32GraphicsConfig)gc;
    try {
        replaceSurfaceData();
    } catch (InvalidPipeException e) {
        // REMIND : what do we do if our surface creation failed?
    }
    return false;
}
项目:openjdk-jdk10    文件:WComponentPeer.java   
public ColorModel getDeviceColorModel() {
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    if (gc != null) {
        return gc.getDeviceColorModel();
    }
    else {
        return null;
    }
}
项目:openjdk-jdk10    文件:WComponentPeer.java   
@Override
public void flip(int x1, int y1, int x2, int y2,
                              BufferCapabilities.FlipContents flipAction)
{
    VolatileImage backBuffer = this.backBuffer;
    if (backBuffer == null) {
        throw new IllegalStateException("Buffers have not been created");
    }
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    gc.flip(this, (Component)target, backBuffer, x1, y1, x2, y2, flipAction);
}
项目:openjdk9    文件:D3DScreenUpdateManager.java   
/**
 * Determines if we can use a d3d surface for onscreen rendering for this
 * peer.
 * We only create onscreen d3d surfaces if the following conditions are met:
 *  - d3d is enabled on this device and onscreen emulation is enabled
 *  - window is big enough to bother (either dimension > MIN_WIN_SIZE)
 *  - this heavyweight doesn't have a BufferStrategy
 *  - if we are in full-screen mode then it must be the peer of the
 *    full-screen window (since there could be only one SwapChain in fs)
 *    and it must not have any heavyweight children
 *    (as Present() doesn't respect component clipping in fullscreen mode)
 *  - it's one of the classes likely to have custom rendering worth
 *    accelerating
 *
 * @return true if we can use a d3d surface for this peer's onscreen
 *         rendering
 */
public static boolean canUseD3DOnScreen(final WComponentPeer peer,
                                        final Win32GraphicsConfig gc,
                                        final int bbNum)
{
    if (!(gc instanceof D3DGraphicsConfig)) {
        return false;
    }
    D3DGraphicsConfig d3dgc = (D3DGraphicsConfig)gc;
    D3DGraphicsDevice d3dgd = d3dgc.getD3DDevice();
    String peerName = peer.getClass().getName();
    Rectangle r = peer.getBounds();
    Component target = (Component)peer.getTarget();
    Window fsw = d3dgd.getFullScreenWindow();

    return
        WindowsFlags.isD3DOnScreenEnabled() &&
        d3dgd.isD3DEnabledOnDevice() &&
        peer.isAccelCapable() &&
        (r.width > MIN_WIN_SIZE || r.height > MIN_WIN_SIZE) &&
        bbNum == 0 &&
        (fsw == null || (fsw == target && !hasHWChildren(target))) &&
        (peerName.equals("sun.awt.windows.WCanvasPeer") ||
         peerName.equals("sun.awt.windows.WDialogPeer") ||
         peerName.equals("sun.awt.windows.WPanelPeer")  ||
         peerName.equals("sun.awt.windows.WWindowPeer") ||
         peerName.equals("sun.awt.windows.WFramePeer")  ||
         peerName.equals("sun.awt.windows.WEmbeddedFramePeer"));
}
项目:openjdk9    文件:D3DVolatileSurfaceManager.java   
/**
 * If the destination surface's peer can potentially handle accelerated
 * on-screen rendering then it is likely that the condition which resulted
 * in VI to Screen operation is temporary, so this method sets the
 * restore countdown in hope that the on-screen accelerated rendering will
 * resume. In the meantime the backup surface of the VISM will be used.
 *
 * The countdown is needed because otherwise we may never break out
 * of "do { vi.validate()..} while(vi.lost)" loop since validate() could
 * restore the source surface every time and it will get lost again on the
 * next copy attempt, and we would never get a chance to use the backup
 * surface. By using the countdown we allow the backup surface to be used
 * while the screen surface gets sorted out, or if it for some reason can
 * never be restored.
 *
 * If the destination surface's peer could never do accelerated onscreen
 * rendering then the acceleration for the SurfaceManager associated with
 * the source surface is disabled forever.
 */
static void handleVItoScreenOp(SurfaceData src, SurfaceData dst) {
    if (src instanceof D3DSurfaceData &&
        dst instanceof GDIWindowSurfaceData)
    {
        D3DSurfaceData d3dsd = (D3DSurfaceData)src;
        SurfaceManager mgr =
            SurfaceManager.getManager((Image)d3dsd.getDestination());
        if (mgr instanceof D3DVolatileSurfaceManager) {
            D3DVolatileSurfaceManager vsm = (D3DVolatileSurfaceManager)mgr;
            if (vsm != null) {
                d3dsd.setSurfaceLost(true);

                GDIWindowSurfaceData wsd = (GDIWindowSurfaceData)dst;
                WComponentPeer p = wsd.getPeer();
                if (D3DScreenUpdateManager.canUseD3DOnScreen(p,
                        (Win32GraphicsConfig)p.getGraphicsConfiguration(),
                        p.getBackBuffersNum()))
                {
                    // 10 is only chosen to be greater than the number of
                    // times a sane person would call validate() inside
                    // a validation loop, and to reduce thrashing between
                    // accelerated and backup surfaces
                    vsm.setRestoreCountdown(10);
                } else {
                    vsm.setAccelerationEnabled(false);
                }
            }
        }
    }
}
项目:openjdk9    文件:GDIWindowSurfaceData.java   
private GDIWindowSurfaceData(WComponentPeer peer, SurfaceType sType) {
    super(sType, peer.getDeviceColorModel());
    ColorModel cm = peer.getDeviceColorModel();
    this.peer = peer;
    int rMask = 0, gMask = 0, bMask = 0;
    int depth;
    switch (cm.getPixelSize()) {
    case 32:
    case 24:
        if (cm instanceof DirectColorModel) {
            depth = 32;
        } else {
            depth = 24;
        }
        break;
    default:
        depth = cm.getPixelSize();
    }
    if (cm instanceof DirectColorModel) {
        DirectColorModel dcm = (DirectColorModel)cm;
        rMask = dcm.getRedMask();
        gMask = dcm.getGreenMask();
        bMask = dcm.getBlueMask();
    }
    this.graphicsConfig =
        (Win32GraphicsConfig) peer.getGraphicsConfiguration();
    this.solidloops = graphicsConfig.getSolidLoops(sType);
    Win32GraphicsDevice gd = graphicsConfig.getDevice();
    scaleX = gd.getDefaultScaleX();
    scaleY = gd.getDefaultScaleY();
    initOps(peer, depth, rMask, gMask, bMask, gd.getScreen());
    setBlitProxyKey(graphicsConfig.getProxyKey());
}
项目:openjdk9    文件:WComponentPeer.java   
public void createScreenSurface(boolean isResize)
{
    Win32GraphicsConfig gc = (Win32GraphicsConfig)getGraphicsConfiguration();
    ScreenUpdateManager mgr = ScreenUpdateManager.getInstance();

    surfaceData = mgr.createScreenSurface(gc, this, numBackBuffers, isResize);
}
项目:openjdk9    文件:WComponentPeer.java   
@Override
public boolean updateGraphicsData(GraphicsConfiguration gc) {
    winGraphicsConfig = (Win32GraphicsConfig)gc;
    try {
        replaceSurfaceData();
    } catch (InvalidPipeException e) {
        // REMIND : what do we do if our surface creation failed?
    }
    return false;
}
项目:openjdk9    文件:WComponentPeer.java   
public ColorModel getDeviceColorModel() {
    Win32GraphicsConfig gc =
        (Win32GraphicsConfig)getGraphicsConfiguration();
    if (gc != null) {
        return gc.getDeviceColorModel();
    }
    else {
        return null;
    }
}