为 Eclipse SWT 启用 WebGL

Enable WebGL for Eclipse SWT

我发现了一个有趣的组件,它是 Eclipse SWT 浏览器。它是对 Webkit 的绑定,但不知道如何在其中启用 WebGL。

一个简单的方法是使用 SWT.MOZILLA,但是在 Linux 上 GTK3 和 XULRUNNER 之间存在兼容性问题。

所以我想知道我是否可以将浏览器模式设置为 SWT.WEBKIT(已完成),然后以某种方式访问​​ webkit 设置页面并将 属性 "enable-webgl" 设置为 true (但我不知道怎么做)。

谢谢。

让您的系统呈现以下内容 HTML ...一个简单的测试将尝试获取 WebGL 上下文 ...成败测试浏览器是否处理 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];
}            

[详情在这里] (Enable WebGL in the Mac OS application on WebKit)

我遇到了同样的问题,以下对我有用。问题是 SWT 没有在 webkit 中启用 webgl。要做到这一点,您需要更改 SWT 中的一些代码并重新构建。

创建构建环境。 我在 Mac 上工作,所以我使用 VirtualBox 创建了一个 Ubuntu 虚拟机(或使用 linux 机器)。确保安装 JAVA JDK,因为这是编译本机界面代码所必需的。您还需要日食。 然后我按照这些说明设置 SWT 构建环境 (https://www.eclipse.org/swt/faq.php#howbuildjar)。 我将 org.eclipse.swt 和 org.eclipse.swt.gtk.linux 项目导入到 Eclipse 中。我正在使用 GTK 构建 32 位 linux(select 根据 SWT 说明,根据您的需要构建适当的构建)。然后通过右击 org.eclipse.swt.gtk.linux 项目中的 build.xml 和 select "Run as"-->"Ant build..." 来构建。这将弹出一个对话框,您 select "build.jars" 目标并单击 运行 按钮。

假设一切顺利,你应该得到这样的输出。

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。在 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

我已经在基于 nvidia 和 intel 的 PC 运行ning gentoo 上对此进行了测试。

这在 SWT 的最新版本中已修复,将在 4.7/Oxygen M5 中可用。参见 https://bugs.eclipse.org/bugs/show_bug.cgi?id=510082