2

AndEngine でゲームを開発しています。私は Android 用にやっていて、テクスチャの品質を犠牲にすることなくできるだけ多くのデバイスをカバーしたいので、HD と LOW の 2 つのテクスチャ パック タイプがあります。

  • HD テクスチャ = 2048x2048
  • 低テクスチャ = 1024x1024
  • HD カメラ = 800x1280
  • 低カメラ = 400x640

HD テクスチャ パックまたは LOW テクスチャ パックをセットアップするすべてのロジックを作成しました。今必要なのは、アプリの起動時に使用するウィッチを選択するための適切なポリシーです。

AndEngine の使用:

GLState state = new GLState();
int max = state.getInteger(GLES20.GL_MAX_...);

私はいくつかの値に出くわしました:

モデル: Samsung Note 8、Sony XPERIA U
GL_MAX_TEXTURE_SIZE: 4096
GL_MAX_TEXTURE_IMAGE_UNITS: 8
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 8

モデル: Samsung Galaxy Mini、Samsung S3 Mini、HTC One S
GL_MAX_TEXTURE_SIZE: 4096
GL_MAX_TEXTURE_IMAGE_UNITS: 16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 20

モデル: Samsung S4、Nexus4、XPERIA Z1
GL_MAX_TEXTURE_SIZE: 4096
GL_MAX_TEXTURE_IMAGE_UNITS: 16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 32

このopenGL ドキュメントでは、それぞれの定数の意味を見つけることができましたが、ここで少し迷っています。テクスチャとカメラの適切なセットアップを選択するためにこのデータを使用する方法がわかりません。

あなたの助けとヒントが必要です。私は正しい道を進んでいますか? この情報で次に何をすればよいですか?
御時間ありがとうございます。

4

2 に答える 2

1

利用可能なメモリをチェックするのに役立つかもしれない別のテスト ケースを見つけました。

        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        ActivityManager activityManager = (ActivityManager) context.getSystemService(context.ACTIVITY_SERVICE);
        activityManager.getMemoryInfo(mi);
        long availableMegs = mi.availMem / 1048576L;

これまでのところ、私のテストケースは次のとおりです。

if (IS_TABLET7 || IS_TABLET10) {
    useHIGH &= smallestWidthSize >= TABLET_MAX_SMALLEST_WIDTH;
} else {
    useHIGH &= smallestWidthSize >= SMARTPHONE_MAX_SMALLEST_WIDTH;
}

Log.i(C.TAG, "=========SCREEN DIMENSIONS=========");
Log.i(C.TAG, "Screen Size Info: smallestWidthSize = " + smallestWidthSize);
Log.i(C.TAG, "Screen Size Info: smallestWidthSize >= MAX_SMALLEST_WIDTH (" + (IS_TABLET ? TABLET_MAX_SMALLEST_WIDTH : SMARTPHONE_MAX_SMALLEST_WIDTH) + ")? " + useHIGH);
Log.i(C.TAG, "Screen Size Info: should use Texture Type > " + (useHIGH ? "HIGH" : "LOW"));


useHIGH &= availableMegs > MIN_RAM_LIMIT;
Log.i(C.TAG, "=========AVAILABLE RAM=========");
Log.i(C.TAG, "Memory Info: available RAM = " + availableMegs + "Mb");
Log.i(C.TAG, "Memory Info: available RAM > MIN_RAM_LIMIT(" + MIN_RAM_LIMIT + "Mb)? " + useHIGH);
Log.i(C.TAG, "Memory Info: should use Texture Type > " + (useHIGH ? "HIGH" : "LOW"));

上で述べたように、適切な解決策が得られるまで、この投稿を常に最新の状態に保ちます。

于 2014-07-25T17:05:19.110 に答える