我正在使用 Android NDK 制作一个 OpenGLES Android 应用程序,从 android 的 gljni 示例扩展,可以找到 here
它使用 GLSurfaceView。纹理在 GLSurfaceView.Renderer 的 onSurfaceChanged() 调用的 JNI 函数中初始化
当用户触摸屏幕时,应用程序需要更多纹理。为此,在 onTouchEvent() 中调用的 JNI 函数中调用 glGenTextures()。
问题在于线程 ID(gettid() 返回的)似乎完全是任意的,并且并不总是与具有 OpenGL 上下文的线程 ID 相同。
如果在同一线程中调用 JNI 函数,它会加载并显示纹理,但如果在另一个线程上调用,则会失败。所以它的行为相当随机。
我可以做这样的事情:
共享 OpenGL 上下文,以便我可以在任何线程上成功调用 glGenTextures()。
仅在一个具有 OpenGl 上下文的线程中调用 onTouchEvent()
或者任何我可以让它工作的东西
?
谢谢
最佳答案
这不是随机行为,这就是 OpenGL 与线程交互的方式。上下文仅在一个线程上有效,其他线程没有 GL 上下文,除非您专门为要与 OpenGL 一起使用的每个线程创建一个上下文。如果没有上下文,所有 GL 调用都会失败。
关于android - 无法在多线程 Android 应用程序上调用 glGenTextures,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3527878/