如何从图像计算 vram 使用大小?
How to calculate vram usage size from a image?
我正在学习 WebGL,我想知道从图像计算 vram 使用大小的公式(jpg/png)。
谢谢。
jpg 或 png 没有区别。在上传到 WebGL 之前,它们被扩展为未压缩的数据。没有完美的方法来计算 vram 使用情况,因为 driver 内部实际存储的内容是未知的,但您可以估计。
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 中,您将根据传递给相同函数 (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
生成一个,您需要乘以大约 33%。例如,一个 16x16 像素的纹理将具有
16x16 + 8x8 + 4x4 + 2x2 + 1x1 = 340
16x16 = 256
256 * 1.33 = 340.
但就像我提到的那样,这取决于 driver。一些(大多数 drivers?)将 RGB 扩展为 RGBA 作为一个例子。一些 driver 会将各种 2 字节/像素 RGB/RGBA 格式扩展为 4 字节。
我正在学习 WebGL,我想知道从图像计算 vram 使用大小的公式(jpg/png)。
谢谢。
jpg 或 png 没有区别。在上传到 WebGL 之前,它们被扩展为未压缩的数据。没有完美的方法来计算 vram 使用情况,因为 driver 内部实际存储的内容是未知的,但您可以估计。
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 中,您将根据传递给相同函数 (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
生成一个,您需要乘以大约 33%。例如,一个 16x16 像素的纹理将具有
16x16 + 8x8 + 4x4 + 2x2 + 1x1 = 340
16x16 = 256
256 * 1.33 = 340.
但就像我提到的那样,这取决于 driver。一些(大多数 drivers?)将 RGB 扩展为 RGBA 作为一个例子。一些 driver 会将各种 2 字节/像素 RGB/RGBA 格式扩展为 4 字节。