首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何根据镜像计算vram使用大小?

如何根据镜像计算vram使用大小?
EN

Stack Overflow用户
提问于 2018-01-31 22:53:19
回答 1查看 273关注 0票数 0

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-31 23:22:15

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

代码语言:javascript
复制
bytesPerPixel * width * height

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

代码语言:javascript
复制
gl.texImage2D(level, internalFormat, width, height, 0, format, type, data)

代码语言:javascript
复制
gl.texImage2D(level, internalFormat, format, type, img/canvas/video)

在WebGL2中,您将从传递给相同函数(see table here)的interalFormat进行计算。

对于WebGL1,常见的值有

代码语言:javascript
复制
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像素的纹理将具有

代码语言:javascript
复制
 16x16 + 8x8 + 4x4 + 2x2 + 1x1 = 340

 16x16 = 256

 256 * 1.33 = 340.

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48545042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档