最近試了一下Emscripten將good編譯成web版本,也就是透過Emscripten使用LLVM技術將C/C++編譯成javascript,這樣就可以在browser上執行了。
一開始先不管圖形顯式的話,移植都還算很順利,可以在下方看到接上trace log之後表示功能移植完成。接下來使用OpenGL版本的繪圖模組來作成像移植,不過這部份不是很順利,只有色塊可以正常顯示,圖形就都無法正常顯示出來。可能是我的OpenGL版本的繪圖模組太老舊了,Emscripten沒辨法100%相容支援,最後沒辨法只好將OpenGL版本的繪圖模組換成SDL版本的繪圖模組,因為SDL是Emscripten預設內建支援的成像引擎,結果圖形就能正常顯示了,只不過缺點是SDL版本的繪圖模組功能很陽春,很多像是縮放旋轉等功能沒實作,因為是使用SDL1。
不過還有個問題,預設參數編譯出來的js檔有10M,太大了。但如果加上-O2之類的最佳化編譯選項後,結果會造成無法執行(或者是載入太久?)。如果改成使用wasm編譯參數就可以配會-O1以上最佳化參數,編譯出來的檔案再加上使用Closure Compiler去除空白字元等,大小就會小於5M。
底下是測試連結。
Test
這個測試連結同時也以php簡單的實作了上傳及表列good檔案,以及執行選取的good檔案。
一開始先不管圖形顯式的話,移植都還算很順利,可以在下方看到接上trace log之後表示功能移植完成。接下來使用OpenGL版本的繪圖模組來作成像移植,不過這部份不是很順利,只有色塊可以正常顯示,圖形就都無法正常顯示出來。可能是我的OpenGL版本的繪圖模組太老舊了,Emscripten沒辨法100%相容支援,最後沒辨法只好將OpenGL版本的繪圖模組換成SDL版本的繪圖模組,因為SDL是Emscripten預設內建支援的成像引擎,結果圖形就能正常顯示了,只不過缺點是SDL版本的繪圖模組功能很陽春,很多像是縮放旋轉等功能沒實作,因為是使用SDL1。
不過還有個問題,預設參數編譯出來的js檔有10M,太大了。但如果加上-O2之類的最佳化編譯選項後,結果會造成無法執行(或者是載入太久?)。如果改成使用wasm編譯參數就可以配會-O1以上最佳化參數,編譯出來的檔案再加上使用Closure Compiler去除空白字元等,大小就會小於5M。
底下是測試連結。
Test
這個測試連結同時也以php簡單的實作了上傳及表列good檔案,以及執行選取的good檔案。
留言
張貼留言