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

时间:2012-01-06 16:41:22

标签: android-ndk android-manifest opengl-es-2.0 glreadpixels

我正在使用android ndk编写游戏。我使用pick来选择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_BYTE的组合。

我已经阅读了一些关于我必须在Android清单中设置的权限的内容。 我试图添加这样的权限:

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

但它也没有用。

有谁知道解决方案可能是什么?或者我可以看哪里?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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