WebGLとDartで遊んでいますが、オブジェクトに特定のメソッドがあるかどうかを確認する方法がわかりません。たとえば、JavaScriptでは、WebGLがで使用可能かどうかを確認しますwindow.WebGLRenderingContext
が、Dartで同じ方法はありますか?
2 に答える
IIRC Dart の目標の 1 つは、どのブラウザが何を定義しているかの矛盾を正規化することでした。そのため、WebGL は、実行中のブラウザーでネイティブに定義されているかどうかに関係なく、そのインターフェイスが常に Dart に存在するという点で、常に「使用可能」になります。
WebGL がサポートされているかどうかは、おそらく Javascript で行うのと同じ方法で確認するのが最適です。
WebGLRenderingContext gl = canvas.getContext("experimental-webgl");
null の場合gl
、WebGL はサポートされていません。そうでなければそうです!
(ところで: window.WebGLRenderingContext
Javascript に存在するからといって、WebGL がサポートされているわけではありません! これは、ブラウザが WebGL コマンドをディスパッチできることを示しているだけです。実行しているシステムはそれらを受け入れない可能性があります。それでも、コンテキストを作成してみるのが最善です。失敗したときに検出します。)
EDIT:ちなみに、WebGLコンテキストを初期化するDartの方法があります:
RenderingContext gl = canvas.getContext3d();
if (gl == null) {
print("WebGL: initialization failure");
}
古い答え:
WebGLRenderingContext gl = canvas.getContext("experimental-webgl");
if (gl == null) {
print("WebGL is not supported");
return;
}
このコードは、chrome://flags/ で「WebGL を無効にする」をオンにすると、Chrome JavaScript コンソールに「WebGL はサポートされていません」と出力します。
ただし、Firefox で WebGL を無効にすると (about:config -> webgl.disabled;true)、Web コンソールでエラーが発生します。
NS_ERROR_FAILURE: コンポーネントがエラー コードを返しました: 0x80004005 (NS_ERROR_FAILURE) [nsIDOMHTMLCanvasElement.getContext]
編集: これは Firefox の修正されたバグです: https://bugzilla.mozilla.org/show_bug.cgi?id=645792