WebGL:是否存在 gl.MAX_TEXTURE_IMAGE_UNITS == 1 的情况

WebGL: Are there cases where gl.MAX_TEXTURE_IMAGE_UNITS == 1

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

gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)

等于 1?

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

MAX_TEXTURE_IMAGE_UNITS WebGL 需要支持的最小值为 8。您可以 look up the limits in the spec section 6.2。注意:搜索 "MAX TEXTURE IMAGE UNITS"(空格不是下划线)

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

对于顶点着色器,WebGL1 上的最低要求是 0。您可以通过查看 MAX_VERTEX_TEXTURE_IMAGE_UNITS.

来检查顶点着色器中支持的纹理数量

还好most machines support at least 4 in the vertex shader

还有另一个限制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