正如我們
上周報導的,國外開發者Francois Remy在洩露版Windows Blue附帶的Internet Explorer 11中發現,WebGL接口已經封裝完成,但功能上還未能開放支持。在這之後,另一名開發者Rafael Rivera繼續深入挖掘,竟然發現了在此版本的Internet Explorer 11中開啟WebGL支持的方法。
實際上方法簡單地稱奇。首先你必須已經安裝了Windows 8 Blue build 9364和最新的顯卡驅動(系統自帶的顯卡驅動在OpenGL方面支持不足),然後只需要簡單地導入以下的註冊表腳本即可。
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl]
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBGL]
"iexplore.exe"=dword:00000001
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Main\FeatureControl\FEATURE_WEBGL_HLSL_SHADERS]
"iexplore.exe"=dword:00000000
需要特別值得注意的是其中最後一個FEATURE_WEBGL_HLSL_SHADERS的鍵值,如果設置為1,那麼會讓Internet Explorer 11使用IESL代替GLSL作為著色器語言。如果設置為0,則符合先在大多數WebGL應用的習慣。
目前IE 11對WebGL的支持度仍然非常有限,你可以把一下代碼另存為HTML文件,然後在IE 11中打開,你會發現網頁中出現一片藍色的區域,而這正代表著網頁成功獲得了名為「experimental-webgl」的3D繪製上下文——Internet Explorer 11終於支持WebGL了!
<body onload="demo()">
<canvas style="height: 100%; width: 100%" id='webgl' />
</body>
<script>
var gl = {};
function demo()
{
var canvas = document.getElementById("webgl");
try
{
gl = canvas.getContext("experimental-webgl");
} catch(e) { }
if (gl) {
gl.clearColor(0, 0.678, 0.937, 1.0);
gl.clear(gl.COLOR_BUFFER_BIT);
}
}
</script>
下面附上IE 11運行LearningWebGL教程第15課實例的視頻:
回顧過去,自從WebGL這項新的網頁圖形規範提出伊始,微軟就從未表露出喜色。在2011年6月,微軟更是僱傭一家歐洲安全機構對WebGL提出最強烈的質疑,認為讓網頁直接暴露給GPU是非常危險的行為。如果真要認真地從技術上講,微軟當時主要發難於跨域資源、DoS攻擊以及直接操控GPU。
雖然作為一個剛剛誕生的技術標準,WebGL的確有很多路要走,但是如此興師動眾的指責讓很多對這項新技術充滿希望的開發者感到微軟有些過分。當時開發者普遍認為微軟對於WebGL的指責不是從技術角度出發的,而是完全出於商業目的。著名的WebGL開發者和布道師Gregg Tavares更是祭出一篇題目直接帶著髒字的戰鬥檄文直斥微軟。參見:《WebGL Security and Microsoft Bullshit》
在震驚業界的斥責之後,WebGL工作組把工作重心轉移到了致力於解決安全問題上,一直到今天Khronos Group在GDC 2013上最新公布的WebGL 1.0.2標準中還是把安全放在了首位。
隨後在2012年,微軟指責WebGL的多項安全軟肋都已經取得了極為有效的解決進展:現在CORS已經可以有效的解決跨域資源的問題;而許多廠商也已經部署了GL_ARB_robustness擴展來解決DoS攻擊問題,並且WebGL工作組還在繼續尋找其他的解決辦法。至於直接操控GPU的問題,則是無法避免的,只要一種技術可以直接與GPU對話都會造成一定程度的安全威脅,在2011年於墨爾本召開的一次技術大會上,有人用相同的原理在Microsoft Silverlight 5、Adobe Flash 11和WebGL上實現了同樣的漏洞攻擊。
儘管微軟仍然對WebGL持抗拒態度,但是在2011年8月舉辦的Siggraph 2011上,卻爆出IE 10即將支持Typed Array(類型化數組)的消息。微軟拒絕了WebGL,但卻抵不住誘惑,引進了因為WebGL才誕生的Typed Array,這項技術允許開發者直接在Web上操控二進位數據。2011年12月1日,微軟IE官方博客發表了一片名為《 Working with Binary Data using Typed Arrays》的文章,正式為 IE10 引進了Type Array。
時光荏苒,微軟此後在多個場合多次被問到關於WebGL的問題,但微軟發言人永遠都是微笑的避而不答,當然有時候也會重複一下安全問題這個老梗。
2012年3月6日,在香港舉辦的World Internet Developers』 Summit活動中,微軟高級布道師Giorgio Sardo做了《切繩子遊戲的幕後故事》的演講,在提問環節中有人提出IE將會在什麼時候支持WebGL的問題,他的回答是「Not now」。令人感動的是他沒直接說「never」實在是太給面子了。
隨著WebGL的日漸成熟,越來越多的WebGL實例和應用脫引而出,微軟逐漸意識到了不管他們是否要支持WebGL,他們現在缺乏一種網頁圖形技術來讓自己的瀏覽器在網頁視覺領域和Mozilla、Google、Opera來抗衡。
2012年11月,CNET 的記者 Shankland 採訪了微軟網絡標準工作組的領導人、同時也是 W3C HTML 工作組的聯合主席 Paul Cotton。他依然用安全問題作為擋箭牌,但是卻破天荒指出IE團隊對開發者關於IE缺乏圖形API的詬病深表理解,他說:「我們依然堅持對 WebGL 的安全問題表示擔憂。如果要我們支持 WebGL,那麼就必須毫無餘地的解決這些安全問題。從 IE8、IE9 到 IE10,每次我們宣布添加新的特性的時候,都會有人反饋要求支持其他功能,而在這些人們呼籲的功能中 WebGL 絕對是位居前五位的。我們對 IE 博客上的留言非常清楚,也很明白現在的狀況。在 Web 上開發可交互的 3D 圖形的確很棒。如果我們可以解決安全問題,那我想我們會認真地尋找一種為 Web 引入 3D 圖形的方法。」
此後,Windows Blue洩露,開發者意外發現IE 11已經封裝好WebGL接口,並且可以通過註冊表開啟支持,這樣才有了本文開頭的一幕。
這正是四年盤踞龍虎鬥,微軟終將入大流!歡迎IE 11加入WebGL大家庭!