@NNn131

Что за потеря контекста webgl и с чем её едят?

Пытаюсь создать рисовалку на webgl2
Желательна поддержка большого количества слоёв (>10) в 128бит/пикс. формате

Почитал в интернете, оказывается, с каждым может случиться такая страшная вещь как потеря webgl контекста
В связи с этим созрели несколько вопросов

1: Должна ли чем-то отличаться обработка потери контекста в webgl и webgl2 ?
2: Вот у меня потерялся контекст, это значит, что все программы и шейдеры текущего контекста просто слетели и сама переменная контекста (обычно gl) осталась доступной и я должен как-то восстанавливать все данные в ней
или мне нужно получить полностью новый контекст вызвав gl = canvas.getContext("webgl2"); , а только потом восстанавливать его? Тогда старый контекст автоматически удалится или так и будет висеть в небытии?
3: Самый главный вопрос, что произойдёт с данными при потере контекста? Если я буду хранить слои как 2d текстуры, то они все уничтожатся? Как мне тогда сохранять их? Дублировать их ещё и в оперативной памяти? Не слишком ли жирно? Тогда при изменении (а это будет часто) текстуры придётся копировать через gl.readPixels? Не слишком ли это ударит по производительности? Как мне дальше жить?
4: Может вообще забить на эту потерю контекста? Как часто она происходит? Раз на миллион? А если мне не нужна поддержка мобилок?
Спасибо и простите за скопированный вопрос.
  • Вопрос задан
  • 184 просмотра
Пригласить эксперта
Ответы на вопрос 1
sfi0zy
@sfi0zy Куратор тега JavaScript
Creative frontend developer
Пытаюсь создать рисовалку на webgl2

Стоит посмотреть на поддержку WebGL2 в Safari, осознать, что экспериментальная фича даже при "зеленой" поддержке не отличается стабильностью, и подумать еще раз пока не поздно. Но это так, к слову. Раз уж говорим про качество и надежность.

Что произойдёт с данными при потере контекста? ...потом восстанавливать его? ...старый контекст автоматически удалится или так и будет висеть в небытии?

По теме есть хорошая заметка из первых рук. Там есть ответы на ваши вопросы с подробностями и примерами кода.

Может вообще забить на эту потерю контекста? Как часто она происходит? Раз на миллион?

Происходит действительно редко. Я за все время экспериментов с WebGL не столкнулся ни разу. То есть такое впечатление, что скорее браузер намертво повесится, чем сбросит контекст. Нужна ли супер-надежность с обработкой этого редкого сценария в вашем конкретном случае - решать вам. Но в целом мало кто об этом заботится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы