Контекст: мы обернули Openlayers веб-компонентами / полимером, чтобы предоставить нашим клиентам (не опытным программистам) простой способ добавления карт.
Мы обернули слой Webgl и позволяет обновить шейдеры / glUniforms / glAttributes / и, конечно, VectorSource.
Поскольку мы обычно работаем с огромными источниками данных (500 000 и более), мы хотим обработать обновление этих свойств наиболее эффективным способом.
Мы можем легко обновить слой, когда изменения касаются glUniforms и данных, используя функциональные возможности Openlayers, но не можем найти способ сделать это эффективно для шейдеров / glAttributes.
Опции 1: Простой способ это воссоздать слой с обновленными свойствами. (Не самое производительное и дружественное к памяти решение). См. Упрощенный пример здесь:
const options = oldLayer.options;
// Update options, ex: options.vertexShader = source.vertexShader
const newLayer = new WebGlLayer(options);
map.removeLayer(oldLayer);
map.addLayer(newLayer);
Параметры 2: Обойти защищенные свойства слоя / средства визуализации и обновить их (вообще не очистить, если вообще возможно)
Опция 3: вставьте свою идею сюда