Android ndk 来自屏幕外缓冲区的Android NDK glReadPixels()

Android ndk 来自屏幕外缓冲区的Android NDK glReadPixels(),android-ndk,android-manifest,opengl-es-2.0,glreadpixels,Android Ndk,Android Manifest,Opengl Es 2.0,Glreadpixels,我正在用android ndk写一个游戏。我正在使用拾取在opengl中选择对象。 为此,我有一个屏幕外帧缓冲区对象,在其中渲染,并使用glReadPixels()从FBO获取颜色。然后,颜色对单击对象的id进行编码 问题是glReadPixels()不起作用。它只是不读取任何颜色值。 有什么我必须做的,让它工作吗 GLubyte pixel[4] = {0,0,0,0}; glReadPixels(x, y , 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (voi

我正在用android ndk写一个游戏。我正在使用拾取在opengl中选择对象。 为此,我有一个屏幕外帧缓冲区对象,在其中渲染,并使用glReadPixels()从FBO获取颜色。然后,颜色对单击对象的id进行编码

问题是glReadPixels()不起作用。它只是不读取任何颜色值。 有什么我必须做的,让它工作吗

  GLubyte pixel[4] = {0,0,0,0};
  glReadPixels(x, y , 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void *)pixel);
这就是我尝试使用readpixels的方式。但结果总是(0,0,0,0)。 我检查了坐标(x,y)。他们很好。根据opengl文档,任何opengl es 2.0实现都应该支持GL_RGBA、GL_UNSIGNED_字节的组合

我已经阅读了一些关于我必须在android清单中设置的权限的内容。 我尝试添加如下权限:

    <uses-permission android:name="android.permission.READ_FRAME_BUFFER"/>

但它也不起作用


有人知道解决办法是什么吗?或者在哪里可以查看?

问题只是线程问题。所有openGL调用都必须在同一个线程中完成。否则,这可能会导致像这样的怪异行为,甚至更糟。

德克的建议解决了我的问题。这是线程上下文