【发布时间】:2011-12-13 03:07:28
【问题描述】:
我正在为 Android 构建一个简单的动态壁纸。我正在使用以下代码将所需的纹理上传到 OpenGL ES 2.0。我已将所有图像加载到大小为 2048x2048 的单个文件中。下面的代码大约需要 900 到 1200 毫秒来加载纹理。这是正常时间还是我做错了什么让它变慢?
每次在渲染器中调用 onSurfaceCreated 时,我也会尝试清除 Opengl 中的纹理列表。这是正确的做法,还是有一种方法可以简单地检查先前加载的纹理是否已经在内存中,如果是,则避免清除和重新加载?请让我知道你的cmets。谢谢。
在屏幕方向改变时也会调用 OnSurfaceCreated。所以纹理上传再次发生。这不是一个好主意。解决方法是什么?
public int addTexture(Bitmap texture) {
int bitmapFormat = texture.getConfig() == Config.ARGB_8888 ? GLES20.GL_RGBA : GLES20.GL_RGB;
int[] textures = new int[1];
GLES20.glGenTextures(1, textures, 0);
int textureId = textures[0];
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmapFormat, texture, 0);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_REPEAT);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_REPEAT);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
return textureId;
}
【问题讨论】:
标签: android opengl-es textures opengl-es-2.0