关于节点渲染 图片大小对内存的消耗

游戏引擎底层的渲染方式都是基于OpenGL的,OpenGL载入纹理图片时,所用内存会自动扩张到2的N次方。比如,一张图片的大小为10*10像素,OpenGL会按照16*16的规格将图片载入到内存中;如果图片大小为64*65,那么就会按照64*128载入了,这就造成了内存的无必要开销。

具体浪费了多少内存空间呢?

我们这里需要了解一个概念:图片格式(Image format)。图片格式有RGBA8888、RGBA4444、RGBA5555、RGB888等等。假如我们使用的图片格式为RGBA8888,也就是说图片每个像素点都由R、G、B、A4个值组成,每个值占用8位(值为0-255),那么一个像素点会占用8位*4=32位=4字节。所以图片大小为64*65时我们按照64*128载入,此时会造成64*(128-65)*4字节=16128字节=15.75KB的内存空间浪费,要知道整张图片的大小才有64*65*4/1024=16.25KB。

所以,在游戏开发使用图片资源时,我们要尽量保证图片的大小在接近且不大于2的整数倍,理想状态下,如果每一张图的长宽都恰好是2的n次方数值,就不会有任何浪费了。

你可能感兴趣的:(关于节点渲染 图片大小对内存的消耗)