我正在尝试制作一个使用多种纹理的openGL动态壁纸。其中一些是非常大的全屏图像。
我不确定如何加载位图和绑定纹理。例如,我可以在onSurfaceCreated()
方法中加载它们:
public void onSurfaceCreated(GL10 gl, EGLConfig config){
...
Bitmap background = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.background, null);
gl.glGenTextures(1, backgroundTextureArray, 0);
gl.glBindTexture(GL10.GL_TEXTURE_2D, backgroundTextureArray[0]);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
GLUtils.texImage2D(GL10.GL_TEXTURE_2D,0, background,0);
}
然而,我相信这意味着每次壁纸变得可见时,它都必须再次将图像加载到内存中。考虑到壁纸经常进出视图,这似乎不是一个好主意。
还有另一种设置纹理的方法吗?我不确定程序运行时会发生什么,需要额外的内存。如果可以杀死LWP,那么也许我可以在壁纸服务还活着时永久存储位图?