我一直在按照本指南在OpenGL中显示位图
然而,我有一个Bitmaps队列,我想逐个显示。
我是否应该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
或者我可以以某种方式只做部分操作在{{1}}移动其他操作吗?
答案 0 :(得分:2)
如果你想用另一个纹理替换纹理(并且你无意保留第一个纹理),那么第二次调用glTexImage2D
或GLUtils.texImage2D
是你唯一需要做的事情。通过。这只是用新数据替换现有纹理数据。您可以从具有有效OpenGL上下文的任何地方调用此方法。
如果纹理大小相同,我建议使用glTexSubImage2D
会有所改进,因为它不会改变纹理大小,然后可能会避免在gpu上进行一些内存分配(只需重用相同的支持)记忆)。