我正在使用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"/>
但它也没有用。
有谁知道解决方案可能是什么?或者我可以看哪里?
答案 0 :(得分:1)
问题只是一个线程问题。所有openGL调用都必须在同一个线程中完成。否则,这会导致像这样的奇怪行为,甚至更糟。
答案 1 :(得分:0)
Dirk的建议解决了我的问题。这是线程上下文。