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

时间:2012-07-23 05:58:41

标签: android opengl-es-2.0

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

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

我认为 glTexImage2D()用于定义纹理, glTexSubImage2D()用于重新定义/更新纹理。

你可能只需要切换到glTexSubImage2D()来进行纹理更新。