OffscreenCanvas недоступен? Диагностика по платформам и окружению
Что вы видите
Any3D сообщает: «Текущий браузер не поддерживает OffscreenCanvas». Это один из трёх компонентов пути Worker; без него такие операции, как сжатие текстур, требующие WebGL2-кодирования внутри Worker, не могут выполняться полностью.
OffscreenCanvas позволяет создавать canvas в Web Worker и получать WebGL-контекст, выполняя GPU-операции в фоне, не блокируя страницу.
Частые причины
| Причина | Типичный сценарий |
|---|---|
| Устаревший браузер/WebView | Chrome < 69, Safari < 16.4, старый Android WebView |
| Отключено аппаратное ускорение | Энергосбережение или политики GPU на Windows/macOS |
| Корпоративные политики | GPO отключает GPU, MDM ограничивает графику |
| Встроенный WebView | ВКонтакте, корпоративные приложения, старые оболочки Electron |
| Сетевой уровень | Редко; чаще проблема с загрузкой скриптов, а не с самим API |
Диагностика по платформам
Windows
- Chrome / Edge: Настройки → Система → включите «Использовать аппаратное ускорение» → полностью закройте и перезапустите браузер.
- Драйверы GPU: на ноутбуках с двумя видеокартами убедитесь, что браузер использует дискретную GPU (Панель управления NVIDIA / AMD Software).
- Групповые политики: политики типа «Отключить аппаратное ускорение» приводят к сбою создания WebGL-контекста OffscreenCanvas.
- Удалённый рабочий стол (RDP): в некоторых RDP-сессиях возможности GPU ограничены — проверьте при локальном входе.
macOS
- Safari 16.4+ или последняя версия Chrome.
- Системные настройки → Аккумулятор → режим низкого энергопотребления может снижать планирование GPU; попробуйте с подключённым питанием.
- Экранное время обычно не отключает OffscreenCanvas напрямую, но если MDM ограничивает графические API — обратитесь в IT.
Linux
- Убедитесь, что Mesa/проприетарные драйверы работают; тестируйте в последнем Chrome и под Wayland, и под X11.
- Для удалённого браузера на headless-сервере нужен виртуальный GPU (редкий сценарий для личного использования).
iOS / iPadOS
- Safari обновляется вместе с системой (начиная с iOS 16.4 поддержка OffscreenCanvas достаточно полная).
- WebView внутри приложений может отставать от системного Safari — откройте ссылку в Safari.
- iPad в режиме управления учебного заведения может быть заблокирован на старой системе — нужно обновление администратором.
Android
- Обновите Chrome и Android System WebView.
- В китайских браузерах совместимое ядро может не поддерживать — переключитесь на «быстрое ядро» или используйте Chrome.
- На бюджетных устройствах драйвер GPU устарел: попробуйте отключить «режим энергосбережения» и повторить.
Сеть, VPN и корпоративная среда
OffscreenCanvas — локальный API, обычно VPN на него напрямую не влияет. Но если VPN переводит браузер в «безопасный режим» или загружает корпоративные расширения с инъекциями скриптов, возможен косвенный сбой:
- Сравните при отключённом VPN;
- Проверьте, не принуждает ли корпоративный браузер к «программному рендерингу»;
- При встраивании в iframe убедитесь, что внешний контекст не блокирует WebGL внутри Worker.
Родительский контроль и управляемые устройства
- Family Link / Экранное время: крайне редко отключают OffscreenCanvas напрямую; чаще запрещают обновление браузера, из-за чего API устаревает — разрешите автоматические обновления системы.
- Режим экзамена/библиотеки: может использоваться кастомный браузер — лучше перейти на личное устройство.
Пошаговое исправление (общее)
- Обновите браузер до версии не ниже минимальной из таблицы выше.
- Включите аппаратное ускорение и перезапустите браузер.
- Откройте в системном браузере, а не во встроенном WebView приложения.
- Если одновременно есть ошибка WebGL2, сначала решите её по руководству по исправлению WebGL2.
Быстрая самопроверка
typeof OffscreenCanvas !== "undefined";
Возврат false означает, что текущее окружение не поддерживает этот API.
Итог
Отсутствие OffscreenCanvas чаще всего связано с устаревшим браузером/WebView, отключённым аппаратным ускорением, удалённым доступом на Windows или корпоративными политиками GPU. Включите GPU-ускорение на своей платформе, обновите WebView и используйте системный браузер — обычно это восстанавливает GPU-кодирование внутри Worker.