我一直在遵循本指南在 OpenGL 中显示位图
但是,我有一个位图队列,我想将其一一显示。
我是否应该每次在 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
上移动一些其他操作吗?
最佳答案
如果您想用另一个纹理替换一个纹理(并且您无意保留第一个纹理),那么调用 glTexImage2D
或 GLUtils.texImage2D
是唯一的方法你第二次需要做的事情。这只是用新数据替换现有的纹理数据。您可以从任何有有效 OpenGL 上下文的地方调用它。
如果纹理大小相同,我可能建议使用 glTexSubImage2D
会有所改进,因为它不会改变纹理大小,然后可能会避免 GPU 上的一些内存分配(只是重用相同的后备存储器)。
关于android - 如何在OpenGL中连续显示位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821174/