我正在为Android构建一个简单的动态壁纸。我使用下面的代码将所需的纹理上传到OpenGL ES 2.0中。我已将所有图像加载到一个大小为2048x2048的文件中。下面的代码需要大约900到1200毫秒才能加载纹理。这是正常的时间还是我做错了让它变慢?
每次在渲染器中调用onSurfaceCreated时,我也会尝试清除Opengl中的纹理列表。这是正确的,还是有办法简单检查先前加载的纹理是否已经在内存中,如果是这样,请避免清除和重新加载?请告诉我你对此的评论。谢谢。
同样在屏幕方向更改时,将调用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;
}
答案 0 :(得分:3)
有几种方法可以提高效果。
onSurfaceChanged
时都不要加载纹理。将textureId
初始化为-1(在渲染器的构造函数/ surfaceCreated中),如果您有不同的ID,请在onSurfaceChanged
的开头检查。当您拨打glGenTextures
时,您将获得一个正数。GLES20.glGenerateMipMap(GLES20.GL_TEXTURE_2D);