我知道WebGL中有8个纹理的限制.
我的问题是,全局限制是8,还是每个着色器/程序明智?
如果它是每个着色器/程序明智的限制,这是否意味着,一旦我将纹理加载到一个着色器的制服,我可以开始重用这些插槽用于其他着色器?说我用过TEXTURE0一种形状,我可以用TEXTURE0另一种形状吗?
ema*_*key 12
限制是每次平局调用.当您进行绘制调用并调用特定着色器程序时,您受到限制的约束,但您的下一个绘制调用可以在同一动画帧中使用完全不同的纹理.
此外,8只是最低保证.系统需要支持至少八个被认为符合WebGL的系统.但更好的显卡支持超过八个.您可以查询您所在平台的最大图像纹理数量,如下所示:
var maxTextures = gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS);
Run Code Online (Sandbox Code Playgroud)
您还可以查找顶点纹理:
gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS)
Run Code Online (Sandbox Code Playgroud)
或两者的结合:
gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS)
Run Code Online (Sandbox Code Playgroud)
您还可以使用像WebGL报告(免责声明,我是贡献者)这样的网站来查找您所在平台的统计数据(在片段着色器 - >最大纹理单位下).
您还可以检查WebGL统计信息以查看支持最大图像纹理的图形.该MAX_TEXTURE_IMAGE_UNITS图有证据显示多达16个图像纹理的支持是相当普遍,享受现代浏览器中约95%的支持率.