LinuxでWebGL動作せず

three.jsで作った3Dをlinuxで動作させたところ下記エラーが発生。

THREE.WebGLRenderer: Error creating WebGL context.

Windowsでは動作したのに…。

開発環境は以下。
Electron: v1.4.13
node.js: v4.4.4
three.js: 0.83.0
linux: Ubuntu14.04(64bit)
VM: Hyper-V

Electronは内部にChromeエンジンを搭載しているとのことで、まずはChromeを疑ってみる。
node.jsの影響が無いことを確認するために、前掲three.jsで多色グラデーションを試してみる。

まずはFirefoxで…。
これは問題なく動作する。

次にChrome最新版(57.0.2987.133-64bit)。
むむ…、動作せず。
デベロッパーツールで確認。

THREE.WebGLRenderer: Error creating WebGL context.

同じエラーである。
やはりChromeの問題であった。
ぐぐってみると、ChromeはWebGLのサポートを停止している模様。
[WebGL][Chrome]Chrome 10からWindows XPでのWebGLサポートを停止
でもWindowsでは動作したのに、何故linuxだけなのだろう…。
(因みにCentOS6でも動作せず。)

回避するにはchrome://flagsで「ソフトウェアレンダリングリストをオーバライド」を有効にする、といいうのが定石らしい。

これでChromeのWebGLは動作した。
あとはElectronである。

これがなかなかわからなかったのですが、ヒントはchrome://flags「ソフトウェアレンダリングリストをオーバライド」のハッシュ(#)にありました。

このフラグのハッシュ名は「ignore-gpu-blacklist」である。
なんかちょっと引く名前だ。
VMのgpuがブラックリストに載っているんでしょうか…?
ちょっと気持ち悪いんですが、これをElectronで指定できそうです。

const {app} = require('electron');
app.commandLine.appendSwitch('ignore-gpu-blacklist');

readyイベントの前に実行しなければならないので、スコープ外に記述します。

これでElectron(Ubuntu)でも無事Three.jsが動作しました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です