2015-01-28 3 views
1

Я нашел интересный компонент, который является Eclipse SWT Browser. Это привязка к Webkit, но не знает, как включить в нее WebGL.Включить WebGL для Eclipse SWT

Один простой способ - использование SWT.MOZILLA, но в Linux существует проблема совместимости между GTK3 и XULRUNNER.

Мне было интересно, могу ли я установить режим браузера в SWT.WEBKIT (это делается), а затем перейти к странице настроек веб-кита и установить свойство «enable-webgl» в true (но я не знал как).

Спасибо.

+0

WebGL - это всего лишь плагин javascript поверх OpenGL, который доступен непосредственно из java ... dunno ничего о вашем WebEngine/View, хотя –

+0

Чтобы загрузить API-интерфейс WebGL Javascript, браузер должен быть совместимым. Поскольку WebEngine/WebView являются реализациями Java Webkit (совместимыми с API WebGL), мне было интересно, есть ли способ загрузить его. –

ответ

0

Попросите вашу систему визуализировать следующий HTML ... простой тест, который попытается получить контекст WebGL ... make или break проверить, обрабатывает ли Brower 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)

+0

К сожалению, это не привело к инициализации WebGL. Я проверил еще один тест на https://get.webgl.org, и он сказал мне, что моя система, возможно, может запускать WebGL, но она отключена, и это то, что я пытаюсь выяснить: как включить WebGL в java на основе веб-страницы. –

+0

даже самые свежие версии хром сегодня (версия 41.0.2272.12 dev) продолжают поставляться с поведением по умолчанию, чтобы умышленно отключить webgl, поэтому есть надежда ... для chrome этот URL-адрес позволяет вам устанавливать флаги: chrome: // flags/ Переопределите список рендеринга программного обеспечения (выберите включить) ... так что после нажатия вы оставите его, если отключить , остальные настройки: Отключить WebGL. (Выберите отключить) ... таким образом, что после нажатия вы оставите говоря Enable проверьте, что WebGL включен, используя следующий URL: хром: // ... GPU/возможно WebEngine имеет аналогично именованные конфигурации URL- –

+0

прямо сейчас что я использую браузер SWT в своем приложении, который является браузером веб-браузера, мне нужна была бы аналогичная процедура, чтобы включить его там. Если мне удастся это сделать, тогда я закончил :) - –

1

у меня была такая же проблема и ВОЛП я работал на меня. Проблема в том, что 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.

Смежные вопросы