Пишу фрагментный шейдер для WebGL (GLSL ES 1.0 )с использованием последней версии Chrome (и Firefox ), и я написал итерационный алгоритм.
Итак, во-первых, я на собственном горьком опыте обнаружил, что длина цикла довольно ограничена (doc говорит, что она должна быть угадываемой во время компиляции -, что означает, что она должна быть постоянной или очень близкой ).
Кроме того, я должен написать(for
, так как это единственный, который должен быть реализован в соответствии со стандартным )циклом, который потенциально длинный, но прерывается почти каждый раз до конца.
Теперь я заметил, что если я устанавливаю более высокое максимальное число, компиляция и компоновка шейдера занимают намного больше времени. Итак, если я не ошибаюсь, компилятор раскручивает цикл.
Я не уверен, что можно что-то сделать, но я пробовал кое-что, и компилятор, кажется, также встраивает функции, даже когда они вызываются в циклах.
Мне не кажется нормальным, что шейдеру требуется целая минута на компиляцию примерно сотни итераций цикла. Или я делаю не так? Сотня итераций во фрагментном шейдере слишком много для GPU? Потому что он, кажется, работает нормально после компиляции.