在OpenglES2[Android]中使用glTexImage2D(.)更新纹理



初始化代码创建一个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中能正常工作?我的代码出了什么问题?

对不起,那是我的错。我尝试从其他线程调用glTexImage2D函数(而不是从GL线程)。现在一切都很完美。

我认为glTexImage2D()用于定义纹理,glTexSubImage2D(。

您可能只需要切换到glTexSubImage2D()即可更新纹理。

最新更新