首页 > 解决方案 > WebGL:是否存在 gl.MAX_TEXTURE_IMAGE_UNITS == 1 的情况

问题描述

很抱歉提出这样一个奇怪的问题,但我正在研究 WebGL 可视化的一些逻辑,并且想知道,是否存在以下情况:

gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)

等于 1?

我问是因为我想弄清楚在每个绘制调用中我可以绘制多少个顶点,并且每个顶点都需要来自多个纹理之一的一些内容。我想要支持的最小情况是我为每个绘制调用加载两个纹理,但如果有卡不支持每个绘制调用多个纹理,我需要重新考虑我的生活。

标签: webgl

解决方案


MAX_TEXTURE_IMAGE_UNITS需要支持的 WebGL 的最小值是 8。您可以在规范第 6.2 节中查找限制。注意:搜索“MAX TEXTURE IMAGE UNITS”(空格不带下划线)

也就是说,WebGL 对片段着色器中使用的纹理与顶点着色器中使用的纹理有不同的限制。

对于顶点着色器,WebGL1 上的最低要求是 0。您可以通过查看 来检查顶点着色器中支持的纹理数量MAX_VERTEX_TEXTURE_IMAGE_UNITS

幸运的是大多数机器在顶点着色器中至少支持 4 个

还有另一个限制MAX_COMBINED_TEXTURE_IMAGE_UNITS是您可以组合使用的纹理总数。换句话说,如果MAX_COMBINED_TEXTURE_IMAGE_UNITS是 8、MAX_VERTEX_TEXTURE_IMAGE_UNITS是 8 和MAX_VERTEX_TEXTURE_IMAGE_UNITS是 4,这意味着您可以一次使用 8 个纹理,其中最多可以在顶点着色器中使用 4 个。您不能一次使用 12 个纹理。

其他最低要求

MAX VERTEX ATTRIBS               8
MAX VERTEX UNIFORM VECTORS       128
MAX VARYING VECTORS              8
MAX COMBINED TEXTURE IMAGE UNITS 8
MAX VERTEX TEXTURE IMAGE UNITS   0
MAX TEXTURE IMAGE UNITS          8
MAX FRAGMENT UNIFORM VECTORS     16

推荐阅读