为什么 WebGL 限制统一大小?
Why does WebGL put limit on uniform size?
目前我浏览器上的WebGL统一只支持1024 * 4字节。但是,我可以将数据放在纹理中。将数据存储在统一数组和纹理中有什么区别? uniform sampler2D
的大小是多少?
纹理被采样,制服没有。当您调用 texture2D(someSampler, someUV)
时,GPU 可以通过从 N 个 mip 中选择 2 个来计算一个值,然后读取最多 8 个像素,每个 mip 读取 4 个像素,并在它们之间进行线性插值。 (如果它是 WebGL2 中的 3D 纹理,则最多 16 个像素)。
因此,从纹理读取比从制服读取慢。你可以说 "well I turned off linear interpolation" 但纹理仍然是用采样器读取的,并且采样器的数量有限(即使是高端 GPU 也只有 32 个采样器)
目前我浏览器上的WebGL统一只支持1024 * 4字节。但是,我可以将数据放在纹理中。将数据存储在统一数组和纹理中有什么区别? uniform sampler2D
的大小是多少?
纹理被采样,制服没有。当您调用 texture2D(someSampler, someUV)
时,GPU 可以通过从 N 个 mip 中选择 2 个来计算一个值,然后读取最多 8 个像素,每个 mip 读取 4 个像素,并在它们之间进行线性插值。 (如果它是 WebGL2 中的 3D 纹理,则最多 16 个像素)。
因此,从纹理读取比从制服读取慢。你可以说 "well I turned off linear interpolation" 但纹理仍然是用采样器读取的,并且采样器的数量有限(即使是高端 GPU 也只有 32 个采样器)