у меня была такая же проблема и ВОЛП я работал на меня. Проблема в том, что SWT не позволяет webgl в webkit. Чтобы это произошло, вам нужно изменить какой-то код в 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. Я строю для 32-битного Linux с GTK (выберите соответствующую сборку для ваших нужд согласно инструкциям SWT). Затем создайте правой кнопкой мыши файл build.xml в проекте org.eclipse.swt.gtk.linux и выберите «Запустить как» -> «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-файла, чтобы включить webgl в webkit. Первый файл - 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. Найдите метод создания и код, изменяющий настройки в веб-представлении. Я добавил вызов, чтобы включить 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);
Building снова. После того, как вы внесете эти изменения и сохраните их, вы сможете восстановить их. Просто запустите цель «Build.jars», чтобы создать новый swt.jar.
Тестирование. Я создал образец swt-браузера, используя код из примеров SWT. Затем развернули мой новый swt.jar и libswt * .so на целевой машине. В качестве теста я просто попробовал некоторые из множества образцов в Интернете. Наконец, вам может потребоваться установить следующие переменные среды, чтобы включить GTK3 и WEBKIT2.
SWT_GTK3=1
SWT_WEBKIT2=1
Я тестировал это на nvidia и на базе ПК на базе gentoo.
WebGL - это всего лишь плагин javascript поверх OpenGL, который доступен непосредственно из java ... dunno ничего о вашем WebEngine/View, хотя –
Чтобы загрузить API-интерфейс WebGL Javascript, браузер должен быть совместимым. Поскольку WebEngine/WebView являются реализациями Java Webkit (совместимыми с API WebGL), мне было интересно, есть ли способ загрузить его. –