/** * 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); }
/** * Creates one or more complex, flipping buffers with the given * capabilities. * @param numBuffers number of buffers to create; must be greater than * one * @param caps the capabilities of the buffers. * <code>BufferCapabilities.isPageFlipping</code> must be * <code>true</code>. * @exception AWTException if the capabilities supplied could not be * supported or met * @exception IllegalStateException if the component has no peer * @exception IllegalArgumentException if numBuffers is less than two, * or if <code>BufferCapabilities.isPageFlipping</code> is not * <code>true</code>. * @see java.awt.BufferCapabilities#isPageFlipping() */ protected void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException { if (numBuffers < 2) { throw new IllegalArgumentException( "Number of buffers cannot be less than two"); } else if (peer == null) { throw new IllegalStateException( "Component must have a valid peer"); } else if (caps == null || !caps.isPageFlipping()) { throw new IllegalArgumentException( "Page flipping capabilities must be specified"); } // save the current bounds width = getWidth(); height = getHeight(); if (drawBuffer != null) { // dispose the existing backbuffers drawBuffer = null; drawVBuffer = null; destroyBuffers(); // ... then recreate the backbuffers } if (caps instanceof ExtendedBufferCapabilities) { ExtendedBufferCapabilities ebc = (ExtendedBufferCapabilities)caps; if (ebc.getVSync() == VSYNC_ON) { // if this buffer strategy is not allowed to be v-synced, // change the caps that we pass to the peer but keep on // trying to create v-synced buffers; // do not throw IAE here in case it is disallowed, see // ExtendedBufferCapabilities for more info if (!VSyncedBSManager.vsyncAllowed(this)) { caps = ebc.derive(VSYNC_DEFAULT); } } } peer.createBuffers(numBuffers, caps); updateInternalBuffers(); }
/** * 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(); // 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) { // 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; }
/** * 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(); // 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 = 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; }
/** * 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(); // 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; } catch (OutOfMemoryError er) { sData = null; } return sData; }
/** * Creates one or more complex, flipping buffers with the given * capabilities. * @param numBuffers number of buffers to create; must be greater than * one * @param caps the capabilities of the buffers. * {@code BufferCapabilities.isPageFlipping} must be * {@code true}. * @exception AWTException if the capabilities supplied could not be * supported or met * @exception IllegalStateException if the component has no peer * @exception IllegalArgumentException if numBuffers is less than two, * or if {@code BufferCapabilities.isPageFlipping} is not * {@code true}. * @see java.awt.BufferCapabilities#isPageFlipping() */ protected void createBuffers(int numBuffers, BufferCapabilities caps) throws AWTException { if (numBuffers < 2) { throw new IllegalArgumentException( "Number of buffers cannot be less than two"); } else if (peer == null) { throw new IllegalStateException( "Component must have a valid peer"); } else if (caps == null || !caps.isPageFlipping()) { throw new IllegalArgumentException( "Page flipping capabilities must be specified"); } // save the current bounds width = getWidth(); height = getHeight(); if (drawBuffer != null) { // dispose the existing backbuffers drawBuffer = null; drawVBuffer = null; destroyBuffers(); // ... then recreate the backbuffers } if (caps instanceof ExtendedBufferCapabilities) { ExtendedBufferCapabilities ebc = (ExtendedBufferCapabilities)caps; if (ebc.getVSync() == VSYNC_ON) { // if this buffer strategy is not allowed to be v-synced, // change the caps that we pass to the peer but keep on // trying to create v-synced buffers; // do not throw IAE here in case it is disallowed, see // ExtendedBufferCapabilities for more info if (!VSyncedBSManager.vsyncAllowed(this)) { caps = ebc.derive(VSYNC_DEFAULT); } } } peer.createBuffers(numBuffers, caps); updateInternalBuffers(); }
/** * Create a FBO-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(); final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); X11ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : 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(); // if acceleration type is forced (type != UNDEFINED) then // use the forced type, otherwise choose FBOBJECT if (type == OGLSurfaceData.UNDEFINED) { type = OGLSurfaceData.FBOBJECT; } 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; }
/** * Create a FBO-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 ComponentAccessor acc = AWTAccessor.getComponentAccessor(); final ComponentPeer peer = (comp != null) ? acc.getPeer(comp) : 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(); // if acceleration type is forced (type != UNDEFINED) then // use the forced type, otherwise choose FBOBJECT if (type == OGLSurfaceData.UNDEFINED) { type = OGLSurfaceData.FBOBJECT; } 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; }
/** * Create a FBO-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(); final ComponentAccessor acc = AWTAccessor.getComponentAccessor(); WComponentPeer peer = (comp != null) ? acc.getPeer(comp) : 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(); // if acceleration type is forced (type != UNDEFINED) then // use the forced type, otherwise choose FBOBJECT if (type == OGLSurfaceData.UNDEFINED) { type = OGLSurfaceData.FBOBJECT; } 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; }