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