Skip to content
This repository has been archived by the owner on Jan 22, 2025. It is now read-only.
/ jfx23u Public archive

Commit

Permalink
Initial push for RT-35243 - prism should use Monocle's platform detec…
Browse files Browse the repository at this point in the history
…tion code. Creates a new prism es2 port (prism-es-monocle) which uses the monocle port of glass. Note that it will not be selected on any platform by default; it requires a command line switch -Djavafx.platform=monocle -Dembedded=monocle. Not fully functional yet; currently falls back to software rendering partway through initialization

Reviewed by snorthov, dblaukopf
  • Loading branch information
Lisa Selle committed Jan 22, 2014
1 parent 5e67b21 commit e001682
Show file tree
Hide file tree
Showing 21 changed files with 1,597 additions and 9 deletions.
1 change: 1 addition & 0 deletions .idea/codeStyleSettings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 17 additions & 1 deletion buildSrc/armv6sf.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ def es2LFlags = [extraLFlags, eglLFlags].flatten()

def es2EglfbCFlags = [extraCFlags, eglCFlags, "-DIS_EGLFB", "-DLINUX"].flatten()
def es2EglfbLFlags = [extraLFlags, eglLFlags].flatten()
def es2MonocleCFlags = [extraCFlags, eglCFlags, "-DIS_EGLFB", "-DLINUX"].flatten()
def es2MonocleFlags = [extraLFlags, eglLFlags].flatten()

def es2X11CFlags = [extraCFlags, eglCFlags, x11CFlags, "-DDEBUG", "-DIS_EGLX11", "-DLINUX"].flatten()
def es2X11LFlags = [extraLFlags, x11LFlags, eglLFlags, "-lXdmcp", "-lXau"].flatten()
Expand Down Expand Up @@ -350,6 +352,7 @@ ARMV6SF.glass.javahInclude = [
"com/sun/glass/events/**",
"com/sun/glass/ui/*",
"com/sun/glass/ui/lens/*",
"com/sun/glass/ui/monocle/*",
"com/sun/glass/ui/monocle/linux/*",
"com/sun/glass/ui/monocle/util/*",
"com/sun/glass/ui/monocle/x11/*",
Expand All @@ -369,6 +372,7 @@ ARMV6SF.glass.lensport.lib = "lens_porting"

ARMV6SF.glass.monocle = [:]
ARMV6SF.glass.monocle.nativeSource = [
file("modules/graphics/src/main/native-glass/monocle"),
file("modules/graphics/src/main/native-glass/monocle/linux"),
file("modules/graphics/src/main/native-glass/monocle/util") ]
ARMV6SF.glass.monocle.compiler = compiler
Expand Down Expand Up @@ -492,7 +496,7 @@ ARMV6SF.iio.linkFlags = iioLFlags
ARMV6SF.iio.lib = "javafx_iio"

ARMV6SF.prismES2 = [:]
ARMV6SF.prismES2.variants = ["eglfb"]
ARMV6SF.prismES2.variants = ["eglfb", "monocle"]
ARMV6SF.prismES2.javahInclude = ["com/sun/prism/es2/**/*"]

ARMV6SF.prismES2.eglfb = [:]
Expand All @@ -507,6 +511,18 @@ ARMV6SF.prismES2.eglfb.linker = linker
ARMV6SF.prismES2.eglfb.linkFlags = es2EglfbLFlags
ARMV6SF.prismES2.eglfb.lib = "prism_es2_eglfb"

ARMV6SF.prismES2.monocle= [:]
ARMV6SF.prismES2.monocle.nativeSource = [
file("modules/graphics/src/main/native-prism-es2"),
file("modules/graphics/src/main/native-prism-es2/GL"),
file("modules/graphics/src/main/native-prism-es2/monocle")
]
ARMV6SF.prismES2.monocle.compiler = compiler
ARMV6SF.prismES2.monocle.ccFlags = [ es2EglfbCFlags, "-I", ARMV6SF.glass.lensport.nativeSource ].flatten()
ARMV6SF.prismES2.monocle.linker = linker
ARMV6SF.prismES2.monocle.linkFlags = es2EglfbLFlags
ARMV6SF.prismES2.monocle.lib = "prism_es2_monocle"

ARMV6SF.prismES2.eglx11 = [:]
ARMV6SF.prismES2.eglx11.nativeSource = [
file("modules/graphics/src/main/native-prism-es2"),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2013,2014 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -37,7 +37,7 @@ public interface NativeScreen {
public int getDPI();
public long getNativeHandle();
public void shutdown();

public long platformGetNativeDisplay();
public void uploadPixels(Buffer b,
int x, int y, int width, int height, float alpha);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010, 2014 Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -131,4 +131,8 @@ public IntBuffer getScreenCapture() {
return fb.getBuffer().asIntBuffer();
}

@Override
public long platformGetNativeDisplay() {
return 0L;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -50,6 +50,10 @@ public class FBDevScreen implements NativeScreen {
private Framebuffer fb;
private LinuxFrameBuffer linuxFB;

private static long glesLibraryHandle;
private static long eglLibraryHandle;
private static boolean initialized = false;

public FBDevScreen() {
try {
linuxFB = new LinuxFrameBuffer("/dev/fb0");
Expand Down Expand Up @@ -210,4 +214,20 @@ public synchronized IntBuffer getScreenCapture() {
return getFramebuffer().getBuffer().asIntBuffer();
}

protected boolean initPlatformLibraries() {
if (!initialized) {
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);
initialized = true;
}
return true;
}

public long platformGetNativeDisplay() {
return 0L;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@

import java.nio.ByteBuffer;
import java.security.Permission;
import com.sun.glass.utils.NativeLibLoader;

public class LinuxSystem {
private static Permission permission = new RuntimePermission("loadLibrary.*");
Expand Down Expand Up @@ -148,6 +149,8 @@ public FbVarScreenInfo() {
public native String strerror(int errnum);

// dlfcn.h
public static final int RTLD_LAZY = 0x00001;
public static final int RTLD_GLOBAL = 0x00100;
public native long dlopen(String filename, int flag);
public native String dlerror();
public native long dlsym(long handle, String symbol);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -27,9 +27,14 @@

import com.sun.glass.ui.monocle.linux.FBDevScreen;
import com.sun.glass.ui.monocle.linux.SysFS;
import com.sun.glass.ui.monocle.linux.LinuxSystem;

import java.io.IOException;

public class OMAPScreen extends FBDevScreen {

public long platformGetNativeDisplay() {
initPlatformLibraries();
return 0L;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2010, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -174,4 +174,9 @@ public void swapBuffers() {
public IntBuffer getScreenCapture() {
return null;
}

@Override
public long platformGetNativeDisplay() {
return 0L;
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2009, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2009, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -56,6 +56,10 @@ public Void run() {
isEglfb = true;
libName = "prism_es2_eglfb";
}
else if ("monocle".equals(eglType)) {
isEglfb = true;
libName = "prism_es2_monocle";
}
else if ("eglx11".equals(eglType))
libName = "prism_es2_eglx11";

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2012, 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
Expand Down Expand Up @@ -67,6 +67,8 @@ abstract class GLFactory {
factoryClassName = "com.sun.prism.es2.EGLX11GLFactory";
else if ("eglfb".equals(PlatformUtil.getEmbeddedType()))
factoryClassName = "com.sun.prism.es2.EGLFBGLFactory";
else if ("monocle".equals(PlatformUtil.getEmbeddedType()))
factoryClassName = "com.sun.prism.es2.MonocleGLFactory";
else
factoryClassName = "com.sun.prism.es2.X11GLFactory";
} else if (PlatformUtil.isWindows()) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

package com.sun.prism.es2;



class MonocleGLContext extends GLContext {

private static native long nInitialize(long nativeDInfo, long nativePFInfo,
boolean vSyncRequest);
private static native long nGetNativeHandle(long nativeCtxInfo);
private static native void nMakeCurrent(long nativeCtxInfo, long nativeDInfo);

MonocleGLContext(long nativeCtxInfo) {
this.nativeCtxInfo = nativeCtxInfo;
}

MonocleGLContext(GLDrawable drawable, GLPixelFormat pixelFormat,
boolean vSyncRequest) {

// holds the list of attributes to be translated for native call
int attrArr[] = new int[GLPixelFormat.Attributes.NUM_ITEMS];

GLPixelFormat.Attributes attrs = pixelFormat.getAttributes();

attrArr[GLPixelFormat.Attributes.RED_SIZE] = attrs.getRedSize();
attrArr[GLPixelFormat.Attributes.GREEN_SIZE] = attrs.getGreenSize();
attrArr[GLPixelFormat.Attributes.BLUE_SIZE] = attrs.getBlueSize();
attrArr[GLPixelFormat.Attributes.ALPHA_SIZE] = attrs.getAlphaSize();
attrArr[GLPixelFormat.Attributes.DEPTH_SIZE] = attrs.getDepthSize();
attrArr[GLPixelFormat.Attributes.DOUBLEBUFFER] = attrs.isDoubleBuffer() ? 1 : 0;
attrArr[GLPixelFormat.Attributes.ONSCREEN] = attrs.isOnScreen() ? 1 : 0;

// return the context info object created on the default screen
nativeCtxInfo = nInitialize(drawable.getNativeDrawableInfo(),
pixelFormat.getNativePFInfo(), vSyncRequest);
}

@Override
long getNativeHandle() {
return nGetNativeHandle(nativeCtxInfo);
}

@Override
void makeCurrent(GLDrawable drawable) {
nMakeCurrent(nativeCtxInfo, drawable.getNativeDrawableInfo());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*
* Copyright (c) 2014, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/

package com.sun.prism.es2;

import com.sun.prism.paint.Color;
import java.security.AccessController;
import java.security.PrivilegedAction;


class MonocleGLDrawable extends GLDrawable {

private static final boolean transparentFramebuffer =
AccessController.doPrivileged(new PrivilegedAction<Boolean>() {
@Override
public Boolean run() {
return Boolean.getBoolean("com.sun.javafx.transparentFramebuffer");
}
});

private static native long nCreateDrawable(long nativeWindow, long nativeCtxInfo);
private static native long nGetDummyDrawable(long nativeCtxInfo);
private static native boolean nSwapBuffers(long nativeDInfo);
boolean isDummy = false;

MonocleGLDrawable(GLPixelFormat pixelFormat) {

super(0L, pixelFormat);
long nDInfo = nGetDummyDrawable(pixelFormat.getNativePFInfo());
setNativeDrawableInfo(nDInfo);
isDummy = true;
}

MonocleGLDrawable(long nativeWindow, GLPixelFormat pixelFormat) {
super(nativeWindow, pixelFormat);
long nDInfo = nCreateDrawable(nativeWindow, pixelFormat.getNativePFInfo());
setNativeDrawableInfo(nDInfo);
}

@Override
boolean swapBuffers(GLContext glCtx) {
boolean retval = nSwapBuffers(getNativeDrawableInfo());
// TODO: This looks hacky. Need to find a better approach.
// For Monocle, we are painting in Z-order from the back,
// possibly (likely) with an app that does not cover the
// full screen. We need to start each paint with an empty canvas.
// The assumption here was that we would do that by clearing the buffer.
glCtx.clearBuffers(
transparentFramebuffer ? Color.TRANSPARENT : Color.BLACK,
true, true, true);
return retval;
}
}
Loading

0 comments on commit e001682

Please sign in to comment.