Для ясности: тест, на который вы ссылаетесь, вообще не использует WebGL. (Я должен знать, я написал это.) И в случае с этим конкретным тестом вы абсолютно точно можете запустить его в Web Worker сейчас, и это будет прекрасно.
(Забавный факт: Web Workers не поддерживали TypedArrays, когда тест был построен, и, поскольку большинство матричных библиотек полагаются на него, было непрактично запускать его в Worker в то время. С тех пор это было исправлено.)
В любом случае, чтобы ответить на ваш первоначальный вопрос: нет, WebGL не может работать в рабочей среде. Основным препятствием для этого является то, что для получения контекста WebGL вам нужно вызвать getContext
для элемента холста. Веб-воркеры явно запрещают доступ к DOM (что хорошо, кстати!), и поэтому вы никогда не сможете получить доступ к WebGL из воркера.
Но это не так плохо, как вы думаете. Во-первых, учтите, что большая часть 3D-рендеринга в любом случае происходит в другом потоке. В частности, целая куча потоков, работающих на вашем GPU. Единственная часть, которую должен выполнить браузер, это сказать вашему графическому драйверу: «Эй! Начни рендерить несколько треугольников, используя эти данные!» а затем он движется дальше, не дожидаясь фактического рендеринга треугольников. Таким образом, хотя команды отрисовки должны выполняться из основного процесса, время, затрачиваемое на блокировку этого процесса, (обычно) очень мало.
Конечно, это не то, что отнимет у вас кучу времени, если вы программируете игру в реальном времени. У вас есть анимация, физика, ИИ, обнаружение столкновений, поиск пути... есть много неграфических задач, которые съедят ваш процессор заживо, если вы позволите им. В некоторых случаях (анимация) это обычно просто куски и куски матричной математики, как и тест, на который вы ссылаетесь! Однако, к счастью для нас, этот тип обработки МОЖЕТ быть выполнен в Worker, и все, что нам нужно для связи с основным потоком, — это данные, необходимые для рендеринга сцены.
Да, это создает некоторые проблемы с точки зрения синхронизации и передачи данных, но в целом это будет гораздо предпочтительнее, чем блокировать ваш браузер, пока мы пытаемся смоделировать столкновение этих 500 ящиков.
person
Toji
schedule
21.10.2011