aboutsummaryrefslogtreecommitdiffstats
path: root/src/nativewindow/classes
diff options
context:
space:
mode:
Diffstat (limited to 'src/nativewindow/classes')
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java33
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java29
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsScreen.java8
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java12
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsConfiguration.java4
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsDevice.java11
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsScreen.java11
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/egl/EGLGraphicsDevice.java13
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/macosx/MacOSXGraphicsDevice.java15
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/windows/WindowsGraphicsDevice.java15
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java14
-rw-r--r--src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java2
12 files changed, 99 insertions, 68 deletions
diff --git a/src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java
index c6911bac8..83b437612 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/AbstractGraphicsDevice.java
@@ -51,6 +51,9 @@ public interface AbstractGraphicsDevice extends Cloneable {
/** Dummy connection value for an external connection where no native support for multiple devices is available */
public static String EXTERNAL_CONNECTION = "excon";
+ /** Default unit id for the 1st device: 0 */
+ public static int DEFAULT_UNIT = 0;
+
/**
* Returns the type of the underlying subsystem, ie
* NativeWindowFactory.TYPE_KD, NativeWindowFactory.TYPE_X11, ..
@@ -59,14 +62,36 @@ public interface AbstractGraphicsDevice extends Cloneable {
/**
* Returns the semantic GraphicsDevice connection.<br>
- * On platforms supporting multiple devices, local or network,
- * the implementation shall return a unique name.<br>
- * On X11 for example, the <code>DISPLAY</code> connection string,
- * eg. <code>:0.0</code>, could be returned.<br>
+ * On platforms supporting remote devices, eg via tcp/ip network,
+ * the implementation shall return a unique name for each remote address.<br>
+ * On X11 for example, the connection string should be as the following example.<br>
+ * <ul>
+ * <li><code>:0.0</code> for a local connection</li>
+ * <li><code>remote.host.net:0.0</code> for a remote connection</li>
+ * </ul>
+ *
+ * To support multiple local device, see {@link #getUnitID()}.
*/
public String getConnection();
/**
+ * Returns the graphics device <code>unit ID</code>.<br>
+ * The <code>unit ID</code> support multiple graphics device configurations
+ * on a local machine.<br>
+ * To support remote device, see {@link #getConnection()}.
+ * @return
+ */
+ public int getUnitID();
+
+ /**
+ * Returns a unique ID String of this device using {@link #getType() type},
+ * {@link #getConnection() connection} and {@link #getUnitID() unitID}.<br>
+ * The unique ID does not reflect the instance of the device, hence the handle is not included.<br>
+ * The unique ID may be used as a key for semantic device mapping.
+ */
+ public String getUniqueID();
+
+ /**
* Returns the native handle of the underlying native device,
* if such thing exist.
*/
diff --git a/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java
index f28d254ab..cb367f939 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsDevice.java
@@ -36,8 +36,11 @@ package javax.media.nativewindow;
import com.jogamp.nativewindow.impl.NativeWindowFactoryImpl;
public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice {
+ private static final String separator = "_";
private String type;
protected String connection;
+ protected int unitID;
+ protected String uniqueID;
protected long handle;
protected ToolkitLock toolkitLock;
@@ -46,9 +49,11 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
* gathered via {@link NativeWindowFactory#createDefaultToolkitLock()}.
* @param type
*/
- public DefaultGraphicsDevice(String type, String connection) {
+ public DefaultGraphicsDevice(String type, String connection, int unitID) {
this.type = type;
this.connection = connection;
+ this.unitID = unitID;
+ this.uniqueID = getUniqueID(type, connection, unitID);
this.handle = 0;
setToolkitLock( NativeWindowFactory.getDefaultToolkitLock(type) );
}
@@ -59,9 +64,11 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
* @param type
* @param handle
*/
- public DefaultGraphicsDevice(String type, String connection, long handle) {
+ public DefaultGraphicsDevice(String type, String connection, int unitID, long handle) {
this.type = type;
this.connection = connection;
+ this.unitID = unitID;
+ this.uniqueID = getUniqueID(type, connection, unitID);
this.handle = handle;
setToolkitLock( NativeWindowFactory.createDefaultToolkitLock(type, handle) );
}
@@ -72,9 +79,11 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
* @param handle
* @param locker
*/
- public DefaultGraphicsDevice(String type, String connection, long handle, ToolkitLock locker) {
+ public DefaultGraphicsDevice(String type, String connection, int unitID, long handle, ToolkitLock locker) {
this.type = type;
this.connection = connection;
+ this.unitID = unitID;
+ this.uniqueID = getUniqueID(type, connection, unitID);
this.handle = handle;
setToolkitLock( locker );
}
@@ -95,6 +104,14 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
return connection;
}
+ public final int getUnitID() {
+ return unitID;
+ }
+
+ public final String getUniqueID() {
+ return uniqueID;
+ }
+
public final long getHandle() {
return handle;
}
@@ -126,7 +143,7 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
}
public String toString() {
- return getClass().toString()+"[type "+getType()+", connection "+getConnection()+", handle 0x"+Long.toHexString(getHandle())+"]";
+ return getClass().toString()+"[type "+getType()+", connection "+getConnection()+", unitID "+getUnitID()+", handle 0x"+Long.toHexString(getHandle())+"]";
}
/**
@@ -148,4 +165,8 @@ public class DefaultGraphicsDevice implements Cloneable, AbstractGraphicsDevice
public final ToolkitLock getToolkitLock() {
return toolkitLock;
}
+
+ protected static String getUniqueID(String type, String connection, int unitID) {
+ return (type + separator + connection + separator + unitID).intern();
+ }
}
diff --git a/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsScreen.java b/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsScreen.java
index 893b0ddd2..065385ae3 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsScreen.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/DefaultGraphicsScreen.java
@@ -41,12 +41,8 @@ public class DefaultGraphicsScreen implements Cloneable, AbstractGraphicsScreen
this.idx = idx;
}
- public static AbstractGraphicsScreen createScreenDevice(String connection,int screenIdx) {
- return new DefaultGraphicsScreen(new DefaultGraphicsDevice(NativeWindowFactory.TYPE_DEFAULT, connection), screenIdx);
- }
-
- public static AbstractGraphicsScreen createDefault() {
- return createScreenDevice(AbstractGraphicsDevice.DEFAULT_CONNECTION, 0);
+ public static AbstractGraphicsScreen createDefault(String type) {
+ return new DefaultGraphicsScreen(new DefaultGraphicsDevice(type, AbstractGraphicsDevice.DEFAULT_CONNECTION, AbstractGraphicsDevice.DEFAULT_UNIT), 0);
}
public Object clone() {
diff --git a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
index 49b398b6f..a36440873 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/NativeWindowFactory.java
@@ -245,6 +245,18 @@ public abstract class NativeWindowFactory {
return useCustom?nativeWindowingTypeCustom:nativeWindowingTypePure;
}
+ /** Don't know if we shall add this factory here ..
+ public static AbstractGraphicsDevice createGraphicsDevice(String type, String connection, int unitID, long handle, ToolkitLock locker) {
+ if(type.equals(TYPE_EGL)) {
+ return new
+ } else if(type.equals(TYPE_X11)) {
+ } else if(type.equals(TYPE_WINDOWS)) {
+ } else if(type.equals(TYPE_MACOSX)) {
+ } else if(type.equals(TYPE_AWT)) {
+ } else if(type.equals(TYPE_DEFAULT)) {
+ }
+ } */
+
/** Sets the default NativeWindowFactory. */
public static void setDefaultFactory(NativeWindowFactory factory) {
defaultFactory = factory;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsConfiguration.java b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsConfiguration.java
index f56248e67..6aafc8549 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsConfiguration.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsConfiguration.java
@@ -84,13 +84,13 @@ public class AWTGraphicsConfiguration extends DefaultGraphicsConfiguration imple
awtGraphicsDevice = awtGfxConfig.getDevice();
if(null!=awtGraphicsDevice) {
// Create Device/Screen
- awtDevice = new AWTGraphicsDevice(awtGraphicsDevice);
+ awtDevice = new AWTGraphicsDevice(awtGraphicsDevice, AbstractGraphicsDevice.DEFAULT_UNIT);
awtScreen = new AWTGraphicsScreen(awtDevice);
}
}
if(null==awtScreen) {
// use defaults since no native peer is available yet
- awtScreen = (AWTGraphicsScreen) AWTGraphicsScreen.createScreenDevice(-1);
+ awtScreen = (AWTGraphicsScreen) AWTGraphicsScreen.createScreenDevice(-1, AbstractGraphicsDevice.DEFAULT_UNIT);
awtDevice = (AWTGraphicsDevice) awtScreen.getDevice();
awtGraphicsDevice = awtDevice.getGraphicsDevice();
}
diff --git a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsDevice.java
index e1d7c84f1..cc4cd464f 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsDevice.java
@@ -51,17 +51,18 @@ public class AWTGraphicsDevice extends DefaultGraphicsDevice implements Cloneabl
private GraphicsDevice device;
private String subType;
- protected AWTGraphicsDevice(GraphicsDevice device) {
- super(NativeWindowFactory.TYPE_AWT, device.getIDstring());
+ protected AWTGraphicsDevice(GraphicsDevice device, int unitID) {
+ super(NativeWindowFactory.TYPE_AWT, device.getIDstring(), unitID);
this.device = device;
this.subType = null;
}
- public static AbstractGraphicsDevice createDevice(GraphicsDevice awtDevice) {
+ public static AbstractGraphicsDevice createDevice(GraphicsDevice awtDevice, int unitID) {
if(null==awtDevice) {
awtDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
+ unitID = AbstractGraphicsDevice.DEFAULT_UNIT;
}
- return new AWTGraphicsDevice(awtDevice);
+ return new AWTGraphicsDevice(awtDevice, unitID);
}
public Object clone() {
@@ -90,7 +91,7 @@ public class AWTGraphicsDevice extends DefaultGraphicsDevice implements Cloneabl
}
public String toString() {
- return getClass().toString()+"[type "+getType()+"[subType "+getSubType()+"], connection "+getConnection()+", awtDevice "+device+", handle 0x"+Long.toHexString(getHandle())+"]";
+ return getClass().toString()+"[type "+getType()+"[subType "+getSubType()+"], connection "+getConnection()+", unitID "+getUnitID()+", awtDevice "+device+", handle 0x"+Long.toHexString(getHandle())+"]";
}
}
diff --git a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsScreen.java b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsScreen.java
index 6cbf2ee71..383dcae80 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsScreen.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/awt/AWTGraphicsScreen.java
@@ -43,7 +43,6 @@ import java.awt.GraphicsDevice;
import java.awt.GraphicsEnvironment;
import javax.media.nativewindow.*;
import javax.media.nativewindow.AbstractGraphicsDevice;
-import com.jogamp.nativewindow.impl.*;
/** A wrapper for an AWT GraphicsDevice (screen) allowing it to be
handled in a toolkit-independent manner. */
@@ -74,18 +73,18 @@ public class AWTGraphicsScreen extends DefaultGraphicsScreen implements Cloneabl
return -1;
}
- public static AbstractGraphicsScreen createScreenDevice(GraphicsDevice awtDevice) {
- AWTGraphicsDevice device = (AWTGraphicsDevice) AWTGraphicsDevice.createDevice(awtDevice);
+ public static AbstractGraphicsScreen createScreenDevice(GraphicsDevice awtDevice, int unitID) {
+ AWTGraphicsDevice device = (AWTGraphicsDevice) AWTGraphicsDevice.createDevice(awtDevice, unitID);
return new AWTGraphicsScreen(device);
}
- public static AbstractGraphicsScreen createScreenDevice(int index) {
+ public static AbstractGraphicsScreen createScreenDevice(int index, int unitID) {
GraphicsDevice awtDevice = getScreenDevice(index);
- return createScreenDevice(awtDevice);
+ return createScreenDevice(awtDevice, unitID);
}
public static AbstractGraphicsScreen createDefault() {
- return createScreenDevice(-1);
+ return createScreenDevice(-1, AbstractGraphicsDevice.DEFAULT_UNIT);
}
public Object clone() {
diff --git a/src/nativewindow/classes/javax/media/nativewindow/egl/EGLGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/egl/EGLGraphicsDevice.java
index 2fca915a0..7bd27fdba 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/egl/EGLGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/egl/EGLGraphicsDevice.java
@@ -40,18 +40,15 @@ import javax.media.nativewindow.*;
public class EGLGraphicsDevice extends DefaultGraphicsDevice implements Cloneable {
/**
* Note that this is not an open connection, ie no native display handle exist.
- * This constructor exist to setup a default device connection.<br>
- * FIXME:<br>
- * find out the EGL semantics of a device connection {@link javax.media.nativewindow.AbstractGraphicsDevice#getConnection()}
- * to actually use multiple devices.
+ * This constructor exist to setup a default device connection/unit.<br>
*/
- public EGLGraphicsDevice(String connection) {
- super(NativeWindowFactory.TYPE_EGL, connection);
+ public EGLGraphicsDevice(int unitID) {
+ super(NativeWindowFactory.TYPE_EGL, AbstractGraphicsDevice.DEFAULT_CONNECTION, unitID);
}
/** Constructs a new EGLGraphicsDevice corresponding to the given EGL display handle. */
- public EGLGraphicsDevice(long eglDisplay) {
- super(NativeWindowFactory.TYPE_EGL, AbstractGraphicsDevice.DEFAULT_CONNECTION, eglDisplay);
+ public EGLGraphicsDevice(long eglDisplay, int unitID) {
+ super(NativeWindowFactory.TYPE_EGL, AbstractGraphicsDevice.DEFAULT_CONNECTION, unitID, eglDisplay);
}
public Object clone() {
diff --git a/src/nativewindow/classes/javax/media/nativewindow/macosx/MacOSXGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/macosx/MacOSXGraphicsDevice.java
index b7dbf0d6a..02c63758f 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/macosx/MacOSXGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/macosx/MacOSXGraphicsDevice.java
@@ -38,20 +38,9 @@ import javax.media.nativewindow.*;
*/
public class MacOSXGraphicsDevice extends DefaultGraphicsDevice implements Cloneable {
- /**
- * Note that this is not an open connection, ie no native display handle exist.
- * This constructor exist to setup a default device connection.<br>
- * FIXME:<br>
- * find out the EGL semantics of a device connection {@link javax.media.nativewindow.AbstractGraphicsDevice#getConnection()}
- * to actually use multiple devices.
- */
- public MacOSXGraphicsDevice(String connection) {
- super(NativeWindowFactory.TYPE_MACOSX, connection);
- }
-
/** Constructs a new MacOSXGraphicsDevice */
- public MacOSXGraphicsDevice() {
- super(NativeWindowFactory.TYPE_MACOSX, AbstractGraphicsDevice.DEFAULT_CONNECTION);
+ public MacOSXGraphicsDevice(int unitID) {
+ super(NativeWindowFactory.TYPE_MACOSX, AbstractGraphicsDevice.DEFAULT_CONNECTION, unitID);
}
public Object clone() {
diff --git a/src/nativewindow/classes/javax/media/nativewindow/windows/WindowsGraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/windows/WindowsGraphicsDevice.java
index fe11ba937..d5e32381b 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/windows/WindowsGraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/windows/WindowsGraphicsDevice.java
@@ -38,20 +38,9 @@ import javax.media.nativewindow.*;
* Encapsulates a graphics device on Windows platforms.<br>
*/
public class WindowsGraphicsDevice extends DefaultGraphicsDevice implements Cloneable {
- /**
- * Note that this is not an open connection, ie no native display handle exist.
- * This constructor exist to setup a default device connection.<br>
- * FIXME:<br>
- * find out the Windows semantics of a device connection {@link javax.media.nativewindow.AbstractGraphicsDevice#getConnection()}
- * to actually use multiple devices.
- */
- public WindowsGraphicsDevice(String connection) {
- super(NativeWindowFactory.TYPE_WINDOWS, connection);
- }
-
/** Constructs a new WindowsGraphicsDevice */
- public WindowsGraphicsDevice() {
- super(NativeWindowFactory.TYPE_WINDOWS, AbstractGraphicsDevice.DEFAULT_CONNECTION);
+ public WindowsGraphicsDevice(int unitID) {
+ super(NativeWindowFactory.TYPE_WINDOWS, AbstractGraphicsDevice.DEFAULT_CONNECTION, unitID);
}
public Object clone() {
diff --git a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java
index dfbe8c6dd..31e03f8f1 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsDevice.java
@@ -46,15 +46,16 @@ public class X11GraphicsDevice extends DefaultGraphicsDevice implements Cloneabl
* Note that this is not an open connection, ie no native display handle exist.
* This constructor exist to setup a default device connection.
*/
- public X11GraphicsDevice(String connection) {
- super(NativeWindowFactory.TYPE_X11, connection);
+ public X11GraphicsDevice(String connection, int unitID) {
+ super(NativeWindowFactory.TYPE_X11, connection, unitID);
}
/** Constructs a new X11GraphicsDevice corresponding to the given native display handle and default
* {@link javax.media.nativewindow.ToolkitLock} via {@link NativeWindowFactory#createDefaultToolkitLock(java.lang.String, long)}.
*/
- public X11GraphicsDevice(long display) {
- super(NativeWindowFactory.TYPE_X11, X11Util.XDisplayString(display), display);
+ public X11GraphicsDevice(long display, int unitID) {
+ // FIXME: derive unitID from connection could be buggy, one DISPLAY for all screens for example..
+ super(NativeWindowFactory.TYPE_X11, X11Util.XDisplayString(display), unitID, display);
if(0==display) {
throw new NativeWindowException("null display");
}
@@ -64,8 +65,8 @@ public class X11GraphicsDevice extends DefaultGraphicsDevice implements Cloneabl
* @param display the Display connection
* @param locker custom {@link javax.media.nativewindow.ToolkitLock}, eg to force null locking in NEWT
*/
- public X11GraphicsDevice(long display, ToolkitLock locker) {
- super(NativeWindowFactory.TYPE_X11, X11Util.XDisplayString(display), display, locker);
+ public X11GraphicsDevice(long display, int unitID, ToolkitLock locker) {
+ super(NativeWindowFactory.TYPE_X11, X11Util.XDisplayString(display), unitID, display, locker);
if(0==display) {
throw new NativeWindowException("null display");
}
@@ -79,6 +80,7 @@ public class X11GraphicsDevice extends DefaultGraphicsDevice implements Cloneabl
closeDisplay = close;
}
public boolean close() {
+ // FIXME: shall we respect the unitID ?
if(closeDisplay && 0 != handle) {
X11Util.closeDisplay(handle);
handle = 0;
diff --git a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java
index dca0d1de3..9de3baa51 100644
--- a/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java
+++ b/src/nativewindow/classes/javax/media/nativewindow/x11/X11GraphicsScreen.java
@@ -50,7 +50,7 @@ public class X11GraphicsScreen extends DefaultGraphicsScreen implements Cloneabl
public static AbstractGraphicsScreen createScreenDevice(long display, int screenIdx) {
if(0==display) throw new NativeWindowException("display is null");
- return new X11GraphicsScreen(new X11GraphicsDevice(display), screenIdx);
+ return new X11GraphicsScreen(new X11GraphicsDevice(display, AbstractGraphicsDevice.DEFAULT_UNIT), screenIdx);
}
public long getDefaultVisualID() {