modules/graphics/src/main/java/com/sun/glass/ui/monocle/NativeScreen.java
Print this page
@@ -25,24 +25,62 @@
package com.sun.glass.ui.monocle;
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;
+ }
}