--- old/modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativeScreen.java 2014-01-21 12:06:05.408163773 -0500 +++ new/modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativeScreen.java 2014-01-21 12:06:05.224163780 -0500 @@ -27,22 +27,60 @@ import java.nio.Buffer; import java.nio.IntBuffer; +import com.sun.glass.ui.monocle.linux.LinuxSystem; +import java.lang.reflect.Method; +import java.util.Locale; + +public abstract class NativeScreen { + private static long glesLibraryHandle; + private static long eglLibraryHandle; + private static long nativeDisplayType; + private static boolean initialized; + + public abstract int getDepth(); + public abstract int getNativeFormat(); + public abstract int getWidth(); + public abstract int getHeight(); + public abstract int getDPI(); + public abstract long getNativeHandle(); + public abstract void shutdown(); + public static long platformGetNativeDisplay() {return 0L;}; -public interface NativeScreen { - public int getDepth(); - public int getNativeFormat(); - public int getWidth(); - public int getHeight(); - public int getDPI(); - public long getNativeHandle(); - public void shutdown(); - - public void uploadPixels(Buffer b, + public abstract void uploadPixels(Buffer b, int x, int y, int width, int height, float alpha); - public void swapBuffers(); + public abstract void swapBuffers(); + + public abstract IntBuffer getScreenCapture(); - public IntBuffer getScreenCapture(); + protected static boolean initPlatformLibraries() { + LinuxSystem ls = LinuxSystem.getLinuxSystem(); + glesLibraryHandle = ls.dlopen("libGLESv2.so", LinuxSystem.RTLD_LAZY | LinuxSystem.RTLD_GLOBAL); + eglLibraryHandle = ls.dlopen("libEGL.so", LinuxSystem.RTLD_LAZY | LinuxSystem.RTLD_GLOBAL); + return true; + } + + public static synchronized long getNativeDisplay() { + String platformNativeScreenName; + + if (initialized) { + // already initialized + return nativeDisplayType; + } + String platformName = NativePlatformFactory.getNativePlatformName(); + platformNativeScreenName = "com.sun.glass.ui.monocle." + platformName + "." + + platformName.toUpperCase(Locale.ROOT) + "Screen"; + initPlatformLibraries(); + try { + Method platformMethod = Class.forName(platformNativeScreenName).getMethod("platformGetNativeDisplay"); + nativeDisplayType = (long)platformMethod.invoke(null); + } catch (Exception e){ + e.printStackTrace(); + } + + initialized = true; + return nativeDisplayType; + } }