2013-01-15 55 views
0

我想用Java + OpenGL(c版本)開發。我可以通過Java窗口句柄來OpenGL-es

  1. 使用java來設計UI。
  2. 使用OpenGL-es(c版本)在UI上呈現圖像。

我知道如果我想用Java + C進行開發,我需要JNI。因爲我必須首先創建opengl上下文。這個上下文必須和窗口句柄相關。我可以通過JNI將由Java創建的窗口句柄傳遞給OpenGL API。或者使用jogl來開啓opengl環境。

+0

否 - Java不提供您要查找的信息...但是,您可能能夠使用諸如JNI/JNA之類的方法來嘗試查找句柄,這取決於您想要執行多少工作,或者你可以看看OpenGL的開源綁定 – MadProgrammer

回答

1

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接口代碼所要做的就是告訴它什麼畫畫。