Android glGenTextures返回无效ID

Android glGenTextures返回无效ID,android,opengl-es,textures,Android,Opengl Es,Textures,我们为安卓开发了一款游戏,在很多设备上都能很好地运行。但是昨天我们在三星Galaxy Tab P1000上测试了这个游戏,发现了一个问题 glGenTextures函数返回无效ID,例如: 100271, 315638026, 534244737, 1505553220, -1563003837 这很奇怪。我们尝试在onSurfaceCreated和onDrawFrame函数中创建纹理,结果相同。如果我们用基于计数器的自己的实现替换glGenTextures函数,一切都会正常 有人知道发生了什么

我们为安卓开发了一款游戏,在很多设备上都能很好地运行。但是昨天我们在三星Galaxy Tab P1000上测试了这个游戏,发现了一个问题

glGenTextures函数返回无效ID,例如: 100271, 315638026, 534244737, 1505553220, -1563003837

这很奇怪。我们尝试在onSurfaceCreated和onDrawFrame函数中创建纹理,结果相同。如果我们用基于计数器的自己的实现替换glGenTextures函数,一切都会正常

有人知道发生了什么吗


如何解决这个问题?

为什么您认为这些ID无效


纹理ID是GLuint,即无符号的,所以这里肯定没有负数。而且OpenGL纹理ID不要求单调且密集。

为什么您认为这些ID是无效的


纹理ID是GLuint,即无符号的,所以这里肯定没有负数。OpenGL纹理ID不要求单调且密集。

我就是这样解决这个问题的:

IntBuffer t = IntBuffer.allocate(1);
gl.glGenTextures(1, t);
int texture_id = t.get(0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture_id);

或者,您可以通过创建静态int来实现自己的纹理计数器,并在每次创建纹理时增加它

我就是这样解决这个问题的:

IntBuffer t = IntBuffer.allocate(1);
gl.glGenTextures(1, t);
int texture_id = t.get(0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, texture_id);

或者,您可以通过创建静态int来实现自己的纹理计数器,并在每次创建纹理时增加它

我从未见过这样的ID,因此我决定它们是无效的。通常我会得到像0,1,2,3这样的ID。。。100多。所以你认为这个奇怪的ID是有效的,一切正常吗?我们的图形引擎无法处理这样的ID,并在第一个负ID时崩溃。是的,这是我们的问题,我们需要解决它。因此,我们将修复它,然后看看它是如何工作的。看起来你是对的,这只是不寻常的ID而已。是的,就OpenGL规范而言,那些“奇怪”的ID是有效的。正如我所说,对单调性和密度没有要求。实际上,我认为这些ID可能是某种散列(或者是指针,但那真的很疯狂)。不要对不透明句柄的形式做任何假设,比如OpenGL名称。我从未见过这样的ID,因此我认为它们是无效的。通常我会得到像0,1,2,3这样的ID。。。100多。所以你认为这个奇怪的ID是有效的,一切正常吗?我们的图形引擎无法处理这样的ID,并在第一个负ID时崩溃。是的,这是我们的问题,我们需要解决它。因此,我们将修复它,然后看看它是如何工作的。看起来你是对的,这只是不寻常的ID而已。是的,就OpenGL规范而言,那些“奇怪”的ID是有效的。正如我所说,对单调性和密度没有要求。实际上,我认为这些ID可能是某种散列(或者是指针,但那真的很疯狂)。永远不要对不透明句柄的形式做任何假设,比如OpenGL名称。对我来说,这听起来像是通向随机失败的道路,不明白为什么API会随机停止工作对我来说,这听起来像是通向随机失败的道路,不明白为什么API会随机停止工作