MAX_COMBINED_TEXTURE_IMAGE_UNITS
是存在的纹理单元的总数。
MAX_TEXTURE_IMAGE_UNITS
是可以在片段着色器中使用的纹理单元总数
MAX_VERTEX_TEXTURE_IMAGE_UNITS
是可以在顶点着色器中使用的纹理单元总数
您可以通过调用查询这些值gl.getParameter
function main(webglVersion) {
const gl = document.createElement('canvas').getContext(webglVersion);
if (!gl) {
return console.log('no', webglVersion);
}
console.log(webglVersion);
console.log(
'MAX_COMBINED_TEXTURE_IMAGE_UNITS',
gl.getParameter(gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS));
console.log(
'MAX_TEXTURE_IMAGE_UNITS',
gl.getParameter(gl.MAX_TEXTURE_IMAGE_UNITS));
console.log(
'MAX_VERTEX_TEXTURE_IMAGE_UNITS',
gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS));
}
main('webgl');
main('webgl2');
假设你得到了这些结果
MAX_COMBINED_TEXTURE_IMAGE_UNITS 20
MAX_TEXTURE_IMAGE_UNITS 8
MAX_VERTEX_TEXTURE_IMAGE_UNITS 16
这意味着在顶点着色器中最多可以使用 8 个,在片段着色器中最多可以使用 16 个,但总共不能使用超过 20 个。
WebGL 2.0 会提供更多的纹理单元,还是受显卡本身的限制?
WebGL 2.0 要求的最小值高于 WebGL1 的最小值。通常在同一个 GPU 上,它们很可能提供相同的数量,但有些 GPU 支持 WebGL1,但不支持 WebGL2
WebGL 与 WebGL2 的最低保证值
WebGL1 WebGL2
MAX_COMBINED_TEXTURE_IMAGE_UNITS 8 32
MAX_TEXTURE_IMAGE_UNITS 8 16
MAX_VERTEX_TEXTURE_IMAGE_UNITS 0 16
请注意,WebGL1 中的最小值为MAX_VERTEX_TEXTURE_IMAGE_UNITS
0。这意味着在顶点着色器中使用纹理是 WebGL1 的可选功能。幸运的是,大多数设备至少支持 4