为什么WebGL对uniform大小有限制?

3

目前我的浏览器上的WebGL只支持1024*4字节的uniform。但是我可以把数据放在纹理中。在一个uniform数组和纹理中存储数据有什么区别?uniform sampler2D的大小是多少?

1个回答

3
纹理被采样,而uniforms则不是。当你调用texture2D(someSampler, someUV)时,GPU可以通过从N个mips中选择2个来计算一个值,然后读取最多8个像素,每个mip中的4个,并在它们之间进行线性插值(如果是WebGL2中的3D纹理,则最多16个像素)。
因此,从纹理中读取比从uniforms中读取要慢。你可能会说“我关闭了线性插值”,但纹理仍然使用sampler进行读取,而且sampler数量有限(即使是顶级GPU也只有32个sampler)。

如果你写了一本关于WebGL的书,它肯定会大受欢迎。 - duhaime

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接