gpt4 book ai didi

android - GL 最大纹理大小策略

转载 作者:搜寻专家 更新时间:2023-11-01 08:55:26 24 4
gpt4 key购买 nike

我正在使用 AndEngine 开发一款游戏。因为我是为 Android 做的,我想在不影响纹理质量的情况下覆盖尽可能多的设备,所以我有 2 种纹理包类型:HD 和 LOW:

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

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

使用 AndEngine 的:

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

我遇到了一些值(value)观:

机型:三星Note 8、索尼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

机型:三星S4、Nexus4、XPERIA Z1
GL_MAX_TEXTURE_SIZE:4096
GL_MAX_TEXTURE_IMAGE_UNITS:16
GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS:32

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

我需要您的帮助和提示,我走的路对吗?我接下来应该如何处理这些信息?
感谢您的宝贵时间。

最佳答案

GL_MAX_TEXTURE_SIZE 是您的硬件支持的最大正方形纹理尺寸。

  • 任何纹理的 X 和 Y 尺寸都不能超过此尺寸。

GL_MAX_TEXTURE_IMAGE_UNITS 指的是您可以在可编程管线中绑定(bind)和使用的纹理的最大数量(例如,unique GLSL 程序中的采样器统一名称)(GL_MAX_TEXTURE_UNITS 是 GLES 1.0 中的固定功能模拟)。

  • 在 GLES 2.0 中,它的最小值为 2。

GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 是指您可以在 GLSL 程序中的所有着色器中使用的纹理数量。

  • fragment 着色器中的 4 个采样器 + 顶点着色器中的 4 个采样器 = 8 个组合纹理图像单元


注意:OpenGL ES 2.0 不需要在顶点着色器中支持纹理查找,我怀疑Samsung Note 8、Sony XPERIA U 有一个不支持这个的实现,判断COMBINED 和一般 TMU 计数之间的奇偶校验。

  • 查询 GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 的值将结束任何猜测。


不过,要回答您的实际问题...这些值中唯一可以用来确定要使用哪个纹理包的值是 GL_MAX_TEXTURE_SIZE。没有您可以查询以确定底层硬件的内存容量/纹理填充率的 OpenGL 参数,这是您在选择纹理包时真正想知道的。您将需要通过其他方式收集此信息,可能是小型基准测试或已知硬件的数据库,或者如果您幸运的话,该平台有一个单独的 API 可以让您查询这些信息。

关于android - GL 最大纹理大小策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com