2017-02-07 8 views
1

У меня есть вопрос, где, иногда (1 в 50 до 100) Internet Explorer отбросит это предупреждение, что приведет к визуализации WebGL потерпеть неудачу и бросить:WebGL лимит времени рендеринга - Internet Explorer 11

WEBGL11257: Содержимое WebGL слишком долго переносится на ваш графический процессор. Временное переключение на программный рендеринг.

Я использую Three.js, и что происходит, когда это происходит, так это то, что мой контекст визуализации Webgl перестанет работать, так как предполагается, что он использует графический процессор. Затем он выкинет х количество ошибок всех функций, специфичных для WebGL.

Это может быть установлен на моей машине при превышении лимита времени, который по умолчанию является 500мс, делая это изменение в редакторе реестра: https://support.microsoft.com/en-us/help/3099259/update-to-add-a-setting-to-disable-500-msec-time-limit-for-webgl-frame-in-internet-explorer-11

Это, конечно, не является устойчивым решением, так как клиенты, запуск IE11 или Edge не должен делать этого. Интересно, кто-нибудь наткнулся на эту проблему, и если что-то делать с ней на стороне клиента?

+0

Насколько тяжелый контент для этого контекста? – gaitat

ответ

4

Решение состоит в том, чтобы прекратить рендеринг независимо от того, что он занимает слишком много времени для рендеринга. В большинстве реализаций WebGL каждый вызов функции draw синхронизируется. Если это займет слишком много времени, браузер потеряет контекст webgl.

Пример того, что обычно занимает слишком много времени.

  • Рисование слишком много больших треугольников/указывает

    Вы можете сделать сотни тысяч, даже миллионы треугольников, если они находятся в общем небольшой, но рисовать очень большие треугольники, как, которые охватывают весь экран вещи получат слишком медленно быстро

  • жребия пикселей со сложным пиксельным шейдером

    фрагментов шейдеров запуска для каждого пикселя они оказаны тоже. экран 1920x1080 имеет более 2 миллионов пикселей, поэтому медленный шейдер фрагмента, работающий в 2 миллиона раз, может оказаться слишком медленным.

  • Использование случайных текстур.

    GPU оптимизирован для простого чтения текстур. Предполагается, что если вы прочтете один тексель в текстуре, вы будете читать другие тексели поблизости и кэшировать близлежащие тексели. Если вместо этого вы читаете тексели в полу-случайном порядке, вы будете побеждать кеш и идти очень медленно.

Обходные

  • Если вам нужно сделать много больших вещей разделить ваши отрисовки звонки.

    Предположим, что один миллион треугольников в одном вызове происходит слишком медленно.Попытка рисования 100k более 10 вызовов отрисовки

  • Оптимизируйте свой фрагмент шейдеры

  • сортировки и рисовать непрозрачные вещи спереди назад

    Это происходит потому, что GPU может сделать тест глубины на пиксель, если тест не пройден то шейдер фрагмента для этого пикселя не запускается.

Но в конечном счете, если один из ваших вызовов отрисовки принимает 500мс (1/2 секунды), и вы не можете оптимизировать, то ваша страница, вероятно, действительно будет разочарованием для пользователей. Вы можете нарисовать меньшие части по нескольким кадрам, чтобы поддерживать высокую частоту кадров, чтобы UX оставался отзывчивым.

Еще одна вещь, которая может вызвать ту же ошибку, - это шейдер, который слишком долго компилируется. Шейдер может работать достаточно быстро, как только он скомпилирован, но сложность компиляции самого шейдера, особенно на DirectX, может закончиться тем, что занимает более 500 мс, и браузер потеряет контекст WebGL. Например, this very bad shader работает для меня на моем iPhone, но занимает слишком много времени для компиляции в Windows, и браузер теряет контекст WebGL.

+0

Мы сделали несколько изменений, и рендеринг занимает 1-4 мс. К сожалению, клиент установил флаг в редакции реестра, который увеличивает срок для рендеринга GPU, поэтому теперь мы не можем проверить, все ли это происходит. Я забыл проверить, прежде чем мы внесем изменения, сколько времени прошло рендеринг, но я скептически, что на самом деле это заняло до 50 мс, когда теперь он занимает 1-4. Изменения ужасны. – JakobMillah

 Смежные вопросы

  • Нет связанных вопросов^_^