Showing the changes to java/pkg/sun/java2d/pipe/hw (16 of 18352 files). Show all
Unified · Split
Binary file not shown.
| @@ -0,0 +1,59 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | /** | ||
| 29 | * An interface for receiving notifications about imminent accelerated device's | ||
| 30 | * events. Upon receiving such event appropriate actions can be taken (for | ||
| 31 | * example, resources associated with the device can be freed). | ||
| 32 | */ | ||
| 33 | public interface AccelDeviceEventListener { | ||
| 34 | /** | ||
| 35 | * Called when the device is about to be reset. | ||
| 36 | * | ||
| 37 | * One must release all native resources associated with the device which | ||
| 38 | * prevent the device from being reset (such as Default Pool resources for | ||
| 39 | * the D3D pipeline). | ||
| 40 | * | ||
| 41 | * It is safe to remove the listener while in the call back. | ||
| 42 | * | ||
| 43 | * Note: this method is called on the rendering thread, | ||
| 44 | * do not call into user code, do not take RQ lock! | ||
| 45 | */ | ||
| 46 | public void onDeviceReset(); | ||
| 47 | |||
| 48 | /** | ||
| 49 | * Called when the device is about to be disposed of. | ||
| 50 | * | ||
| 51 | * One must release all native resources associated with the device. | ||
| 52 | * | ||
| 53 | * It is safe to remove the listener while in the call back. | ||
| 54 | * | ||
| 55 | * Note: this method is called on the rendering thread, | ||
| 56 | * do not call into user code, do not take RQ lock! | ||
| 57 | */ | ||
| 58 | public void onDeviceDispose(); | ||
| 59 | } | ||
| @@ -0,0 +1,167 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import java.util.Collections; | ||
| 29 | import java.util.HashMap; | ||
| 30 | import java.util.Iterator; | ||
| 31 | import java.util.Map; | ||
| 32 | import java.util.Set; | ||
| 33 | |||
| 34 | /** | ||
| 35 | * This class is used to notify listeners about accelerated device's | ||
| 36 | * events such as device reset or dispose that are about to occur. | ||
| 37 | */ | ||
| 38 | public class AccelDeviceEventNotifier { | ||
| 39 | |||
| 40 | private static AccelDeviceEventNotifier theInstance; | ||
| 41 | |||
| 42 | /** | ||
| 43 | * A device is about to be reset. The listeners have to release all | ||
| 44 | * resources associated with the device which are required for the device | ||
| 45 | * to be reset. | ||
| 46 | */ | ||
| 47 | public static final int DEVICE_RESET = 0; | ||
| 48 | |||
| 49 | /** | ||
| 50 | * A device is about to be disposed. The listeners have to release all | ||
| 51 | * resources associated with the device. | ||
| 52 | */ | ||
| 53 | public static final int DEVICE_DISPOSED = 1; | ||
| 54 | |||
| 55 | private final Map<AccelDeviceEventListener, Integer> listeners; | ||
| 56 | |||
| 57 | private AccelDeviceEventNotifier() { | ||
| 58 | listeners = Collections.synchronizedMap( | ||
| 59 | new HashMap<AccelDeviceEventListener, Integer>(1)); | ||
| 60 | } | ||
| 61 | |||
| 62 | /** | ||
| 63 | * Returns a singleton of AccelDeviceEventNotifier if it exists. If the | ||
| 64 | * passed boolean is false and singleton doesn't exist yet, null is | ||
| 65 | * returned. If the passed boolean is {@code true} and singleton doesn't | ||
| 66 | * exist it will be created and returned. | ||
| 67 | * | ||
| 68 | * @param create whether to create a singleton instance if doesn't yet | ||
| 69 | * exist | ||
| 70 | * @return a singleton instance or null | ||
| 71 | */ | ||
| 72 | private static synchronized | ||
| 73 | AccelDeviceEventNotifier getInstance(boolean create) | ||
| 74 | { | ||
| 75 | if (theInstance == null && create) { | ||
| 76 | theInstance = new AccelDeviceEventNotifier(); | ||
| 77 | } | ||
| 78 | return theInstance; | ||
| 79 | } | ||
| 80 | |||
| 81 | /** | ||
| 82 | * Called to indicate that a device event had occured. | ||
| 83 | * If a singleton exists, the listeners (those associated with | ||
| 84 | * the device) will be notified. | ||
| 85 | * | ||
| 86 | * @param screen a screen number of the device which is a source of | ||
| 87 | * the event | ||
| 88 | * @param eventType a type of the event | ||
| 89 | * @see #DEVICE_DISPOSED | ||
| 90 | * @see #DEVICE_RESET | ||
| 91 | */ | ||
| 92 | public static final void eventOccured(int screen, int eventType) { | ||
| 93 | AccelDeviceEventNotifier notifier = getInstance(false); | ||
| 94 | if (notifier != null) { | ||
| 95 | notifier.notifyListeners(eventType, screen); | ||
| 96 | } | ||
| 97 | } | ||
| 98 | |||
| 99 | /** | ||
| 100 | * Adds the listener associated with a device on particular screen. | ||
| 101 | * | ||
| 102 | * Note: the listener must be removed as otherwise it will forever | ||
| 103 | * be referenced by the notifier. | ||
| 104 | * | ||
| 105 | * @param l the listener | ||
| 106 | * @param screen the screen number indicating which device the listener is | ||
| 107 | * interested in. | ||
| 108 | */ | ||
| 109 | public static final void addListener(AccelDeviceEventListener l,int screen){ | ||
| 110 | getInstance(true).add(l, screen); | ||
| 111 | } | ||
| 112 | |||
| 113 | /** | ||
| 114 | * Removes the listener. | ||
| 115 | * | ||
| 116 | * @param l the listener | ||
| 117 | */ | ||
| 118 | public static final void removeListener(AccelDeviceEventListener l) { | ||
| 119 | getInstance(true).remove(l); | ||
| 120 | } | ||
| 121 | |||
| 122 | private final void add(AccelDeviceEventListener theListener, int screen) { | ||
| 123 | listeners.put(theListener, screen); | ||
| 124 | } | ||
| 125 | private final void remove(AccelDeviceEventListener theListener) { | ||
| 126 | listeners.remove(theListener); | ||
| 127 | } | ||
| 128 | |||
| 129 | /** | ||
| 130 | * Notifies the listeners associated with the screen's device about the | ||
| 131 | * event. | ||
| 132 | * | ||
| 133 | * Implementation note: the current list of listeners is first duplicated | ||
| 134 | * which allows the listeners to remove themselves during the iteration. | ||
| 135 | * | ||
| 136 | * @param screen a screen number with which the device which is a source of | ||
| 137 | * the event is associated with | ||
| 138 | * @param eventType a type of the event | ||
| 139 | * @see #DEVICE_DISPOSED | ||
| 140 | * @see #DEVICE_RESET | ||
| 141 | */ | ||
| 142 | private final void notifyListeners(int deviceEventType, int screen) { | ||
| 143 | HashMap<AccelDeviceEventListener, Integer> listClone; | ||
| 144 | Set<AccelDeviceEventListener> cloneSet; | ||
| 145 | |||
| 146 | synchronized(listeners) { | ||
| 147 | listClone = | ||
| 148 | new HashMap<AccelDeviceEventListener, Integer>(listeners); | ||
| 149 | } | ||
| 150 | |||
| 151 | cloneSet = listClone.keySet(); | ||
| 152 | Iterator<AccelDeviceEventListener> itr = cloneSet.iterator(); | ||
| 153 | while (itr.hasNext()) { | ||
| 154 | AccelDeviceEventListener current = itr.next(); | ||
| 155 | Integer i = listClone.get(current); | ||
| 156 | // only notify listeners which are interested in this device | ||
| 157 | if (i != null && i.intValue() != screen) { | ||
| 158 | continue; | ||
| 159 | } | ||
| 160 | if (deviceEventType == DEVICE_RESET) { | ||
| 161 | current.onDeviceReset(); | ||
| 162 | } else if (deviceEventType == DEVICE_DISPOSED) { | ||
| 163 | current.onDeviceDispose(); | ||
| 164 | } | ||
| 165 | } | ||
| 166 | } | ||
| 167 | } | ||
Binary file not shown.
| @@ -0,0 +1,95 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import java.awt.image.VolatileImage; | ||
| 29 | |||
| 30 | /** | ||
| 31 | * Implementors of this interface provida a way to create a | ||
| 32 | * {@code VolatileImage} whose destination surface is an | ||
| 33 | * {@link AccelSurface} of specified type. | ||
| 34 | * | ||
| 35 | * @see AccelSurface | ||
| 36 | */ | ||
| 37 | public interface AccelGraphicsConfig extends BufferedContextProvider { | ||
| 38 | /** | ||
| 39 | * Returns a VolatileImage with specified width, height, transparency | ||
| 40 | * and guaranteed accelerated surface type. If such image can not be created | ||
| 41 | * (out of vram error, specific surface type is not supported) null | ||
| 42 | * is returned. | ||
| 43 | * | ||
| 44 | * Note: if {@link AccelSurface#TEXTURE} type is requested, rendering | ||
| 45 | * to the image will be denied by throwing | ||
| 46 | * {@code UnsupportedOperationException } | ||
| 47 | * from {@link java.awt.image.VolatileImage#getGraphics} and | ||
| 48 | * {@link java.awt.image.VolatileImage#createGraphics} | ||
| 49 | * | ||
| 50 | * @param width the width of the returned {@code VolatileImage} | ||
| 51 | * @param height the height of the returned {@code VolatileImage} | ||
| 52 | * @param transparency the specified transparency mode | ||
| 53 | * @param type requested accelerated surface type as specified by constants | ||
| 54 | * in AccelSurface interface | ||
| 55 | * @return a {@code VolatileImage} backed up by requested accelerated | ||
| 56 | * surface type or null | ||
| 57 | * @throws IllegalArgumentException if the transparency is not a valid value | ||
| 58 | * @see AccelSurface#TEXTURE | ||
| 59 | * @see AccelSurface#RT_PLAIN | ||
| 60 | * @see AccelSurface#RT_TEXTURE | ||
| 61 | */ | ||
| 62 | public VolatileImage createCompatibleVolatileImage(int width, int height, | ||
| 63 | int transparency, | ||
| 64 | int type); | ||
| 65 | /** | ||
| 66 | * Returns object representing capabilities of the context associated | ||
| 67 | * with this {@code AccelGraphicsConfig}. | ||
| 68 | * | ||
| 69 | * @return ContextCapabilities object representing caps | ||
| 70 | * @see ContextCapabilities | ||
| 71 | */ | ||
| 72 | public ContextCapabilities getContextCapabilities(); | ||
| 73 | |||
| 74 | /** | ||
| 75 | * Adds an {@code AccelDeviceEventListener} to listen to accelerated | ||
| 76 | * device's (which is associated with this {@code AccelGraphicsConfig}) | ||
| 77 | * events. | ||
| 78 | * | ||
| 79 | * Note: a hard link to the listener may be kept so it must be explicitly | ||
| 80 | * removed via {@link #removeDeviceEventListener()}. | ||
| 81 | * | ||
| 82 | * @param l the listener | ||
| 83 | * @see AccelDeviceEventListener | ||
| 84 | */ | ||
| 85 | public void addDeviceEventListener(AccelDeviceEventListener l); | ||
| 86 | |||
| 87 | /** | ||
| 88 | * Removes an {@code AccelDeviceEventListener} from the list of listeners | ||
| 89 | * for this device's events. | ||
| 90 | * | ||
| 91 | * @param l the listener | ||
| 92 | * @see AccelDeviceEventListener | ||
| 93 | */ | ||
| 94 | public void removeDeviceEventListener(AccelDeviceEventListener l); | ||
| 95 | } | ||
Binary file not shown.
| @@ -0,0 +1,136 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import java.awt.Rectangle; | ||
| 29 | import sun.java2d.Surface; | ||
| 30 | |||
| 31 | /** | ||
| 32 | * Abstraction for a hardware accelerated surface. | ||
| 33 | */ | ||
| 34 | public interface AccelSurface extends BufferedContextProvider, Surface { | ||
| 35 | /** | ||
| 36 | * Undefined | ||
| 37 | */ | ||
| 38 | public static final int UNDEFINED = 0; | ||
| 39 | /** | ||
| 40 | * Window (or window substitute) surface | ||
| 41 | */ | ||
| 42 | public static final int WINDOW = 1; | ||
| 43 | /** | ||
| 44 | * Render-To Plain surface (pbuffer for OpenGL, Render Target surface | ||
| 45 | * for Direct3D) | ||
| 46 | */ | ||
| 47 | public static final int RT_PLAIN = 2; | ||
| 48 | /** | ||
| 49 | * Texture surface | ||
| 50 | */ | ||
| 51 | public static final int TEXTURE = 3; | ||
| 52 | /** | ||
| 53 | * A back-buffer surface (SwapChain surface for Direct3D, backbuffer for | ||
| 54 | * OpenGL) | ||
| 55 | */ | ||
| 56 | public static final int FLIP_BACKBUFFER = 4; | ||
| 57 | /** | ||
| 58 | * Render-To Texture surface (fbobject for OpenGL, texture with render-to | ||
| 59 | * attribute for Direct3D) | ||
| 60 | */ | ||
| 61 | public static final int RT_TEXTURE = 5; | ||
| 62 | |||
| 63 | /** | ||
| 64 | * Returns {@code int} representing surface's type as defined by constants | ||
| 65 | * in this interface. | ||
| 66 | * | ||
| 67 | * @return an integer representing this surface's type | ||
| 68 | * @see AccelSurface#UNDEFINED | ||
| 69 | * @see AccelSurface#WINDOW | ||
| 70 | * @see AccelSurface#RT_PLAIN | ||
| 71 | * @see AccelSurface#TEXTURE | ||
| 72 | * @see AccelSurface#FLIP_BACKBUFFER | ||
| 73 | * @see AccelSurface#RT_TEXTURE | ||
| 74 | */ | ||
| 75 | public int getType(); | ||
| 76 | |||
| 77 | /** | ||
| 78 | * Returns a pointer to the native surface data associated with this | ||
| 79 | * surface. | ||
| 80 | * Note: this pointer is only valid on the rendering thread. | ||
| 81 | * | ||
| 82 | * @return pointer to the native surface's data | ||
| 83 | */ | ||
| 84 | public long getNativeOps(); | ||
| 85 | |||
| 86 | /** | ||
| 87 | * Returns a pointer to the real native resource | ||
| 88 | * of the specified type associated with this AccelSurface. | ||
| 89 | * Note: this pointer is only valid on the rendering thread. | ||
| 90 | * | ||
| 91 | * @param resType the type of the requested resource | ||
| 92 | * @return a long containing a pointer to the native resource of the | ||
| 93 | * specified type or 0L if such resource doesn't exist for this surface | ||
| 94 | */ | ||
| 95 | public long getNativeResource(int resType); | ||
| 96 | |||
| 97 | /** | ||
| 98 | * Marks this surface dirty. | ||
| 99 | */ | ||
| 100 | public void markDirty(); | ||
| 101 | |||
| 102 | /** | ||
| 103 | * Returns whether the pipeline considers this surface valid. A surface | ||
| 104 | * may become invalid if it is disposed of, or resized. | ||
| 105 | * | ||
| 106 | * @return true if valid, false otherwise | ||
| 107 | */ | ||
| 108 | public boolean isValid(); | ||
| 109 | |||
| 110 | /** | ||
| 111 | * Returns whether this surface is lost. The return value is only valid | ||
| 112 | * on the render thread, meaning that even if this method returns | ||
| 113 | * {@code true} it could be lost in the next moment unless it is called | ||
| 114 | * on the rendering thread. | ||
| 115 | * | ||
| 116 | * @return true if the surface is known to be lost, false otherwise | ||
| 117 | */ | ||
| 118 | public boolean isSurfaceLost(); | ||
| 119 | |||
| 120 | /** | ||
| 121 | * Returns the requested bounds of the destination surface. The real bounds | ||
| 122 | * of the native accelerated surface may differ. Use | ||
| 123 | * {@link #getNativeBounds} to get the bounds of the native surface. | ||
| 124 | * | ||
| 125 | * @return Rectangle representing java surface's bounds | ||
| 126 | */ | ||
| 127 | public Rectangle getBounds(); | ||
| 128 | |||
| 129 | /** | ||
| 130 | * Returns real bounds of the native surface, which may differ from those | ||
| 131 | * returned by {@link #getBounds}. | ||
| 132 | * | ||
| 133 | * @return Rectangle representing native surface's bounds | ||
| 134 | */ | ||
| 135 | public Rectangle getNativeBounds(); | ||
| 136 | } | ||
| @@ -0,0 +1,74 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import java.awt.Graphics; | ||
| 29 | import java.awt.Graphics2D; | ||
| 30 | import java.awt.GraphicsConfiguration; | ||
| 31 | import sun.awt.image.SunVolatileImage; | ||
| 32 | import static sun.java2d.pipe.hw.AccelSurface.*; | ||
| 33 | |||
| 34 | /** | ||
| 35 | * This is an image with forced type of the accelerated surface. | ||
| 36 | */ | ||
| 37 | public class AccelTypedVolatileImage extends SunVolatileImage { | ||
| 38 | |||
| 39 | /** | ||
| 40 | * Creates a volatile image with specified type of accelerated surface. | ||
| 41 | * | ||
| 42 | * @param graphicsConfig a GraphicsConfiguration for which this image should | ||
| 43 | * be created. | ||
| 44 | * @param width width | ||
| 45 | * @param height width | ||
| 46 | * @param transparency type of {@link java.awt.Transparency transparency} | ||
| 47 | * requested for the image | ||
| 48 | * @param accType type of the desired accelerated surface as defined in | ||
| 49 | * AccelSurface interface | ||
| 50 | * @see sun.java2d.pipe.hw.AccelSurface | ||
| 51 | */ | ||
| 52 | public AccelTypedVolatileImage(GraphicsConfiguration graphicsConfig, | ||
| 53 | int width, int height, int transparency, | ||
| 54 | int accType) | ||
| 55 | { | ||
| 56 | super(null, graphicsConfig, width, height, null, transparency, | ||
| 57 | null, accType); | ||
| 58 | } | ||
| 59 | |||
| 60 | /** | ||
| 61 | * {@inheritDoc} | ||
| 62 | * | ||
| 63 | * This method will throw {@code UnsupportedOperationException} if it this | ||
| 64 | * image's destination surface can not be rendered to. | ||
| 65 | */ | ||
| 66 | @Override | ||
| 67 | public Graphics2D createGraphics() { | ||
| 68 | if (getForcedAccelSurfaceType() == TEXTURE) { | ||
| 69 | throw new UnsupportedOperationException("Can't render " + | ||
| 70 | "to a non-RT Texture"); | ||
| 71 | } | ||
| 72 | return super.createGraphics(); | ||
| 73 | } | ||
| 74 | } | ||
Binary file not shown.
| @@ -0,0 +1,45 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import sun.java2d.pipe.BufferedContext; | ||
| 29 | |||
| 30 | /** | ||
| 31 | * Classes implementing this interface can provide the {@code BufferedContext} | ||
| 32 | * associated with or used by them. | ||
| 33 | * | ||
| 34 | * @see sun.java2d.pipe.BufferedContext | ||
| 35 | */ | ||
| 36 | public interface BufferedContextProvider { | ||
| 37 | /** | ||
| 38 | * Retrieves a context associated with object implementing this | ||
| 39 | * interface. | ||
| 40 | * | ||
| 41 | * @return associated context | ||
| 42 | * @see sun.java2d.pipe.BufferedContext | ||
| 43 | */ | ||
| 44 | public BufferedContext getContext(); | ||
| 45 | } | ||
Binary file not shown.
| @@ -0,0 +1,128 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | /** | ||
| 29 | * Represents a set of capabilities of a BufferedContext and associated | ||
| 30 | * AccelGraphicsConfig. | ||
| 31 | * | ||
| 32 | * @see AccelGraphicsConfig | ||
| 33 | */ | ||
| 34 | public class ContextCapabilities { | ||
| 35 | /** Indicates that the context has no capabilities. */ | ||
| 36 | public static final int CAPS_EMPTY = (0 << 0); | ||
| 37 | /** Indicates that the context supports RT surfaces with alpha channel. */ | ||
| 38 | public static final int CAPS_RT_PLAIN_ALPHA = (1 << 1); | ||
| 39 | /** Indicates that the context supports RT textures with alpha channel. */ | ||
| 40 | public static final int CAPS_RT_TEXTURE_ALPHA = (1 << 2); | ||
| 41 | /** Indicates that the context supports opaque RT textures. */ | ||
| 42 | public static final int CAPS_RT_TEXTURE_OPAQUE = (1 << 3); | ||
| 43 | /** Indicates that the context supports multitexturing. */ | ||
| 44 | public static final int CAPS_MULTITEXTURE = (1 << 4); | ||
| 45 | /** Indicates that the context supports non-pow2 texture dimensions. */ | ||
| 46 | public static final int CAPS_TEXNONPOW2 = (1 << 5); | ||
| 47 | /** Indicates that the context supports non-square textures. */ | ||
| 48 | public static final int CAPS_TEXNONSQUARE = (1 << 6); | ||
| 49 | /** Indicates that the context supports pixel shader 2.0 or better. */ | ||
| 50 | public static final int CAPS_PS20 = (1 << 7); | ||
| 51 | /** Indicates that the context supports pixel shader 3.0 or better. */ | ||
| 52 | public static final int CAPS_PS30 = (1 << 8); | ||
| 53 | /* | ||
| 54 | * Pipeline contexts should use this for defining pipeline-specific | ||
| 55 | * capabilities, for example: | ||
| 56 | * int CAPS_D3D_1 = (FIRST_PRIVATE_CAP << 0); | ||
| 57 | * int CAPS_D3D_2 = (FIRST_PRIVATE_CAP << 1); | ||
| 58 | */ | ||
| 59 | protected static final int FIRST_PRIVATE_CAP = (1 << 16); | ||
| 60 | |||
| 61 | protected final int caps; | ||
| 62 | protected final String adapterId; | ||
| 63 | |||
| 64 | /** | ||
| 65 | * Constructs a {@code ContextCapabilities} object. | ||
| 66 | * @param caps an {@code int} representing the capabilities | ||
| 67 | * @param a {@code String} representing the name of the adapter, or null, | ||
| 68 | * in which case the adapterId will be set to "unknown adapter". | ||
| 69 | */ | ||
| 70 | protected ContextCapabilities(int caps, String adapterId) { | ||
| 71 | this.caps = caps; | ||
| 72 | this.adapterId = adapterId != null ? adapterId : "unknown adapter"; | ||
| 73 | } | ||
| 74 | |||
| 75 | /** | ||
| 76 | * Returns a string representing the name of the graphics adapter if such | ||
| 77 | * could be determined. It is guaranteed to never return {@code null}. | ||
| 78 | * @return string representing adapter id | ||
| 79 | */ | ||
| 80 | public String getAdapterId() { | ||
| 81 | return adapterId; | ||
| 82 | } | ||
| 83 | |||
| 84 | /** | ||
| 85 | * Returns an {@code int} with capabilities (OR-ed constants defined in | ||
| 86 | * this class and its pipeline-specific subclasses). | ||
| 87 | * @return capabilities as {@code int} | ||
| 88 | */ | ||
| 89 | public int getCaps() { | ||
| 90 | return caps; | ||
| 91 | } | ||
| 92 | |||
| 93 | @Override | ||
| 94 | public String toString() { | ||
| 95 | StringBuffer buf = | ||
| 96 | new StringBuffer("ContextCapabilities: adapter=" + | ||
| 97 | adapterId+", caps="); | ||
| 98 | if (caps == CAPS_EMPTY) { | ||
| 99 | buf.append("CAPS_EMPTY"); | ||
| 100 | } else { | ||
| 101 | if ((caps & CAPS_RT_PLAIN_ALPHA) != 0) { | ||
| 102 | buf.append("CAPS_RT_PLAIN_ALPHA|"); | ||
| 103 | } | ||
| 104 | if ((caps & CAPS_RT_TEXTURE_ALPHA) != 0) { | ||
| 105 | buf.append("CAPS_RT_TEXTURE_ALPHA|"); | ||
| 106 | } | ||
| 107 | if ((caps & CAPS_RT_TEXTURE_OPAQUE) != 0) { | ||
| 108 | buf.append("CAPS_RT_TEXTURE_OPAQUE|"); | ||
| 109 | } | ||
| 110 | if ((caps & CAPS_MULTITEXTURE) != 0) { | ||
| 111 | buf.append("CAPS_MULTITEXTURE|"); | ||
| 112 | } | ||
| 113 | if ((caps & CAPS_TEXNONPOW2) != 0) { | ||
| 114 | buf.append("CAPS_TEXNONPOW2|"); | ||
| 115 | } | ||
| 116 | if ((caps & CAPS_TEXNONSQUARE) != 0) { | ||
| 117 | buf.append("CAPS_TEXNONSQUARE|"); | ||
| 118 | } | ||
| 119 | if ((caps & CAPS_PS20) != 0) { | ||
| 120 | buf.append("CAPS_PS20|"); | ||
| 121 | } | ||
| 122 | if ((caps & CAPS_PS30) != 0) { | ||
| 123 | buf.append("CAPS_PS30|"); | ||
| 124 | } | ||
| 125 | } | ||
| 126 | return buf.toString(); | ||
| 127 | } | ||
| 128 | } | ||
Binary file not shown.
Binary file not shown.
| @@ -0,0 +1,154 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (c) 2007, 2008, Oracle and/or its affiliates. All rights reserved. | ||
| 3 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | ||
| 4 | * | ||
| 5 | * This code is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 only, as | ||
| 7 | * published by the Free Software Foundation. Oracle designates this | ||
| 8 | * particular file as subject to the "Classpath" exception as provided | ||
| 9 | * by Oracle in the LICENSE file that accompanied this code. | ||
| 10 | * | ||
| 11 | * This code is distributed in the hope that it will be useful, but WITHOUT | ||
| 12 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
| 13 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | ||
| 14 | * version 2 for more details (a copy is included in the LICENSE file that | ||
| 15 | * accompanied this code). | ||
| 16 | * | ||
| 17 | * You should have received a copy of the GNU General Public License version | ||
| 18 | * 2 along with this work; if not, write to the Free Software Foundation, | ||
| 19 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. | ||
| 20 | * | ||
| 21 | * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA | ||
| 22 | * or visit www.oracle.com if you need additional information or have any | ||
| 23 | * questions. | ||
| 24 | */ | ||
| 25 | |||
| 26 | package sun.java2d.pipe.hw; | ||
| 27 | |||
| 28 | import java.awt.BufferCapabilities; | ||
| 29 | import java.awt.ImageCapabilities; | ||
| 30 | |||
| 31 | /** | ||
| 32 | * Provides extended BufferStrategy capabilities, allowing to specify | ||
| 33 | * the type of vertical refresh synchronization for a buffer strategy. | ||
| 34 | * | ||
| 35 | * This BS capability is always page flipping because v-sync is only relevant | ||
| 36 | * to flipping buffer strategies. | ||
| 37 | * | ||
| 38 | * Note that asking for a v-synced BS doesn't necessarily guarantee that it will | ||
| 39 | * be v-synced since the vsync capability may be disabled in the driver, or | ||
| 40 | * there may be other restriction (like a number of v-synced buffer strategies | ||
| 41 | * allowed per vm). Because of this {@code createBufferStrategy} doesn't | ||
| 42 | * throw {@code AWTException} when a v-synced BS could not be created when | ||
| 43 | * requested. | ||
| 44 | * | ||
| 45 | * @see java.awt.Canvas#createBufferStrategy(int, BufferCapabilities) | ||
| 46 | * @see java.awt.Window#createBufferStrategy(int, BufferCapabilities) | ||
| 47 | */ | ||
| 48 | public class ExtendedBufferCapabilities extends BufferCapabilities { | ||
| 49 | |||
| 50 | /** | ||
| 51 | * Type of synchronization on vertical retrace. | ||
| 52 | */ | ||
| 53 | public static enum VSyncType { | ||
| 54 | /** | ||
| 55 | * Use the default v-sync mode appropriate for given BufferStrategy | ||
| 56 | * and situation. | ||
| 57 | */ | ||
| 58 | VSYNC_DEFAULT(0), | ||
| 59 | |||
| 60 | /** | ||
| 61 | * Synchronize flip on vertical retrace. | ||
| 62 | */ | ||
| 63 | VSYNC_ON(1), | ||
| 64 | |||
| 65 | /** | ||
| 66 | * Do not synchronize flip on vertical retrace. | ||
| 67 | */ | ||
| 68 | VSYNC_OFF(2); | ||
| 69 | |||
| 70 | /** | ||
| 71 | * Used to identify the v-sync type (independent of the constants | ||
| 72 | * order as opposed to {@code ordinal()}). | ||
| 73 | */ | ||
| 74 | public int id() { | ||
| 75 | return id; | ||
| 76 | } | ||
| 77 | |||
| 78 | private VSyncType(int id) { | ||
| 79 | this.id = id; | ||
| 80 | } | ||
| 81 | private int id; | ||
| 82 | } | ||
| 83 | |||
| 84 | private VSyncType vsync; | ||
| 85 | |||
| 86 | /** | ||
| 87 | * Creates an ExtendedBufferCapabilities object with front/back/flip caps | ||
| 88 | * from the passed cap, and VSYNC_DEFAULT v-sync mode. | ||
| 89 | */ | ||
| 90 | public ExtendedBufferCapabilities(BufferCapabilities caps) { | ||
| 91 | super(caps.getFrontBufferCapabilities(), | ||
| 92 | caps.getBackBufferCapabilities(), | ||
| 93 | caps.getFlipContents()); | ||
| 94 | |||
| 95 | this.vsync = VSyncType.VSYNC_DEFAULT; | ||
| 96 | } | ||
| 97 | |||
| 98 | /** | ||
| 99 | * Creates an ExtendedBufferCapabilities instance with front/back/flip caps | ||
| 100 | * from the passed caps, and VSYNC_DEFAULT v-sync mode. | ||
| 101 | */ | ||
| 102 | public ExtendedBufferCapabilities(ImageCapabilities front, | ||
| 103 | ImageCapabilities back, FlipContents flip) | ||
| 104 | { | ||
| 105 | super(front, back, flip); | ||
| 106 | |||
| 107 | this.vsync = VSyncType.VSYNC_DEFAULT; | ||
| 108 | } | ||
| 109 | |||
| 110 | /** | ||
| 111 | * Creates an ExtendedBufferCapabilities instance with front/back/flip caps | ||
| 112 | * from the passed image/flip caps, and the v-sync type. | ||
| 113 | */ | ||
| 114 | public ExtendedBufferCapabilities(ImageCapabilities front, | ||
| 115 | ImageCapabilities back, FlipContents flip, | ||
| 116 | VSyncType t) | ||
| 117 | { | ||
| 118 | super(front, back, flip); | ||
| 119 | |||
| 120 | this.vsync = t; | ||
| 121 | } | ||
| 122 | |||
| 123 | /** | ||
| 124 | * Creates an ExtendedBufferCapabilities instance with front/back/flip caps | ||
| 125 | * from the passed cap, and the passed v-sync mode. | ||
| 126 | */ | ||
| 127 | public ExtendedBufferCapabilities(BufferCapabilities caps, VSyncType t) { | ||
| 128 | super(caps.getFrontBufferCapabilities(), | ||
| 129 | caps.getBackBufferCapabilities(), | ||
| 130 | caps.getFlipContents()); | ||
| 131 | |||
| 132 | this.vsync = t; | ||
| 133 | } | ||
| 134 | |||
| 135 | /** | ||
| 136 | * Creates an ExtendedBufferCapabilities instance with front/back/flip caps | ||
| 137 | * from the object, and passed v-sync mode. | ||
| 138 | */ | ||
| 139 | public ExtendedBufferCapabilities derive(VSyncType t) { | ||
| 140 | return new ExtendedBufferCapabilities(this, t); | ||
| 141 | } | ||
| 142 | |||
| 143 | /** | ||
| 144 | * Returns the type of v-sync requested by this capabilities instance. | ||
| 145 | */ | ||
| 146 | public VSyncType getVSync() { | ||
| 147 | return vsync; | ||
| 148 | } | ||
| 149 | |||
| 150 | @Override | ||
| 151 | public final boolean isPageFlipping() { | ||
| 152 | return true; | ||
| 153 | } | ||
| 154 | } | ||
| @@ -0,0 +1,15 @@ | |||
| 1 | <../../../../../../mkconfig | ||
| 2 | |||
| 3 | TARG=\ | ||
| 4 | AccelDeviceEventListener.dis\ | ||
| 5 | AccelDeviceEventNotifier.dis\ | ||
| 6 | AccelGraphicsConfig.dis\ | ||
| 7 | AccelSurface.dis\ | ||
| 8 | AccelTypedVolatileImage.dis\ | ||
| 9 | BufferedContextProvider.dis\ | ||
| 10 | ContextCapabilities.dis\ | ||
| 11 | ExtendedBufferCapabilities.dis\ | ||
| 12 | |||
| 13 | DISBIN=$ROOT/java/dis/java/java/sun/java2d/pipe/hw | ||
| 14 | |||
| 15 | <$ROOT/mkfiles/mkjava | ||