GL最大纹理大小策略 [英] GL Maximum Textures Size Policy

查看:200
本文介绍了GL最大纹理大小策略的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在用AndEngine开发游戏.由于我是在Android平台上使用的,因此我希望覆盖尽可能多的设备而不会影响纹理质量,因此我有2种纹理包类型:HD和LOW:

I'm developing a game with AndEngine. Since I'm doing it for Android and I want to cover as many devices as possible without the textures quality trade off I have 2 texture packs types: the HD and the LOW:

  • 高清纹理= 2048x2048
  • 低纹理= 1024x1024
  • 高清摄像头= 800x1280
  • 低摄相机= 400x640

我已经制定了设置HD纹理包或LOW纹理包的所有逻辑,现在我需要的是选择启动应用程序时使用的巫婆的好策略.

I've have made all the logic of setting up a HD texture pack or a LOW texture pack, what I need now is a good policy for choosing witch to use when the app starts up.

使用AndEngine:

Using AndEngine's:

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

Model: Samsung Note 8, Sony XPERIA U
GL_MAX_TEXTURE_SIZE: 4096
GL_MAX_TEXTURE_IMAGE_UNITS: 8
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 8

型号:三星Galaxy Mini,三星S3 Mini,HTC One S
GL_MAX_TEXTURE_SIZE:4096
GL_MAX_TEXTURE_IMAGE_UNITS:16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:20

Model: 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

型号:三星S4,Nexus4,XPERIA Z1
GL_MAX_TEXTURE_SIZE:4096
GL_MAX_TEXTURE_IMAGE_UNITS:16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:32

Model: Samsung S4, Nexus4, XPERIA Z1
GL_MAX_TEXTURE_SIZE: 4096
GL_MAX_TEXTURE_IMAGE_UNITS: 16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: 32

在此 openGL文档中,我可以找到每个常量的含义,但我在这里有点迷茫,我不知道如何使用这些数据来为我的纹理和相机选择正确的设置.

我需要您的帮助和提示,我走的路正确吗?接下来,我该怎么做?
谢谢您的宝贵时间.

In this openGL Docs I could find each constant meaning, but I'm a little lost here, I don't know how to use this data in order to choose the right setup for my textures and camera.

I need your help and tips, am I in the right path? What should I do next with this info?
Thanks for your time.

推荐答案

我遇到了另一个可能派上用场的测试用例,检查可用内存:

I came across another test case that may come in handy, checking for available memory:

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

到目前为止,我的测试用例是:

So far my test cases are:

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"));

如上所述,我将始终更新此帖子,直到找到一个好的解决方案为止.

As stated above I'll always keep this post updated until a good solid solution is reached.

这篇关于GL最大纹理大小策略的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆