Почему WebGL такой медленный (с пустым шейдером)?
(хотя и в GPU тоже копируется, но опять же, 60 раз).
В этом и проблема. Вершины перекидывать на карту на каждом фрейме - это бред в любом случае (даже если сейчас это не основная причина тормозов). Буферы вершин на то и нужны, чтобы закинуть их один раз.gl.bindBuffer(gl.ARRAY_BUFFER, gl.createBuffer());
Вот так делать нельзя. Создание и заюзание буфера разделили не для того чтобы вам жизнь усложнять. Попробуйте избавиться от этого и сделайте нормально.
Windows ограничивает fps до 60 для webgl, да и в целом для opengl и direct3d.
Я не занимался webgl, но скорее всего можно по старинке узнать сколько миллисекунд уходит на отрисовку одного кадра и так узнать примерный fps по формуле 1000/количество_миллисекунд_на_отрисовку_одного_кадра
Посмотрите https://www.shadertoy.com/view/Ms2SD1 если показывает меньше 40 fps в окне, значит проблема в связке ОС—браузер—драйвера видеокарты.
Если пример показывает 60 fps значит вам нужно найти другие уроки по webgl.