我找到了一个有趣的组件,它是Eclipse SWT Browser。它是对Webkit的绑定,但不知道如何在其中启用WebGL。
一种简单的方法是使用SWT.MOZILLA,但在Linux上,GTK3和XULRUNNER之间存在兼容性问题。
所以我想知道我是否可以将浏览器模式设置为SWT.WEBKIT(已完成),然后以某种方式访问webkit设置页面并将属性“enable-webgl”设置为true(但我不知道如何)。
感谢。
答案 0 :(得分:1)
我遇到了同样的问题,以下内容对我有用。问题是SWT没有在webkit中启用webgl。要实现这一点,您需要在SWT中更改一些代码并重建。
创建构建环境。 我在Mac上工作,所以我用VirtualBox创建了一个Ubuntu虚拟机(或者使用linux机器)。确保安装JAVA JDK,因为这是编译本机接口代码所必需的。你还需要eclipse。 然后,我按照这些说明设置SWT构建环境(https://www.eclipse.org/swt/faq.php#howbuildjar)。 我将org.eclipse.swt和org.eclipse.swt.gtk.linux项目导入eclipse。我正在使用GTK构建32位Linux(根据SWT指令选择适合您需求的构建)。然后右键单击org.eclipse.swt.gtk.linux项目中的build.xml进行构建,然后选择" Run as" - >" Ant build ..." 。这将弹出一个对话框,然后选择" build.jars"目标并单击RUN按钮。
假设一切顺利,你应该得到这样的输出。
Buildfile: /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/build.xml
properties:
init:
clean:
[delete] Deleting directory /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/@dot
[delete] Deleting directory /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/temp.folder
properties:
init:
build.jars:
properties:
init:
@dot:
[mkdir] Created dir: /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/temp.folder/@dot.bin
copy.gtk.src:
[copy] Copying 692 files to /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/temp.folder/@dot.src
copy.translationfiles:
is64:
[echo] Is64=${is64}
replace64:
[echo] Converting java files to 32 bit
[javac] /development/swt/eclipse.platform.swt/bundles/org.eclipse.swt/buildFragment.xml:70: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
[javac] Compiling 582 source files to /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/temp.folder/@dot.bin
[copy] Copying 6 files to /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/temp.folder/@dot.bin
[mkdir] Created dir: /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/@dot
[copy] Copying 848 files to /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/@dot
[jar] Building jar: /development/swt/eclipse.platform.swt.binaries/bundles/org.eclipse.swt.gtk.linux.x86/swt.jar
BUILD SUCCESSFUL
Total time: 59 seconds
BUILD SUCCESSFUL上方的行为您提供swt.jar的位置。如果需要在目标系统上安装libswt * .so文件,此构建还将创建它们。
修改代码。现在我们可以构建一个swt.jar,我们需要修改代码。我修改了2个java文件以在webkit中启用webgl。第一个文件是org.eclipse.swt.internal.webkit.WebKitGTK.java。查找以下代码块并为enable_webgl添加定义,如图所示。
/** Properties */
public static final byte[] default_encoding = ascii ("default-encoding"); // $NON-NLS-1$
public static final byte[] default_charset = ascii ("default-charset"); // $NON-NLS-1$
public static final byte[] enable_scripts = ascii ("enable-scripts"); // $NON-NLS-1$
public static final byte[] enable_plugins = ascii("enable-plugins");
public static final byte[] enable_universal_access_from_file_uris = ascii ("enable-universal-access-from-file-uris"); // $NON-NLS-1$
public static final byte[] height = ascii ("height"); // $NON-NLS-1$
public static final byte[] javascript_can_open_windows_automatically = ascii ("javascript-can-open-windows-automatically"); // $NON-NLS-1$
public static final byte[] locationbar_visible = ascii ("locationbar-visible"); // $NON-NLS-1$
public static final byte[] menubar_visible = ascii ("menubar-visible"); // $NON-NLS-1$
public static final byte[] SOUP_SESSION_PROXY_URI = ascii ("proxy-uri"); // $NON-NLS-1$
public static final byte[] statusbar_visible = ascii ("statusbar-visible"); // $NON-NLS-1$
public static final byte[] toolbar_visible = ascii ("toolbar-visible"); // $NON-NLS-1$
public static final byte[] user_agent = ascii ("user-agent"); // $NON-NLS-1$
public static final byte[] width = ascii ("width"); // $NON-NLS-1$
public static final byte[] x = ascii ("x"); // $NON-NLS-1$
public static final byte[] y = ascii ("y"); // $NON-NLS-1$
public static final byte[] enable_webgl = ascii ("enable-webgl"); // $NON-NLS-1$
下一个文件是org.eclipse.swt.browser.WebKit.java。查找create方法和更改Web视图中设置的代码。我添加了一个调用来启用webgl,如图所示。
long /*int*/ settings = WebKitGTK.webkit_web_view_get_settings (webView);
OS.g_object_set (settings, WebKitGTK.javascript_can_open_windows_automatically, 1, 0);
OS.g_object_set (settings, WebKitGTK.enable_webgl, 1, 0);
再次建设。完成这些更改并保存后,您可以重建。只需运行" Build.jars"再次定位以创建一个新的swt.jar。
<强>测试即可。我使用SWT示例中的代码创建了一个示例swt浏览器。然后将我的新swt.jar和libswt * .so部署到目标机器。作为一项测试,我只是尝试了网上的一些样本。最后,您可能需要设置以下环境变量以启用GTK3和WEBKIT2。
SWT_GTK3=1
SWT_WEBKIT2=1
我在运行gentoo的nvidia和基于intel的PC上测试了这个。
答案 1 :(得分:0)
让您的系统呈现以下HTML ...一个简单的测试,它将尝试获取WebGL上下文... make或break测试浏览器是否处理WebGL ...您将看到一个弹出文件说WebGL可以正常工作或者失败了:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>WebGL - 2D Rectangle</title>
<script>
window.onload = main;
function main() {
var gl = null;
var canvas = null;
try { // get WebGL context
var canvas = document.getElementById("canvas_space");
gl = canvas.getContext("experimental-webgl", { alpha: false });
gl.viewportWidth = canvas.width;
gl.viewportHeight = canvas.height;
} catch (error_msg_gl) {
console.log("ERROR ");
console.log(error_msg_gl);
}
if (gl) {
alert("cool your browser is webgl ready !!!");
} else {
alert("Fail - could NOT initialize Webgl");
}
}
</script>
</head>
<body>
<canvas id="canvas_space" width="400" height="300"></canvas>
</body>
</html>
我认为这可能会有所帮助:
WebPreferences *p = [webView preferences];
if ([p respondsToSelector:@selector(setWebGLEnabled:)]) {
[p setWebGLEnabled:YES];
}
答案 2 :(得分:0)
这是在最新版本的SWT中修复的,可用于4.7 / Oxygen M5。见https://bugs.eclipse.org/bugs/show_bug.cgi?id=510082