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

Webgl 如何从图像计算vram使用大小?,webgl,vram,Webgl,Vram,我正在学习WebGL,我想知道从imagejpg/png计算vram使用大小的公式 谢谢。jpg或png没有区别。在上传到WebGL之前,它们将扩展为未压缩的数据。没有完美的方法来计算vram的使用情况,因为驱动程序内部实际存储的内容是未知的,但您可以估计 bytesPerPixel * width * height 其中,bytesPerPixel是从传递给gl.texImage2D的格式/类型派生的,如中所示 或 在WebGL2中,您可以从传递给同一函数的interalFormat进行计算

我正在学习WebGL,我想知道从imagejpg/png计算vram使用大小的公式


谢谢。

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

bytesPerPixel * width * height
其中,bytesPerPixel是从传递给gl.texImage2D的格式/类型派生的,如中所示

在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生成mipmap,则需要以大约33%的比例进行多次应用。例如,一个16x16像素的纹理将具有

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

 16x16 = 256

 256 * 1.33 = 340.

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

哇,你的答案真的很棒,非常感谢!
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)
 16x16 + 8x8 + 4x4 + 2x2 + 1x1 = 340

 16x16 = 256

 256 * 1.33 = 340.