Почему шейдер не работает на телефоне
Телефоны выполняют шейдеры, но конкретная программа может не скомпилироваться, использовать неподдерживаемую возможность или оказаться слишком тяжёлой. Сначала определите, что именно не работает: сборка, отрисовка или скорость.
Проверить ошибку компиляции
Для WebGL получите статус компиляции и журнал. Непустой журнал может содержать предупреждение, поэтому решение об ошибке принимайте по COMPILE_STATUS, а не только по наличию текста.
gl.compileShader(shader);
const compiled = gl.getShaderParameter(shader, gl.COMPILE_STATUS);
const log = gl.getShaderInfoLog(shader);
if (!compiled) {
throw new Error(log || 'Shader compilation failed');
}Фрагмент предполагает созданные WebGL-контекст gl, объект shader и ранее установленный исходный код. В движке вроде Unity используйте его журнал сборки и диагностику материала, а не этот JavaScript.
Сверить графическую среду
- Проверьте фактический API и его версию: WebGL, OpenGL ES, Vulkan или Metal — разные среды.
- Сравните версию языка шейдера, используемые расширения, типы текстур и ограничения ресурсов.
- Проверьте ветку компиляции и вариант шейдера, выбранный для мобильной сборки.
- Сведите пример к простому вершинному и фрагментному шейдеру, затем возвращайте эффекты по одному.
Если шейдер работает медленно
Измеряйте время кадра на целевом устройстве, уменьшайте сложность эффекта и объём обрабатываемых пикселей. Медленная работа и ошибка компиляции требуют разных действий. Перегрев и режим питания способны влиять на скорость, но не являются универсальным доказательством «отключения шейдеров производителем».
Что сообщить при диагностике
Модель устройства, версия ОС, графический API, движок/браузер, полный compile/link log и минимальный пример полезнее общего сообщения «не работает на телефоне».