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