如何在OpenGL中连续显示位图

时间:2012-05-30 17:22:46

标签: android opengl-es bitmap glsurfaceview

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

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

然而,我有一个Bitmaps队列,我想逐个显示。

我是否应该onDrawFrame每次BitmaponDrawFrame创建一个新纹理作为队列的头像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

或者我可以以某种方式只做部分操作在{{1}}移动其他操作吗?

1 个答案:

答案 0 :(得分:2)

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

如果纹理大小相同,我建议使用glTexSubImage2D会有所改进,因为它不会改变纹理大小,然后可能会避免在gpu上进行一些内存分配(只需重用相同的支持)记忆)。