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

标签 webgl vram

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

谢谢。

最佳答案

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

bytesPerPixel * width * height

其中 bytesPerPixel 源自您传递给 gl.texImage2Dformat/type,如下所示

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 作为示例。某些驱动程序会将各种每像素 2 字节 RGB/RGBA 格式扩展为 4 字节。

关于webgl - 如何从图像计算 vram 使用大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48545042/

相关文章:

javascript - 使用动画几何体将背景渐变添加到前景?

c++ - opengl 驱动程序如何在有限的 VRAM 中处理大型纹理阵列

python - TensorFlow:如何记录 GPU 内存(VRAM)利用率?

javascript - Phong 和 Gouraud 着色 WebGL

三.js LineBasicMaterial线宽问题

javascript - 当您从 DOM 图像加载 WebGL 纹理时,如何判断它是否具有 Alpha channel ?

javascript - WebGL & Three.js - 在两个渲染器中连续渲染一个场景

android - 无法获取 opengl OutOfMemory 错误 1285

debugging - 添加删除 THREE.Geometry 到场景时 Three.JS VRAM 内存泄漏