有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

安卓 ndk我可以将java窗口句柄传递给OpenGLes吗

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    JNI是在java中运行本机代码的唯一方法,可用于加载一个专门生成的共享库(.dll,在windows中是如此,在linux/android上也是如此),并调用该库中声明的本机函数。如果你想用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 api一部分提供的java opengl绑定,用java编写opengl接口代码(如果该代码是针对android设备的)。你可能认为c要快得多,应该被使用,但就与opengl的接口而言,唯一真正计算密集的代码是由图形卡完成的,opengl接口代码所要做的就是告诉它要画什么