1

我一直在按照本指南在 OpenGL 中显示位图

http://obviam.net/index.php/texture-mapping-opengl-android-displaying-images-using-opengl-and-squares/

但是,我有一个要一个一个显示的位图队列。

我是否应该每次都创建一个新的纹理onDrawFrame作为Bitmap队列的头部,例如onDrawFrame

Bitmap bitmap = ...

// generate one texture pointer
gl.glGenTextures(1, textures, 0);
// ...and bind it to our array
gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

// create nearest filtered texture
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

// Use Android GLUtils to specify a two-dimensional texture image from our bitmap
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

// Clean up
bitmap.recycle();

或者我可以以某种方式只做这些操作的一部分,onSurfaceChanged可能会转移一些其他操作吗?

4

1 回答 1

2

如果你想用另一个纹理替换一个纹理(并且你不打算保留第一个纹理),那么调用glTexImage2DorGLUtils.texImage2D是你第二次需要做的唯一事情。这只是用新数据替换现有纹理数据。您可以从任何有有效 OpenGL 上下文的地方调用它。

如果纹理大小相同,我可能会建议使用glTexSubImage2D将是一种改进,因为它不会改变纹理大小,然后可能会避免在 gpu 上分配一些内存(只是重用相同的后备内存)。

于 2012-05-30T17:51:41.833 回答