JavaFX 9 WebView の WebGL 対応について

この記事は JavaFX Advent Calendar 2017 の 12 日目です。昨日分は @boochnich さんの「JavaFX 3Dで赤道座標系の地球表示(1)」です。

1~2 年前の情報になりますが、JavaFX 9 から WebView が WebGL に対応するという話を聞き、ひそかに期待していました。本日はその希望が絶望へと変わった瞬間についてお伝えしようかと思います。

Storm Tracks WebGL Too というサイトがあります。このサイトは WebGL を使用して過去に発生したハリケーンや台風などの進路を 3D グラフィックスの地球儀上に表す (地球儀はマウスのドラッグで動かせる) というものです。以下は Google Chrome で開いたときのスクリーンショットですが、Edge 等の他のブラウザでも見られます。

webgl-chrome.png

JavaFX の WebView は WebKit を使用しているため、WebKit 派生の Blink を使用した Chrome とは近い結果が得られるはずです。

テストに使用したプログラムは、以下の通りです。

package webgltest;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.scene.web.WebView;
import javafx.stage.Stage;

public class Main extends Application {

  @Override
  public void start(Stage stage) throws Exception {
    WebView webview = new WebView();
    webview.getEngine().load("http://callumprentice.github.io/apps/storm_tracks_webgl/index.html");
    System.out.println(webview.getEngine().getUserAgent());
    
    AnchorPane root = new AnchorPane();
    root.getChildren().add(webview);
    
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.setTitle("WebView Test on JavaFX 9");
    stage.show();
    
  }

  public static void main(String[] args) {
    launch(args);
  }

}

そして実行結果がこちら。

webgl-javafx9.png

ロード画面から先に進みません。WebGL 対応とか全然できていません。ダメダメです。

一応、UserAgent の値を見ておきます。

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/604.1 (KHTML, like Gecko) JavaFX/9 Safari/604.1

いったい JavaFX 8 からどのくらいアップデートされているの? と疑いたくなったので、先ほどのテストプログラムを JDK 8 Update 152 で動かしてみました。結果はこちら。

webgl-javafx8.png

こちらは想定通りですが、UserAgent の値が...これ、どう思います?

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/604.1 (KHTML, like Gecko) JavaFX/8.0 Safari/604.1

以上です。