首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么纹理压缩格式是可用的Android?

什么纹理压缩格式是可用的Android?
EN

Stack Overflow用户
提问于 2017-07-14 13:05:55
回答 1查看 1.5K关注 0票数 1

我正在做一些大型纹理的WebGL工作,并且已经达到了必须使用纹理压缩来减少VRAM和上传时间问题的地步。

我的应用程序需要在过去两三年的iOS和安卓手机上运行。这一次,桌面支持并不是必然的结果。

我知道iOS中的Chrome和Safari将允许我以PVRTC格式传递纹理,因为所有iOS设备都使用PowerVR GPU芯片组。因此,iOS是一个已解决的问题。

我还了解到几乎所有的安卓手机都正式支持爱立信纹理压缩(例如,ETC1) --这实际上是OpenGL 2规范所要求的。然而,我读过一些报告说,一些安卓实例上的浏览器实际上以一种未压缩的方式传递ETC1纹理。

WebGLStats非常强烈地警告我不要使用WEBGL_compressed_texture_etc1扩展:

警告不要使用。通常在浏览器中通过在CPU上解压缩并将全部大小上传到GPU来实现,具有严重的性能、vram和质量影响。修正了Chrome 57和Firefox ??

我知道的另一种常见格式是S3TC。这在桌面上得到了很好的支持,但Android的可操作性似乎仅限于使用NVIDIA芯片组的设备。我相信这些都是稀有的(特格拉?)

选择一种在现代Android手机上工作的纹理压缩格式,我的最佳选择是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-14 18:07:00

什么纹理压缩格式是可用的Android?

这取决于设备上的GPU/驱动程序/浏览器

可以通过以下方法检查特定设备

代码语言:javascript
复制
 gl.getSupportedExtensions();

截至2017-07-15检查webglstats.com声称

  • 没有android设备支持s3tc
  • 2%的设备支持pvrtc
  • 97%的设备支持etc1
  • 97%的设备支持
  • 48%的设备支持空管
  • 46%的设备支持astc

我确信它不完全准确,因为我非常肯定NVidia盾支持s3tc,但也许没有人使用NVidia盾访问过使用webglstats.com的站点,或者用户数量太少,以致于减少到0%

选择一种在现代Android手机上工作的纹理压缩格式,我的最佳选择是什么?

您应该做的是支持所有的etc1,等等,atc,astc。将资产存储在文件夹或扩展名等中

代码语言:javascript
复制
assets/etc1/image1
assets/etc1/image2
assets/astc/image1
assets/astc/image2
...

代码语言:javascript
复制
assets/image1.etc1
assets/image2.etc1
assets/image1.astc
assets/image2.astc
...

然后在启动查询时,用户的设备支持哪种格式,并选择最佳的(对于某些定义最好的,比如最小的大小)

示例

代码语言:javascript
复制
// in order of best compression to worst
const compressions = [
   { ext: "astc", name: "WEBGL_compressed_texture_astc" },
   { ext: "etc1", name: "WEBGL_compressed_texture_etc1" },
   ...
];
let imageExtension = ""; // pick a default?
for (let i = 0; i < compressions.length; ++i) {
  const info = compressions[i];
  const ext = gl.getExtension(info.name);
  if (ext) {
    imageExtension = info.ext;
    break;
  }
}

function loadImage(baseUrl) {
   ...
   img.src = baseUrl + imageExtension;
   ...
}

或者上面的其他变体,在这些变体中,您了解了用户的设备需要什么,然后使用它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45103814

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档