我正在学习WebGL,我想知道从图像(jpg/png)计算vram使用大小的公式。
谢谢。
发布于 2018-01-31 23:22:15
jpg或png没有区别。在上传到WebGL之前,它们会扩展为未压缩的数据。没有完美的方法来计算vram使用率,因为驱动程序内部实际存储了什么是未知的,但您可以估计。
bytesPerPixel * width * height其中bytesPerPixel派生自您传递给gl.texImage2D的format/type,如下所示
gl.texImage2D(level, internalFormat, width, height, 0, format, type, data)或
gl.texImage2D(level, internalFormat, format, type, img/canvas/video)在WebGL2中,您将从传递给相同函数(see table here)的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字节。
https://stackoverflow.com/questions/48545042
复制相似问题