OpenGL でテクスチャ メモリをクリアすると、この問題が発生します。OpenGL を使用して Android でゲームを作成しています。すべてがうまく機能しますが、アプリの起動時にすべてのテクスチャをメモリにロードしています。私は明らかにゲームの速度を遅くしています.512x512サイズの10個のアニメーションフレームと環境テクスチャを備えた12匹のモンスターがいます.
私がやりたいのは、テクスチャ メモリをクリアし、現在のレベルの開始時に必要なテクスチャをロードする関数 onLoadLevel(int level) です。
問題は、OpenGL でテクスチャ メモリをクリアする方法です。2 つのオプションについて考えます 1 - すべてをクリア - メモリ内のすべてのテクスチャを削除し、現在のレベルに必要なものをすべてロード - ただし、このレベルのテクスチャのみ - 遅くなりますが、簡単に実行できると思いますか? テクスチャメモリをリセットするだけですか?2 - もう必要ないテクスチャだけを削除し、次のテクスチャをロードします。
今のところ、この両方を行う方法はわかりません-メモリからすべてのテクスチャを一度にクリアする方法、またはメモリから1つだけを削除する方法-または可能であれば-いくつかの解決策を見てきましたが、テクスチャ ID が何かわからないので、問題と思われるテクスチャ ID を指すことについてでしたか?
テクスチャの読み込みプロセスをどのように行うかを以下に示します。
public int mTextureDataHandleSample1;
//then I use loadTexture function from my TextureHelper class
mTextureDataHandleSample1 = TextureHelper.loadTexture(mActivityContext, R.drawable.sample1);
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
loadTexture 関数は次のようになります。
public static int loadTexture(final Context context, final int resourceId)
{
final int[] textureHandle = new int[1];
GLES20.glGenTextures(1, textureHandle, 0);
if (textureHandle[0] != 0)
{
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inScaled = false; // No pre-scaling
// Read in the resource
final Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), resourceId, options);
// Bind to the texture in OpenGL
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureHandle[0]);
// Set filtering
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
// Load the bitmap into the bound texture.
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
// Recycle the bitmap, since its data has been loaded into OpenGL.
bitmap.recycle();
}
if (textureHandle[0] == 0)
{
throw new RuntimeException("Error loading texture.");
}
return textureHandle[0];
}
したがって、テクスチャ メモリをクリアする方法、または以前にメモリにロードされたテクスチャの一部だけを削除する方法を教えていただければ、または少なくとも解決策を教えていただければ幸いです。