android - 如何在OpenGL中连续显示位图

标签 android opengl-es bitmap glsurfaceview

我一直在遵循本指南在 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 上移动一些其他操作吗?

最佳答案

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

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

关于android - 如何在OpenGL中连续显示位图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10821174/

相关文章:

android - Android 版 Facebook SDK 中的 "Facebook cannot be resolved to a type"

android - 如何从一个 Activity 调用非静态方法到另一个 Activity

android - float 操作按钮中的加号图标在 Android pre-Lollipop 中未正确呈现

java - 面剔除 - 隐藏立方体中所有非正面的面

c# - 如何以十六进制颜色在图形对象上绘制实心圆?

c - 为什么32bit的内存只需要1bit的map

python - 如何使用 PIL 在 python 中分析位图图像?

java - 不同行的 ListView 自定义适配器

android - opengl 是否会更快地将大网格渲染成较小的三角形?

c - 嵌套模板 - OpenGL ES