是否可以使用 LWJGL 将 C++ OpenGL 代码与 Java 混合?

我想做Java应用程序。使用 CEF3 库。CEF 是在任何应用程序中嵌入 Google Chrome 浏览器的库。而 LWJGL 用于用 Java 编写 GL 代码。但在使用 CEF 之前,基本问题是如何混合 C++ 和 Java。

  1. Java main 将 C++ 部分调用为 DLL

  2. C++ 部分创建窗口并设置 GL 上下文

  3. 在消息循环中,C++ 再次回调 Java 部分以在 Java 中进行一些 GL 工作。

以下测试代码失败并显示消息:

本机方法中的致命错误:线程 [main,5,main]:没有当前上下文或调用了当前上下文中不可用的函数。JVM 将中止执行。
在 org.lwjgl.opengl.GL11.glColor3f(Native Method)
在 Main.run(Main.java:18)
在 Main.cppmain(Native Method)
在 Main.main(Main.java:10)

可能是因为 Java 部分不知道 C++ 部分创建的 GL 上下文。我的问题是如何设置 GL 上下文以便 C++ 和 Java 都可以调用 GL 函数?


主.java

import org.lwjgl.opengl.GL11;


public class Main implements Runnable {

    {

        System.loadLibrary("cppgl");

    }


    public static void main(String[] args) {

        Main me = new Main();

        me.cppmain(me);

    }


    private native void cppmain(Runnable callback);


    @Override

    public void run() {

        // callback from cpp

        GL11.glColor3f(1.0f, 0.0f, 1.0f);

    }

}


沧海一幻觉
浏览 133回答 1
1回答

杨__羊羊

在从 java 进行任何渲染之前,您应该在开始时调用一次。    // This line is critical for LWJGL's interoperation with GLFW's    // OpenGL context, or any context that is managed externally.    // LWJGL detects the context that is current in the current thread,    // creates the GLCapabilities instance and makes the OpenGL    // bindings available for use.    GL.createCapabilities();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java