0

我正在使用 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"/>

但它也没有用。

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

4

2 回答 2

1

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

于 2012-01-14T11:10:23.503 回答
0

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

于 2015-04-21T01:24:01.893 回答