2012-06-06 36 views
4

WebGL的支持我玩WebGL的飛鏢,我無法弄清楚如何檢查是否一些對象有一定的方法。例如在JavaScript中,我會檢查WebGL是否可用window.WebGLRenderingContext,但在Dart中有沒有相同的方法?您在達特

+0

您在這裏問兩兩件事。 Toji回答「我如何正確檢測WebGL正在一臺機器上工作」,這實際上不是一個特定於Dart的問題。你的第二個問題更加微妙:「在Dart中,我可以通過檢查對象是否具有特定方法來執行特徵檢測嗎?」答案是否定的。在Dart中,類是在編譯時定義的,並且API是固定的。 –

回答

8

IIRC Dart的目標之一是規範化瀏覽器定義的不一致之處。因此,WebGL將總是是「可用的」,因爲它的接口將始終存在於Dart中,或者您正在運行的瀏覽器沒有本地定義它們。

支持用是否WebGL的可能是最好的檢查你的Javascript做同樣的方式:

WebGLRenderingContext gl = canvas.getContext("experimental-webgl"); 

如果gl爲null,則是不支持WebGL的。否則它是! (只是因爲在Javascript中存在window.WebGLRenderingContext並不意味着WebGL被支持!這隻會告訴你瀏覽器能夠調度WebGL命令。你運行的系統可能不接受它,它仍然是最好的嘗試創建上下文並檢測它失敗時)

2

編輯:順便說一句,有初始化的WebGL上下文的飛鏢道:

RenderingContext gl = canvas.getContext3d(); 
if (gl == null) { 
    print("WebGL: initialization failure"); 
} 

OLD答:

WebGLRenderingContext gl = canvas.getContext("experimental-webgl"); 
if (gl == null) { 
    print("WebGL is not supported"); 
    return; 
} 

此代碼在Chrome瀏覽器JavaScript控制檯上打印「WebGL不受支持」,當我在chrome:// flags /下打開「禁用WebGL」時。

然而,隨着WebGL的火狐下禁用(關於:配置 - > webgl.disabled;真),它產生的Web控制檯錯誤:

NS_ERROR_FAILURE:組件返回失敗代碼:0x80004005的(NS_ERROR_FAILURE)[nsIDOMHTMLCanvasElement .getContext]

編輯:這是Firefox中的固定錯誤:https://bugzilla.mozilla.org/show_bug.cgi?id=645792