gpt4 book ai didi

java - 我可以将 java 窗口句柄传递给 OpenGL-es

转载 作者:行者123 更新时间:2023-12-01 14:55:39 28 4
gpt4 key购买 nike

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

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

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

最佳答案

JNI 是在 Java 中运行 native 代码的唯一方法,可用于加载专门生成的共享库(Windows 中为 .dll,Linux/Android 上为 .so)并调用该库中声明的 native 函数。如果你想用 c 语言编写后端,你必须用 c 语言创建一个共享库,其中包含一些用于启动代码的函数,例如:

void init(void)
{
...
}

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

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

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

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

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

关于java - 我可以将 java 窗口句柄传递给 OpenGL-es,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14333924/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com