2015-08-17 4 views
-1

Я создаю приложение THREE.js (последняя версия, r71), а иногда мне нужно вручную удалить 3D-сцену, чтобы отобразить классический 2D-контент. Итак, что я делаю, это очистка всех переменных, таких как сцена или рендерер, и уничтожение контекста WebGL с использованием renderer.forceContextLoss()Microsoft Edge WebGL теряют контекст

Этот метод отлично работает в Firefox или Chrome, но он не поддерживается в Interner Explorer или Microsoft Edge, что вызывает множественные задержки на моей веб-странице. Я не могу найти обходное решение, чтобы сделать это правильно, как в Firefox или Chrome.

Если кто-то имеет наконечник, не стесняйтесь сказать мне :)

Благодаря

ответ

2

Попробуйте использовать два холста теги и положить одну над другой, как предложил here, поместить их в родительском сНу теге используйте следующий css.

position:absolute; 
left:0px; 
top:0px; 

EDIT:

В ответ на ваш комментарий, позвольте мне прояснить мое понимание.

  • Вы хотите нарисовать 2d и 3d.
  • Вы обнуляете контекст webGL.

Вы не можете иметь 2 контекстов на тот же холст одновременно и я предполагаю вы хотите использовать другой контекст для 2d контента.

Если это предположение верно: Я предполагаю, что у вас есть 2 холстов и контексты одновременно, один с вашим контекстом WebGL и 3D-контентом, а другие с контекстом вы хотите использовать для 2d контента. Затем вы накладываете эти холсты, используя абсолютное положение, чтобы было похоже одно холст. Это означает, что вам никогда не придется перезагружать активы для переключения контекстов, просто убедитесь, что вы так прозрачны.

Также, если вы завернете холст в теге div, он не будет в верхнем левом углу страницы.

Но если мое предположение неверно: , возможно, вы не хотите использовать другой контекст и просто хочет, чтобы очистить экран, в этом случае вы не должны вызывать forceContextLoss()

Если вы хотите продолжить используйте контекст webGL, но очистите экран, который вы должны использовать. clear()

+0

Я не понимаю цели этого. Зачем использовать два холста в верхней левой части страницы? Мне нужно очистить полотно WebGL правильно, я не понимаю, почему создание 2 холста может мне помочь. Кроме того, мой холст - это WebGL, а не 2D. – Rotan

+0

Спасибо за это право. Ваше предположение верно. Но то, что мне не нравится при таком подходе, - это загрузка обоих холстов (2D и 3D). Представьте себе пользователя с устройством с низким оборудованием, если он не может поддерживать WebGL, будет отображаться 2D-холст, но 3D-холст будет по-прежнему активным в фоновом режиме (что приводит к потере производительности) – Rotan

+0

Если webGL не поддерживается то 3D-холст не будет активен ... Также, когда вы вынуждаете потерю контекста, вы вынуждены снова отправлять все активы на GPU.Это, вероятно, самое большое узкое место в 3d-рендеринге сегодня, совместное использование контента, такого как разделяющие и между графическим процессором и процессором. Но вместо того, чтобы спекулировать, профилируйте его и посмотрите. Вы не можете оптимизировать спекуляцию. –

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