java - 基于 SWIG 的 Java 接口(interface),适用于 OpenGL ES 2.0 和 EGL(适用于 SWT)

标签 java opengl-es swig jogl

我计划使用 SWIG 连接 OpenGL ES 2.0 公开的 native API。

我知道有 JOGL,但不知何故它有太多抽象、类和代码。

我想要的只是一个非常简单的 Java API 来与 OpenGL ES 2.0 和 EGL 应用程序交互。最后我的应用程序将使用 SWT。 SWIG 可用于使用 OpenGL ES 2.0 和 EGL 公开的 C API 生成 Java 接口(interface)。

对于 EGL,我只需提取 java 窗口的当前窗口句柄并将其传递给 EGL,这可以工作吗?

是否有人已经尝试过这个,或者它并不像看起来那么简单(这就是我们必须使用 JOGL 的原因)?

最佳答案

JOGL 的基本形式几乎只是 OpenGL 接口(interface)的薄包装。

当您开始查看缓冲区时,包装器中的事情会变得更加复杂。在 C OpenGL 接口(interface)中,这一切都由 void* 处理。在 Java 中,这根本没有意义 - 最接近的 Java 是 Object,但不能以这种方式使用。

... too many abstractions, classes and code.

在 C 语言中,我们说“只需获取这 block 内存,并将其用作顶点、法线和颜色的交错列表”,我们需要 Java 接口(interface)的额外支持,以允许我们灵活、高效地将类似的内容放入内存中。我怀疑这是您对大量抽象、类和代码的观察的根源。

在带有 JOGL 的 OpenGL 3.0 中,您可以直接简单地使用已弃用的固定功能立即模式,例如:

gl.glBegin(GL2.GL_QUADS);          
    gl.glColor3f(0.0f, 1.0f, 1.0f);   // set the color of the quad
    gl.glVertex3f(-1.0f, 1.0f, 0.0f);      // Top Left
    gl.glVertex3f( 1.0f, 1.0f, 0.0f);       // Top Right
    gl.glVertex3f( 1.0f,-1.0f, 0.0f);      // Bottom Right
    gl.glVertex3f(-1.0f,-1.0f, 0.0f);     // Bottom Left
gl.glEnd();       

在 OpenGL ES 中,固定功能的即时模式渲染内容根本不存在,因为它在运行 OpenGL ES 的设备类型上效率极其低下。因此,JOGL 与 OpenGL ES 的绑定(bind)中剩下的所有函数都需要 Java 中的复杂抽象才能使用,因为它们严重依赖于指向缓冲区的 void* 指针很难在 Java 中有意义地公开。

长话短说 - 如果您编写自己的 Java OpenGL ES 包装器,它不会比 JOGL 简单。 JOGL Java 的简单 OpenGL 包装器。

关于java - 基于 SWIG 的 Java 接口(interface),适用于 OpenGL ES 2.0 和 EGL(适用于 SWT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9312860/

相关文章:

opengl - 着色器中没有名称为 'u_proj' 的制服

c++ - SWIG:Lua - 将 C++ 实例作为 lua 函数参数传递

java - 使用 javax.validation.Validator 等时出现的问题

java - HashMap 与数组的比较

java - A<T extends B> 和 A< 有什么区别?延伸 B>?

java - 将Grails 2.x应用升级到Grails 3.2.9时出现问题

opengl-es - 使用模板测试时出现奇怪的错误

opengl-es - opengl制作许多纹理的2的幂

python - 在没有内存泄漏的情况下在 Python 中公开 STL 结构

python - 通过 SWIG 在 python 函数中使用 GList 数据类型