关于OpenGL ES 2的问题

时间:2014-12-19 19:00:49

标签: android opengl-es

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

  1. 我知道可以使用的纹理单元数量最少?该游戏将需要Android 2.3.3及更高版本,因此,我认为Adreno 200将是最老的GPU来完成这项工作。假设较新的纹理单元有更多纹理单元,问题转化为“Adreno 200有多少纹理单元?”

  2. 纹理有多大?以像素为单位的位图使用的“安全”大小是多少?当然,由于OpenGL ES以压缩格式保存纹理,可能会填充1000x1000纹理,比如海平面的1000x1000图片,蓝色将非常小,但平均来说,你认为“安全”的大小使用“?我知道,当我测试我的应用程序时,我会发现是否使用了太多内存,但我不想徒劳无功。

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

  4. 在2D游戏中使用mip-mapping是好还是坏,其中对象不会过多和/或过于频繁地调整大小?

3 个答案:

答案 0 :(得分:2)

来自the spec

  1. 第154页,表6.20,GL_MAX_TEXTURE_IMAGE_UNITS,最小8
  2. 第152页,表6.18,GL_MAX_TEXTURE_SIZE,最低64
  3. 可能。这并不受规范的限制。

答案 1 :(得分:1)

  1. Adreno 200有4个用于顶点着色器的纹理单元和16个用于片段着色器的纹理单元。 More details

  2. Adreno 200的最大纹理尺寸为2048x2048。

  3. AFAIK,Adreno 200使用共享内存架构和主内存。

  4. 使用mipmap意味着你需要多x1.3的内存来存储纹理像素。

答案 2 :(得分:0)

对于问题4:在缩放纹理时使用Mipmap,因此很可能在常规2D游戏中你没有使用它们。对于其他问题,我没有任何好的答案。