WebGL:在某些情况下gl.MAX_TEXTURE_IMAGE_UNITS == 1

时间:2018-07-25 13:34:09

标签: webgl

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

gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS)

等于1吗?

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

1 个答案:

答案 0 :(得分:1)

要支持MAX_TEXTURE_IMAGE_UNITS WebGL,最小值必须是8。您可以look up the limits in the spec section 6.2。注意:搜索“最大纹理图像单位”(空格不带下划线)

那说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