【问题标题】:Can I pass java window handle to OpenGL-es我可以将 java 窗口句柄传递给 OpenGL-es
【发布时间】:2013-01-15 08:41:55
【问题描述】:

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

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

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

【问题讨论】:

  • 否 - Java 不提供您正在寻找的信息......但是,您可以使用 JNI/JNA 之类的东西来尝试找到句柄,这取决于您的工作量真的很想去,或者你可以看看 OpenGL 的开源绑定之一

标签: java android-ndk java-native-interface opengl-es-2.0


【解决方案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 中包含任何 java 环境代码。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    • 2013-10-24
    • 2013-01-11
    相关资源
    最近更新 更多