強火で進め

このブログではプログラム関連の記事を中心に書いてます。

ChromeにWebGLが実装されたみたいなので試してみた

ついにChromeにもWebGLが実装されました。

Google Chrome」も3Dグラフィックス規格「WebGL」を採用へ:ニュース - CNET Japan
http://japan.cnet.com/news/media/story/0,2000056023,20401412,00.htm

時間がなかったのでテストできて無かったのですが時間ができたので早速、テストしてみました。

まだ開発者向けプレビューバージョンにしか実装されてないとの事なのでこちらからDL。

Early Access Release Channels (Chromium Developer Documentation)
http://dev.chromium.org/getting-involved/dev-channel#TOC-Windows

プログラムをコマンドラインで「--enable-webgl」と「--no-sandbox」を指定して実行し、WebKitプロジェクトが公開しているサンプルを動作させてみました。

が、動作せず。

JavaScriptをチェックしたところ getContext() のところでオブジェクト取得を失敗していて undefined を返していました。

Firefoxはここの指定が違っていたのでもしかして指定が違う?と思い色々な文字列でテストたのですがどれも失敗。

しょうがないのでChromeソースコードを見てみました。
ソースは svn co で落とせると思っていたらエラーとなり、こちらのサイトを参考にDLしました。

Mac OSX 版の Google Chrome (chromium) を試してみた - 求職日記 :: riaf-ja blog
http://blog.riaf.jp/archive/58

ソースコードをDLしたディレクトリで以下のコマンドを実行したところ

find * -exec grep -i -H "getContext" {} \;

src/third_party/WebKit/WebCore/html/HTMLCanvasElement.cpp に getContext() が定義されている様でした。

こちらを開いたところビンゴ、以下の記述が見つかりました。

#if ENABLE(3D_CANVAS)    
    Settings* settings = document()->settings();
    if (settings && settings->webGLEnabled()) {
        if ((type == "webkit-3d") ||
            (type == "GL")) {

ということで getContext() の引数の文字列は "webkit-3d" か "GL" を指定すれば良さそうです。

と、ここでふとした事を発見、WebKitのサンプルって "webkit-3d" が指定されてね?

という事で指定は間違ってないけど undefined を返しているという結論に。

ハードウェア的に必要ものが足りてないから undefined を返している?などと色々推測できる事はありますけどそこまでプログラムを追っていくのもしんどいので素直にGoogleからサンプルが提供されるのを待つ事にします。