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;
+    }
 
 }