【问题标题】:Is it possible to make OpenGL ES calls from your C++ and Java code?是否可以从您的 C++ 和 Java 代码进行 OpenGL ES 调用?
【发布时间】:2015-02-15 09:23:49
【问题描述】:

我有一个应用程序,它将利用 NDK 来满足高图形要求和一个我用 C++ 编写的地形生成库。我的问题是,如果我已经使用 SDK 制作了我的 GUI,并且我在 java 中进行了随机 opengl 调用,例如 GLES20.glEnable(GL_CULL_FACE);,然后继续通过 JNI 在 C++ 中调用 glEnable(GL_DEPTH_TEST);,会有任何已知的错误/构建问题吗?如果有人想知道我为什么要问这个和/或认为这是一个愚蠢的问题,那是因为在桌面 OpenGL 中有一个现有的 OpenGL context(尽管 GLFW 处理了大部分)。我担心 OpenGL ES 是否也有一个现有的context如果是这样,来自 java 和 C++ 的 OpenGL ES 调用是否会写入前面提到的 context

【问题讨论】:

标签: java android c++ opengl-es


【解决方案1】:

在 OpenGL 中,您总是在处理上下文,是的。对您来说关键部分是

  • 您的 OpenGL 上下文何时以及如何绑定到 Java 部分?
  • 是调用本机代码时保持最新的 OpenGL 上下文。

几乎所有对 OpenGL 的 Java 调用都会以任何方式进入本机代码。因此,如果您使用 NDK 编写程序的某些部分,并以与直接调用 OpenGL 相同的方式调用这些部分,那么 OpenGL 上下文将是当前可用的。

【讨论】:

    【解决方案2】:

    直接的答案是是的,但你必须小心你如何编写你的 C++ 和 Java 代码

    • NDK 提供部分NativeActivitynative_app_glue 代码,帮助您编写纯C++ 代码进行游戏逻辑、渲染等,并最大限度地减少编写Java 代码的需求。如果您使用这种方式,您会发现一些入口点函数,例如android_main()。在这种情况下,您不能在同一上下文中混合调用 Java 和 C++ 代码中的 OpenGL,因为您的本机代码在不同的线程中运行,并通过管道与 Java 线程 [Dalvik VM 线程] 进行通信
    • 通过JNI调用Java中的native函数,这将在同一个线程,同一个上下文中,在Java或C++中调用OpenGL API应该没有区别,就像@datenwolf的回答一样

    希望对你有帮助~

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 1970-01-01
      相关资源
      最近更新 更多