0

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

谢谢。

4

1 回答 1

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传递给相同的函数进行计算(请参见此处的表格

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你需要乘以大约 33%。例如,一个 16x16 像素的纹理将具有

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

 16x16 = 256

 256 * 1.33 = 340.

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

于 2018-01-31T15:22:14.900 回答