package com.sun.glass.ui.monocle;
import java.lang.reflect.Field;
import java.security.Permission;
import java.util.Formatter;
class EGL {
private static long eglWindowSurface = 0l;
static final long EGL_DEFAULT_DISPLAY = 0l;
static final long EGL_NO_CONTEXT = 0l;
static final long EGL_NO_DISPLAY = 0l;
static final long EGL_NO_SURFACE = 0l;
static final int EGL_DONT_CARE = -1;
static final int EGL_SUCCESS = 0x3000;
static final int EGL_NOT_INITIALIZED = 0x3001;
static final int EGL_BAD_ACCESS = 0x3002;
static final int EGL_BAD_ALLOC = 0x3003;
static final int EGL_BAD_ATTRIBUTE = 0x3004;
static final int EGL_BAD_CONFIG = 0x3005;
static final int EGL_BAD_CONTEXT = 0x3006;
static final int EGL_BAD_CURRENT_SURFACE = 0x3007;
static final int EGL_BAD_DISPLAY = 0x3008;
static final int EGL_BAD_MATCH = 0x3009;
static final int EGL_BAD_NATIVE_PIXMAP = 0x300A;
static final int EGL_BAD_NATIVE_WINDOW = 0x300B;
static final int EGL_BAD_PARAMETER = 0x300C;
static final int EGL_BAD_SURFACE = 0x300D;
static final int EGL_CONTEXT_LOST = 0x300E;
static final int EGL_BUFFER_SIZE = 0x3020;
static final int EGL_ALPHA_SIZE = 0x3021;
static final int EGL_BLUE_SIZE = 0x3022;
static final int EGL_GREEN_SIZE = 0x3023;
static final int EGL_RED_SIZE = 0x3024;
static final int EGL_DEPTH_SIZE = 0x3025;
static final int EGL_STENCIL_SIZE = 0x3026;
static final int EGL_CONFIG_CAVEAT = 0x3027;
static final int EGL_CONFIG_ID = 0x3028;
static final int EGL_LEVEL = 0x3029;
static final int EGL_MAX_PBUFFER_HEIGHT = 0x302A;
static final int EGL_MAX_PBUFFER_PIXELS = 0x302B;
static final int EGL_MAX_PBUFFER_WIDTH = 0x302C;
static final int EGL_NATIVE_RENDERABLE = 0x302D;
static final int EGL_NATIVE_VISUAL_ID = 0x302E;
static final int EGL_NATIVE_VISUAL_TYPE = 0x302F;
static final int EGL_SAMPLES = 0x3031;
static final int EGL_SAMPLE_BUFFERS = 0x3032;
static final int EGL_SURFACE_TYPE = 0x3033;
static final int EGL_TRANSPARENT_TYPE = 0x3034;
static final int EGL_TRANSPARENT_BLUE_VALUE = 0x3035;
static final int EGL_TRANSPARENT_GREEN_VALUE = 0x3036;
static final int EGL_TRANSPARENT_RED_VALUE = 0x3037;
static final int EGL_NONE = 0x3038;
static final int EGL_BIND_TO_TEXTURE_RGB = 0x3039;
static final int EGL_BIND_TO_TEXTURE_RGBA = 0x303A;
static final int EGL_MIN_SWAP_INTERVAL = 0x303B;
static final int EGL_MAX_SWAP_INTERVAL = 0x303C;
static final int EGL_LUMINANCE_SIZE = 0x303D;
static final int EGL_ALPHA_MASK_SIZE = 0x303E;
static final int EGL_COLOR_BUFFER_TYPE = 0x303F;
static final int EGL_RENDERABLE_TYPE = 0x3040;
static final int EGL_MATCH_NATIVE_PIXMAP = 0x3041;
static final int EGL_CONFORMANT = 0x3042;
static final int EGL_SLOW_CONFIG = 0x3050;
static final int EGL_NON_CONFORMANT_CONFIG = 0x3051;
static final int EGL_TRANSPARENT_RGB = 0x3052;
static final int EGL_RGB_BUFFER = 0x308E;
static final int EGL_LUMINANCE_BUFFER = 0x308F;
static final int EGL_NO_TEXTURE = 0x305C;
static final int EGL_TEXTURE_RGB = 0x305D;
static final int EGL_TEXTURE_RGBA = 0x305E;
static final int EGL_TEXTURE_2D = 0x305F;
static final int EGL_PBUFFER_BIT = 0x0001;
static final int EGL_PIXMAP_BIT = 0x0002;
static final int EGL_WINDOW_BIT = 0x0004;
static final int EGL_VG_COLORSPACE_LINEAR_BIT = 0x0020;
static final int EGL_VG_ALPHA_FORMAT_PRE_BIT = 0x0040;
static final int EGL_MULTISAMPLE_RESOLVE_BOX_BIT = 0x0200;
static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 0x0400;
static final int EGL_OPENGL_ES_BIT = 0x0001;
static final int EGL_OPENVG_BIT = 0x0002;
static final int EGL_OPENGL_ES = 2;
static final int EGL_OPENGL_BIT = 0x0008;
static final int EGL_VENDOR = 0x3053;
static final int EGL_VERSION = 0x3054;
static final int EGL_EXTENSIONS = 0x3055;
static final int EGL_CLIENT_APIS = 0x308D;
static final int EGL_HEIGHT = 0x3056;
static final int EGL_WIDTH = 0x3057;
static final int EGL_LARGEST_PBUFFER = 0x3058;
static final int EGL_TEXTURE_FORMAT = 0x3080;
static final int EGL_TEXTURE_TARGET = 0x3081;
static final int EGL_MIPMAP_TEXTURE = 0x3082;
static final int EGL_MIPMAP_LEVEL = 0x3083;
static final int EGL_RENDER_BUFFER = 0x3086;
static final int EGL_VG_COLORSPACE = 0x3087;
static final int EGL_VG_ALPHA_FORMAT = 0x3088;
static final int EGL_HORIZONTAL_RESOLUTION = 0x3090;
static final int EGL_VERTICAL_RESOLUTION = 0x3091;
static final int EGL_PIXEL_ASPECT_RATIO = 0x3092;
static final int EGL_SWAP_BEHAVIOR = 0x3093;
static final int EGL_MULTISAMPLE_RESOLVE = 0x3099;
static final int EGL_BACK_BUFFER = 0x3084;
static final int EGL_SINGLE_BUFFER = 0x3085;
static final int EGL_VG_COLORSPACE_sRGB = 0x3089;
static final int EGL_VG_COLORSPACE_LINEAR = 0x308A;
static final int EGL_VG_ALPHA_FORMAT_NONPRE = 0x308B;
static final int EGL_VG_ALPHA_FORMAT_PRE = 0x308C;
static final int EGL_DISPLAY_SCALING = 10000;
static final int EGL_UNKNOWN = -1;
static final int EGL_BUFFER_PRESERVED = 0x3094;
static final int EGL_BUFFER_DESTROYED = 0x3095;
static final int EGL_OPENVG_IMAGE = 0x3096;
static final int EGL_CONTEXT_CLIENT_TYPE = 0x3097;
static final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
static final int EGL_MULTISAMPLE_RESOLVE_DEFAULT = 0x309A;
static final int EGL_MULTISAMPLE_RESOLVE_BOX = 0x309B;
static final int EGL_OPENGL_ES_API = 0x30A0;
static final int EGL_OPENVG_API = 0x30A1;
static final int EGL_OPENGL_API = 0x30A2;
static final int EGL_DRAW = 0x3059;
static final int EGL_READ = 0x305A;
static final int EGL_CORE_NATIVE_ENGINE = 0x305B;
private static Permission permission = new RuntimePermission("loadLibrary.*");
private static EGL instance = new EGL();
private EGL() {}
static EGL getEGL() {
checkPermissions();
return instance;
}
private static void checkPermissions() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkPermission(permission);
}
}
native void loadFunctions(long dlHandle);
native boolean eglBindAPI(int api);
native boolean eglChooseConfig(
long eglDisplay,
int[] attribs,
long[] eglConfigs,
int configSize,
int[] configCount);
native long eglContextFromConfig(long eglDisplay, long eglConfig);
native long eglCreateContext(
long eglDisplay,
long eglConfig,
long shareContext,
int[] attribs);
long eglCreateWindowSurface(long eglDisplay,
long eglConfig,
long nativeWindow,
int[] attribs) {
if (eglWindowSurface == 0) {
eglWindowSurface = _eglCreateWindowSurface(eglDisplay, eglConfig,
nativeWindow, attribs);
}
return eglWindowSurface;
}
native long _eglCreateWindowSurface(
long eglDisplay,
long eglConfig,
long nativeWindow,
int[] attribs);
native boolean eglDestroyContext(long eglDisplay, long eglContext);
native boolean eglGetConfigAttrib(
long eglDisplay,
long eglConfig,
int attrib,
int[] value);
native long eglGetDisplay(long nativeDisplay);
native int eglGetError();
native boolean eglInitialize(long eglDisplay, int[] major,
int[] minor);
native boolean eglMakeCurrent(
long eglDisplay,
long eglDrawSurface,
long eglReadSurface,
long eglContext);
native String eglQueryString(long eglDisplay, int name);
native String eglQueryVersion(long eglDisplay, int versionType);
native boolean eglSwapBuffers(long eglDisplay, long eglSurface);
String eglErrorToString(int errorCode) {
if (errorCode >= 0x3000 && errorCode < 0x3020) {
for (Field field : EGL.class.getFields()) {
try {
if (field.getName().startsWith("EGL_")
&& field.getType() == Integer.TYPE
&& field.getInt(null) == errorCode) {
return field.getName();
}
} catch (IllegalAccessException e) {
}
}
}
return new Formatter()
.format("0x%04x", errorCode & 0xffff)
.out()
.toString();
}
}