0

我想用 Java + OpenGL(c 版本)进行开发。

  1. 使用java设计UI。
  2. 使用 OpenGL-es(c 版本) 在 UI 上渲染图像。

我知道如果我想开发Java + C,我需要 JNI。因为我必须先创建 opengl 上下文。并且这个上下文必须与一个窗口句柄相关。我可以将由 java 创建的窗口句柄传递给 JNI 的 OpenGL API。或用于jogl初始化 opengl 环境。

4

1 回答 1

1

JNI 是在 java 中运行本机代码的唯一方法,可用于加载专门生成的共享库(windows 中的 .dll,linux/android 中的 .so)并调用在该库中声明的本机函数。如果您想用 c 编写后端,则必须在 c 中创建一个共享库,其中包含一些用于启动代码的功能,例如:

void init(void)
{
 ...
}

然后是另一个看起来像这样的函数:

void setWindowHandle(void* handle)
{
 ...
}

然后,您可以调用第一个函数从 java 启动您的 c 代码,并使用您的第二个函数将句柄从 java 传递给您的 c 代码。

除了 JNI 需要导入某些自动生成的头文件,并且需要您在 java 类型之间来回切换,我强烈建议使用JNA来链接到这个共享库。JNA 是围绕 JNI 的包装 API,它处理类型转换,并且不需要您在 c.c 中包含任何 java 环境代码。

最后一点,为了代码的简单性和兼容性,我建议使用JOGL(标准 java 的 opengl 绑定)在 java 中编写 opengl 接口代码,或者如果此代码作为 android api 的一部分提供的 java opengl 绑定适用于安卓设备。你可能认为 c 更快,应该使用,但就与 opengl 的接口而言,唯一真正计算密集的代码是由显卡完成的,所有 opengl 接口代码所要做的就是告诉它什么画。

于 2013-01-15T16:35:33.513 回答