Android 关于OpenGL ES 2的问题

Android 关于OpenGL ES 2的问题,android,opengl-es,Android,Opengl Es,我有几个问题,主要是关于我的2D Android游戏的OpenGL ES中的纹理 我知道我可以使用的最少纹理单元数是多少?游戏将需要安卓2.3.3及以上版本,因此,我认为Adreno200将是最早的GPU来做这项工作。假设较新的有更多的纹理单元,问题会转化为“有多少个纹理单元有Adreno 200?” 纹理可以有多大?以像素为单位的位图的“安全”大小是多少?当然,由于OpenGL ES以压缩格式保存纹理,可能填充了1000×1000纹理,比方说,蓝色与海底的1000×1000图片相比非常小,但是

我有几个问题,主要是关于我的2D Android游戏的OpenGL ES中的纹理

  • 我知道我可以使用的最少纹理单元数是多少?游戏将需要安卓2.3.3及以上版本,因此,我认为Adreno200将是最早的GPU来做这项工作。假设较新的有更多的纹理单元,问题会转化为“有多少个纹理单元有Adreno 200?”

  • 纹理可以有多大?以像素为单位的位图的“安全”大小是多少?当然,由于OpenGL ES以压缩格式保存纹理,可能填充了1000×1000纹理,比方说,蓝色与海底的1000×1000图片相比非常小,但是,平均而言,你认为“安全使用”的大小是多少?我知道我可以在测试我的应用程序时发现我是否使用了太多内存,但我不想白费力气

  • 纹理/vbos/其他是否存储在RAM中?在PC专用图形卡上,我知道没有,但据我所知,手机(至少是低端手机)使用RAM存储GPU的主要资源。我是不是错了

  • 在2D游戏中使用mip贴图是好是坏,在2D游戏中对象的大小不会太大和/或太频繁


  • 对于问题4:缩小纹理时会使用mipmap,所以很可能在常规2D游戏中对它们没有任何用处。对于其他问题,我没有任何好的答案。

    来自:

  • 第154页,表6.20,
    GL\u MAX\u TEXTURE\u IMAGE\u UNITS
    ,最小
    8
  • 第152页,表6.18,
    GL\u最大纹理大小
    ,最小
    64
  • 可能是。这不受规范的约束
  • Adreno 200的顶点着色器有4个纹理单元,片段着色器有16个纹理单元

  • Adreno 200的最大纹理大小为2048x2048

  • 另外,Adreno 200使用带有主内存的共享内存架构

  • 使用mipmaps意味着您需要更多x1.3内存来存储纹理像素


  • 是的,但我也会缩小纹理,即使是2D游戏。我会让他们像原来的80%,而不是更少。根据您的经验,如果我不使用mipmap,在这种情况下图像会看起来不好吗?如果它看起来确实很糟糕,那么是否值得使用mipmap来处理像这样小的东西,或者缺点太大(比如需要更多的内存)?通常,据我所知,当位图被大幅缩小时,会使用mipmap。IIRC,默认“第一”级位图的大小为原始位图的50%,第二级位图的大小为25%,依此类推。所以,我认为,如果你像原始的80%那样缩放,你不需要mipmap。但是,是的,如果您有较大的缩小比例,您可能希望生成mipmap。谢谢!所以,至少8个纹理单位,我想这很好。但是64在GL_MAX_纹理尺寸下意味着什么?在问题#3中,我询问在低/旧手机上的实际情况。由于规范没有约束它,我猜纹理实际上存储在RAM上?:)这意味着符合标准的ES 2.0实现必须支持至少与64x64一样大的纹理。大多数将支持1024-2048范围内的内容。他们可以,在API的限制范围内无法判断。