Wednesday, August 03, 2011

LynxEngine Update : Web Player

前幾天為了JNI而上網找了一些資料, 意外發現其實透過JAWT可以輕易將native的東西render到browser上, 這樣透過JNI來橋接native code跟java, 就可以一次解決Android跟Web兩個平台了. 花了一個晚上試了一下, 結果出奇的容易. 然後寫了個java wrapper把輸入訊號送到native就大功告成了.

把之前的Script Game放上瀏覽器, 可以順利的運作, Lua跟Mono都可以正確執行無誤. 等再把JNI部分全部完成後, 應該移植到Android就沒甚麼大問題了.


7 comments:

CoderEllison said...

Hello, 我想請問您幾個問題:
1. 就我看來JAWT是將rendering的結果畫在它的Canvas上面。rendering lib可能是用c++寫的,但是可以透過JNI直接將兩者橋接在一起,不過在canvas上面draw pixel的方式應該還是software。
2. 如果這個版本的web player是屬於非servlet的方式,那如何克服該render module的d3d9 API,在非windows平台or mobile執行上的問題呢?
3. 就我以為使用JAWT於client端還是使用java VM的環境,請問您有寫到webGL的函式或是使用到Html5的方法嗎?

謝謝midnight coder,你的blog讓我學習到很多。

CoderEllison said...
This comment has been removed by the author.
CoderEllison said...
This comment has been removed by the author.
fallingCAT said...

1.JAWT部分我認為應該不是軟體的Blt因為renderer是直接使用JAWT傳回來的windows context來rendering. 而且即使JAWT是使用Blt將backbuffer畫到browser上, windows應該也是使用硬體的function了.

2.不是servelt, 所以每個對應平台都要有一個client版本. 但LynxEngine本身設計就是cross platform的, 所以這不會是問題. 會選用這種方式除了效率還有因為既有的引擎已經完成了而且是跨平台, LynxEngine不只一個renderer, OpenGL, OpenGL ES都有支援.

3.抱歉標題誤導了 :) LynxEngine是使用java VM, 我只是用HTML5的語法寫那個網頁而已..... 因為最近也在看HTML5的東西

CoderEllison said...

Hello, 不好意思,最近我對這個議題蠻有興趣的。據我所知key event這些事件,我在C++的dll是沒辦法被listen的到。

所以你是實做了JNI Keyboard Hook還是在Lua的script中去listen? 如果是Lua,那它跟JVM的聯繫上,有沒有特別需要注意的部份呢? 謝謝

fallingCAT said...

所有input event都是在java端capture的, 然後在java端呼叫Native來將captured data設定到Native class中. 所以Lua或是Mono端是不需要牽涉到任何java的東西.

我現在還無法判斷這種做法的好與壞, 不過目前對我來說, 這是最快的解決方案, 重要的是我完全不用更動任何Native的code, 也就是說我的Native code在PC, iPhone, Android, Web都是完全一樣的, 這樣大幅減少了出錯的機率.

fallingCAT said...

還有script端也是不用做任何修改, 這是我最注重的地方.