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

我可以将java窗口句柄传递给OpenGL es吗,java,android-ndk,java-native-interface,opengl-es-2.0,Java,Android Ndk,Java Native Interface,Opengl Es 2.0,我想用Java+OpenGL(c版本)进行开发 使用java设计UI 使用OpenGL es(c版本)在UI上渲染图像 我知道如果我想用Java+C开发,我需要JNI。因为我必须首先创建opengl上下文。并且该上下文必须与窗口句柄相关。我可以通过JNI将java创建的窗口句柄传递给OpenGLAPI吗。或者使用jogl初始化opengl环境 JNI是在java中运行本机代码的唯一方法,可用于加载一个专门生成的共享库(.dll,在windows中是如此,在linux/android上也是如此),

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

  • 使用java设计UI
  • 使用OpenGL es(c版本)在UI上渲染图像
    我知道如果我想用
    Java+C
    开发,我需要JNI。因为我必须首先创建opengl上下文。并且该上下文必须与窗口句柄相关。我可以通过JNI将java创建的窗口句柄传递给OpenGLAPI吗。或者使用
    jogl
    初始化opengl环境

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

    void init(void)
    {
     ...
    }
    
    然后是另一个类似这样的函数:

    void setWindowHandle(void* handle)
    {
     ...
    }
    
    然后可以调用第一个函数从java启动c代码,并使用第二个函数从java将句柄传递给c代码

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


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

    否-Java不提供您要查找的信息…但是,您可能可以使用类似JNI/JNA的工具来尝试查找句柄,这取决于您真正想做多少工作,或者您可以查看OpenGL的开源绑定