我想用Java + OpenGL(c版本)開發。我可以通過Java窗口句柄來OpenGL-es
- 使用java來設計UI。
- 使用OpenGL-es(c版本)在UI上呈現圖像。
我知道如果我想用Java + C
進行開發,我需要JNI。因爲我必須首先創建opengl上下文。這個上下文必須和窗口句柄相關。我可以通過JNI將由Java創建的窗口句柄傳遞給OpenGL API。或者使用jogl
來開啓opengl環境。
我想用Java + OpenGL(c版本)開發。我可以通過Java窗口句柄來OpenGL-es
我知道如果我想用Java + C
進行開發,我需要JNI。因爲我必須首先創建opengl上下文。這個上下文必須和窗口句柄相關。我可以通過JNI將由Java創建的窗口句柄傳遞給OpenGL API。或者使用jogl
來開啓opengl環境。
JNI是在java中運行本地代碼的唯一方式,可用於加載特殊生成的共享庫(.dll在windows,.so on linux/android中)並調用在該庫中聲明的本機函數。如果你想用C來寫你的後端,你將不得不作出在C共享庫中的一些功能,啓動你的代碼了,說:
void init(void)
{
...
}
,然後看起來是這樣的另一個功能:
void setWindowHandle(void* handle)
{
...
}
然後,您可以調用第一個函數從java中啓動c代碼,並使用第二個函數將句柄從java傳遞到您的c代碼。
除了JNI,它需要導入某些自動生成的頭文件,並且需要你在java類型之間來回切換,我強烈建議使用JNA來鏈接到這個共享庫。 JNA是JNI的一個包裝API,它處理類型轉換,並且不要求你在你的c中包含任何java環境代碼。爲了簡單和兼容你的代碼,我建議在java中使用JOGL(一種標準java的opengl綁定)或者作爲android的一部分提供的java opengl綁定來編寫opengl接口代碼如果此代碼是Android設備的API。你可能會認爲c的速度要快得多,應該使用,但只要與opengl接口,只有真正計算密集的代碼是由圖形卡完成的,所有opengl接口代碼所要做的就是告訴它什麼畫畫。
否 - Java不提供您要查找的信息...但是,您可能能夠使用諸如JNI/JNA之類的方法來嘗試查找句柄,這取決於您想要執行多少工作,或者你可以看看OpenGL的開源綁定 – MadProgrammer