Когда drawArrays вызывается со смещением («первый» аргумент не равен нулю), первый gl_VertexID все еще начинается с 0 или начинается со значения смещения?
Это похоже на ошибку в ANGLE в Windows. Подана ошибка
https://github.com/KhronosGroup/WebGL/issues/2770
Давайте попробуем
[...document.querySelectorAll('canvas')].forEach((canvas, ndx) => { const vs = `#version 300 es void main() { gl_Position = vec4(float(gl_VertexID) / 10., 0, 0, 1); gl_PointSize = 10.0; }`; const fs = `#version 300 es precision mediump float; out vec4 outColor; void main() { outColor = vec4(1, 0, 0, 1); }`; const gl = canvas.getContext('webgl2'); if (!gl) { return alert('need webgl2'); } const prg = twgl.createProgram(gl, [vs, fs]); gl.useProgram(prg); gl.drawArrays(gl.POINTS, ndx * 5, 5); });
canvas {border: 1px solid black;}
<script src="https://twgljs.org/dist/4.x/twgl.min.js"></script> <canvas></canvas> <canvas></canvas>
Похоже, ответ начинается со значения смещения.