如何从图像中计算vram使用大小?

时间:2018-01-31 14:53:19

标签: webgl vram

我正在学习WebGL,我想知道从图像(jpg / png)计算vram使用大小的公式。

感谢。

1 个答案:

答案 0 :(得分:1)

jpg或png没什么区别。在上传到WebGL之前,它们会扩展为未压缩的数据。没有完美的方法来计算vram的使用,因为驱动程序实际存储在内部的是未知的但你可以估计。

bytesPerPixel * width * height

bytesPerPixel来自format / type,其传递给gl.texImage2D,如

gl.texImage2D(level, internalFormat, width, height, 0, format, type, data)

gl.texImage2D(level, internalFormat, format, type, img/canvas/video)

在WebGL2中,你要从interalFormat传递给同一个函数(see table here

进行计算

对于WebGL1的常见值是

format            type                   bytesPerPixel
------------------------------------------------------
gl.RGBA            gl.UNSIGNED_BYTE            4
gl.RGB             gl.UNSIGNED_BYTE            3
gl.LUMIANCE        gl.UNSIGNED_BYTE            1 
gl.ALPHA           gl.UNSIGNED_BYTE            1
gl.LUMIANCE_ALPHA  gl.UNSIGNED_BYTE            2

gl.RGB             gl.UNSIGNED_SHORT_5_6_5     2
gl.RGBA            gl.UNSIGNED_SHORT_4_4_4_4   2
gl.RGBA            gl.UNSIGNED_SHORT_5_5_5_1   2

gl.RGBA            gl.FLOAT                    16   (if enabled)

然后,如果您上传了一个mipmap或使用gl.generateMipmap生成一个mipmap,则需要将其乘以大约33%。例如,16x16像素纹理将具有

 16x16 + 8x8 + 4x4 + 2x2 + 1x1 = 340

 16x16 = 256

 256 * 1.33 = 340.

但就像我提到的那样,取决于司机。一些(大多数驱动程序?)将RGB扩展为RGBA作为一个例子。一些驱动程序会将每像素RGB / RGBA格式的2个字节扩展为4个字节。