2012-02-13 14 views
13

私はAndroid上に2D/3Dの混合ゲームを作成しています。使用できるテクスチャメモリの量を判断できません。 OpenGL ESの最大テクスチャメモリを決める方法はありますか?Android OpenGL ESの最大テクスチャメモリを決定する方法

私は自分のテクスチャキャッシュを持っており、テクスチャメモリの最大しきい値を知りたいと思っています。私はactivityManager.getMemoryInfo(mi)を使用して概算を行っていますが、テクスチャを割り当てようとするときにデバイスによっては(すでに多くのメモリが存在しています)、アプリケーションがクラッシュします(EGL_BAD_ALLOC)。このしきい値を低い値に設定すると、すべてが正常であるように見えます。誰にも分かりますか?または、最終的に、クラッシュする代わりにテクスチャ割り当てが失敗したと判断する方法。

答えて

4

利用可能なVRAM(ビデオRAM)の量を知っているようです。 The question has already been partially answered.

VRAMの量は、どれくらいのテクスチャが収まるかを決めるものではありません。これらのものは圧縮することができ、VRAMの量は別のアプリケーションによって変わる可能性があります。ビデオドライバが使用します。

方法1

From this topic、あなたはテクスチャユニットの最大量を得ることができます。することができます少なくともフィットmaxSize[0]²×、論理的に、そう

int[] maxNum = new int[1]; 
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, maxNum, 0); 

int[] maxSize = new int[1]; 
gl.glGetIntegerv(GL10.GL_MAX_TEXTURE_SIZE, maxSize, 0); 

And from this other one、あなたは最大テクスチャサイズを取得することができます。それは同時にバインドすることができ、最大数を意味し、 VRAM内のピクセルmaxNum[0]が問題なく表示されます。 VRAMの領域が不足しても、グラフィックスドライバはそれを管理します(かもしれません。には飢えた場合のアプリケーションクラッシュが含まれています)。

とにかく、VRAMの量や使用可能なピクセルに応じて、テクスチャのサイズを調整することはおそらくありません。それは可能ですが、有益ではなく、移植性があり、正しく実装するのは難しいです。 これを行うには方法良い方法があります:

方法2

99%の時間は、グラフィックスチップ上のVRAMのAMOUTは、画面サイズに比例しています。従って、use the screen's DPI (ldpi, mdpi, hdpi, xhdpi)は、ロードするテクスチャのバージョン(サイズ)(異なる(実際の)デバイスで実験する)を決定するので、「そのデバイスに適合しますか?

関連する問題