我想开发Java + OpenGL(c版)。
我知道如果我想用Java + C
开发,我需要JNI。因为我必须首先创建opengl上下文。此上下文必须与窗口句柄相关。我可以通过JNI将由java创建的窗口句柄传递给OpenGL API。或者使用jogl
初始化opengl环境。
答案 0 :(得分:1)
JNI是在java中运行本机代码的唯一方法,可用于加载特殊生成的共享库(windows中的.dll,linux / android上的.so)并调用在该库中声明的本机函数。如果你想在c中编写你的后端,你必须在c中创建一个共享库,其中包含一些启动代码的功能,比如说:
void init(void)
{
...
}
然后是另一个看起来像这样的函数:
void setWindowHandle(void* handle)
{
...
}
然后你可以调用第一个函数从java启动你的c代码,并使用你的第二个函数将句柄传递给你的c代码。
除了JNI,它需要导入某些自动生成的头文件,并且要求你在java类型之间来回转换,我强烈建议使用JNA链接到这个共享库。 JNA是一个围绕JNI的包装器API,它处理类型转换,并且不要求你在c中包含任何java环境代码。
最后,为了简化和兼容您的代码,我建议使用JOGL(标准java的opengl绑定)或作为部分提供的java opengl绑定在java中编写opengl接口代码如果这个代码是一个Android设备的android api。您可能认为c更快且应该使用,但就与opengl的接口而言,唯一真正计算密集的代码是由图形卡完成的,而所有opengl接口代码所要做的就是告诉它是什么画画。