探寻ASTC纹理压缩后,内存下降的实际值

你啊 打个安卓包 AS里比较一下就知道了其实 这个最直观

好,我打个包试试

这个前后,有关系吗?

不是直接进显存的
先读取文件进内存,
ASTC就不需要解码直接传递给显存
PNG就需要先解码为argb数据
你看前面给出的抖音文档的示图。

2赞

来源于抖音文档

题主都没有配PNG,只有ASTC,如果设备不支持的ASTC的话,图像都显示不出来

我也好奇为么题主开启了纹理压缩,内存看起来毫无变化?

我分别用png和ASTC8x8打了安卓包,运行时使用androidStudio的Profiler查看内存,发现两个包内存占用还是差不多,在260MB~290MB之间波动。

ASTC 8x8:


PNG:

可以肯定纹理压缩是生效了的,因为ASTC 8x8的画质明显很糊。

:rofl:

你的图片占的比例是不是太小了,就是内存可能都是其他部分占用的,虽然图片压缩了,但这部分比例很小?

1赞

有可能,一张2048*2048的图片不压缩内存也就16M。引擎本身打开就占了几百M的内存。如果他只是拿几张图测试是很有可能这样的

他应该是先测试引擎占了多少内存,减去引擎的内存再去计算。或者多加个十几二十张大图片

可能内存瓶颈不在图片上。导致图片压缩后实际变化不大。

这个波动范围太大了, 可以搞个按钮,分别加载 astc 和png 对比 两个图片代来的内存增长。
这种讨论没有意义 , 压缩纹理内存占用规则肯定是生效的。

1赞

我将加载的逻辑return,只加载代码分包,重新打了个安卓包,运行看到内存占用只有160MB,可以推断预制体+图片等的占用是有100MB左右的

我写了个按钮,点击后会依次加载40张大约1000x1000尺寸的图集,对比结果:
ASTC8x8:内存从160MB,加载结束后涨到约200MB


PNG:内存从160MB,加载结束后涨到约205MB
差距为40/45=89%
感觉确实差距不大 :upside_down_face:

这数据看起来不对啊1000*1000一张加载进内存就是将近4m,40张应该是160m左右,astc加载完才200m符合预期,png版应该300多M符合预期

跟踪学习下~

看看 png 解析的时候 Image 走的是哪个初始化方法

对,你说的数据才是理论上正确的。

根据他的内存曲线波动来看,使用png的时候应该触发了gc,而astc那里没有触发gc。会不会有一定的原因。

或者在哪里有什么自动释放的机制?

请问要怎么看呢