javax.media.nativewindow.VisualIDHolder Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jogl-all Show documentation
Show all versions of jogl-all Show documentation
Java™ Binding for the OpenGL® API
/**
* Copyright 2012 JogAmp Community. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are
* permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation are those of the
* authors and should not be interpreted as representing official policies, either expressed
* or implied, of JogAmp Community.
*/
package javax.media.nativewindow;
import java.util.Comparator;
/**
* Visual ID holder interface.
*
* Allows queries of different types of native visual IDs,
* see {@link #getVisualID(int)}.
*
*/
public interface VisualIDHolder {
public enum VIDType {
// Generic Values
INTRINSIC(0), NATIVE(1),
// EGL Values
EGL_CONFIG(10),
// X11 Values
X11_XVISUAL(20), X11_FBCONFIG(21),
// Windows Values
WIN32_PFD(30);
public final int id;
VIDType(int id){
this.id = id;
}
}
/**
* Returns the native visual ID of the given type
* if supported, or {@link #VID_UNDEFINED} if not supported.
*
* Depending on the native windowing system, type
is handled as follows:
*
* - X11 throws NativeWindowException on
EGL_CONFIG
, WIN32_PFD
*
* INTRINSIC
: X11 XVisual ID
* NATIVE
: X11 XVisual ID
* X11_XVISUAL
: X11 XVisual ID
* X11_FBCONFIG
: VID_UNDEFINED
*
* - X11/GL throws NativeWindowException on
EGL_CONFIG
, WIN32_PFD
*
* INTRINSIC
: X11 XVisual ID
* NATIVE
: X11 XVisual ID
* X11_XVISUAL
: X11 XVisual ID
* X11_FBCONFIG
: X11 FBConfig ID or VID_UNDEFINED
*
* - Windows/GL throws NativeWindowException on
EGL_CONFIG
, X11_XVISUAL
, X11_FBCONFIG
*
* INTRINSIC
: Win32 PIXELFORMATDESCRIPTOR ID
* NATIVE
: Win32 PIXELFORMATDESCRIPTOR ID
* WIN32_PFD
: Win32 PIXELFORMATDESCRIPTOR ID
*
* - EGL/GL throws NativeWindowException on
X11_XVISUAL
, X11_FBCONFIG
, WIN32_PFD
*
* INTRINSIC
: EGL Config ID
* NATIVE
: EGL NativeVisual ID (X11 XVisual ID, Win32 PIXELFORMATDESCRIPTOR ID, ...)
* EGL_CONFIG
: EGL Config ID
*
*
*
* Note: INTRINSIC
and NATIVE
are always handled,
* but may result in {@link #VID_UNDEFINED}. The latter is true if
* the native value are actually undefined or the corresponding object is not
* mapped to a native visual object.
*
* @throws NativeWindowException if type
is neither
* INTRINSIC
nor NATIVE
* and does not match the native implementation.
*/
int getVisualID(VIDType type) throws NativeWindowException ;
/**
* {@link #getVisualID(VIDType)} result indicating an undefined value,
* which could be cause by an unsupported query.
*
* We assume the const value 0
doesn't reflect a valid native visual ID
* and is interpreted as no value on all platforms.
* This is currently true for Android, X11 and Windows.
*
*/
static final int VID_UNDEFINED = 0;
/** Comparing {@link VIDType#NATIVE} */
public static class VIDComparator implements Comparator {
private VIDType type;
public VIDComparator(VIDType type) {
this.type = type;
}
public int compare(VisualIDHolder vid1, VisualIDHolder vid2) {
final int id1 = vid1.getVisualID(type);
final int id2 = vid2.getVisualID(type);
if(id1 > id2) {
return 1;
} else if(id1 < id2) {
return -1;
}
return 0;
}
}
}