私はOpenGL ES 2.0を使用してAndroidでライブ壁紙を作成していますが、実際にはスペースに浮かぶテクスチャ付きの四角形です。私の問題は、何らかの理由でこれらのテクスチャをロードすると、リモートで妥当なものより多くのメモリを消費していることです。私の最大の画像は2078 kbで、私は約6〜7 MBの画像しか読み込みません。設定 - >開発者オプション - >実行中のサービスデータによれば、私のアプリは1.3 GBのメモリを使用しています。Android OpenGLの読み込みテクスチャは膨大な量のメモリを奪います
テクスチャの読み込みを取り除くと、問題は消えてしまいます(33MBのメモリ)、実際にテクスチャを描画するかどうかは問題にはならないようです。
Bitmap bmp = sceneSetter.getTexture(DataCodes.ROOM, DataCodes.FOUR_EIGHTY_P, DataCodes.BLUR_NONE);
// Bind texture to texturename
GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[0]);
// Set filtering
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
//clamp texture to edge of shape
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
//texture 1
bmp = sceneSetter.getTexture(DataCodes.GIRL, DataCodes.FOUR_EIGHTY_P, DataCodes.BLUR_NONE);
GLES20.glActiveTexture(GLES20.GL_TEXTURE1);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, texturenames[1]);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE);
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bmp, 0);
最後に、これを続く:
:bmp.recycle();
sceneSetterは、このようなリソースからビットマップを取得し、私は私のテクスチャローディングコードの
コードスニペットがあれば全くわからないんだけど
bmp = BitmapFactory.decodeResource(context.getResources(), R.drawable.testimage);
編集:私はこれをSamsung S7でテストしていますが、Xperia Z3コンパイラで実行したときそれだけでは154 MBのメモリが必要です。これはまだ多いですが、S7が使用している1.3GBよりも大幅に少なくなっています。
ピクセル単位の画像のサイズは? –
私は様々な画像サイズの複数の画像を持っています。私は1920 x 942,1191 x 892、682 x 920などを持っています。 –