我可以在2个OpenGL上下文Android之间共享外部纹理

时间:2015-08-12 01:06:06

标签: java android c++ multithreading opengl-es

我正在创建2个帖子。每个线程都有自己的EGL上下文。 一个线程是本机的,我将渲染到纹理,另一个线程是Java,我想从该纹理中采样并渲染到屏幕/编码器(无关紧要)。 我不能让它发挥作用。 我已经尝试在任一线程上生成纹理。我注意到的是纹理ID在两个线程上都是重复的(我有其他不需要共享的纹理)。

我的问题是,是否可以在2个线程(和上下文)之间共享纹理?

编辑:解决方案

感谢Andon和一些谷歌搜索,我能够让它发挥作用。我在第一个线程上用Java创建了一个上下文,而在C ++中用eglGetCurrentContext()来获取EGLContext。后来,我在第二个线程上用C ++创建了第二个上下文:

eglCreateContext(mEglDisplay, mEglConfig, sharedContext, contextAttribs);

其中sharedContext是第一个上下文。

1 个答案:

答案 0 :(得分:1)

是的,可以在上下文之间共享资源。

但共享上下文中的命令流不同步;如果你在一个线程中上传数据并在另一个线程中使用它,你必须格外小心,实际上先完成上传(glFinish (...)后跟你自己的某个同步结构,就像信号量一样)。

现在,百万美元的问题 - 你对这些背景的创造有任何控制吗?这是在EGL中进行资源共享所必需的。你只需要自己创造一个;如果你已经给了另一个,你可以在创建第二个时使用它作为你的共享上下文。