Можно ли отлаживать шейдеры в Android OpenGL ES 2?

Есть ли возможность отлаживать шейдеры (фрагментные и вершинные) в Android-приложении с OpenGL-ES 2?

Поскольку мы передаем только строку с кодом и кучу переменных для замены дескрипторами, очень утомительно находить нужные изменения, которые необходимо сделать.

  • Можно ли писать в журнал Android, как в Log.d()

  • Можно ли использовать точки останова и проверять текущие значения в вычислениях шейдера?

Я просто больше не привык писать код с помощью пера, и это похоже на кодирование в текстовом коде шейдера.


person Björn Kechel    schedule 15.12.2016    source источник


Ответы (2)


Нет. Помните, что GPU будет выполнять каждую программу миллионы раз (один раз для каждой вершины и один раз для каждого фрагмента), часто с сотнями одновременно работающих потоков, поэтому любая концепция «подключения отладчика» практически невозможна.

person solidpixel    schedule 15.12.2016
comment
Это то, чего я боялся, я надеялся, что можно хотя бы один раз пройтись по коду шейдера, чтобы увидеть, что на самом деле происходит с передаваемыми переменными. - person Björn Kechel; 15.12.2016

Это старый вопрос, но поскольку он появляется первым в поиске, а старый ответ можно расширить, я оставляю альтернативный ответ:

Хотя печать или отладка, как мы делаем на Java или Kotlin, невозможны, это не означает, что их нельзя отлаживать. раньше был инструмент на ныне устаревшем мониторе Android, позволяющий вам видеть трассировка вашего графического процессора кадр за кадром, включая проверку вызовов и геометрии.

На данный момент официальным отладчиком графического процессора является Android GPU Inspector, который имеет некоторые полезные показатели производительности и будет включать покадровую отладку. в будущем обновлении.

Запись экрана инструмента отладки кадров

Если в Android GPU Inspector нет того, что вам нужно, вы можете использовать отладчики конкретных поставщиков в зависимости от вашего устройства (отладчик графики Mali, отладчик Snapdragon и т. д.)

person Logain    schedule 10.05.2021