初始化代码创建一个128x128像素的RGB单色纹理:

GLES20.glGenTextures ( 1, textureId, 0 );
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );
GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );|
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );

初始化后,我具有适当的纹理,并且一切正常。稍加调整,我必须对纹理进行一些更改,甚至将其完全替换为其他图像:
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, textureId[0] );
GLES20.glTexImage2D ( GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGB, bitmap.getWidth(), bitmap.getHeight(), 0,GLES20.GL_RGB, GLES20.GL_UNSIGNED_BYTE, byteBuffer );|
GLES20.glBindTexture ( GLES20.GL_TEXTURE_2D, 0 );

但是glTexImage2D不会对纹理进行任何更改,也不会返回任何错误。但是此代码在我的iOS项目中可以正常工作,但在android情况下则不能。看来我不能在相同的纹理下使用glTexImage2D(..)两次,换句话说,修改我的纹理的唯一方法是创建新纹理并删除旧纹理,但是为什么它可以在iOS中正常工作?我的代码有什么问题?

最佳答案

对不起,那是我的错。我试图从其他线程(而不是GL线程)调用glTexImage2D函数。现在一切正常。

10-08 17:20