WebGL 中的最大纹理数?

Max number of textures in WebGL?

我知道在 WebGL 中有 8 个纹理的限制。

我的问题是,8 是全球限制,还是每个 shader/program 明智?

如果它符合 shader/program 明智的限制,这是否意味着,一旦我将纹理加载到一个着色器的制服上,我就可以开始将这些插槽重新用于其他着色器?假设我对一个形状使用了 TEXTURE0,我可以对另一个形状使用 TEXTURE0 吗?

每次绘制调用都有限制。当您进行绘制调用并调用特定着色器程序时,您会受到限制,但您的下一个绘制调用可以在同一动画帧中使用完全不同的纹理。

此外,8只是最低保证。系统需要支持 至少八个 才能被视为符合 WebGL。但是更好的显卡支持八个以上。您可以像这样查询您所在平台的图像纹理的最大数量:

var maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);

您还可以寻找顶点纹理:

gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)

或两者的结合:

gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)

您还可以使用 WebGL Report(免责声明,我是贡献者)之类的网站来查找您所在平台的此统计信息(在“片段着色器”->“最大纹理单元”下)。

编辑:首次撰写此答案时,还有另一个名为“WebGL Stats”的有用站点,该站点将显示各种浏览器对 WebGL 支持的汇总数据。可悲的是,该网站在几年前毫无征兆地消失了。但即使在那时,大多数设备至少支持 16 种纹理。