На днях я упомянул про шейдеры на Forth.
Лично у меня на том сайте всё жутко лагало. Пришла в голову мысль, что проблема в webGL, который странно работает на моём компьютере... Так может на openGL всё бы хорошо пошло?
И вот наступили каникулы.
Не имея особо выбора я взял фреймворк love2d. Шейдер запустить - тут много не надо.
Основная задача - сгенерировать код на GLSL из Forth.
~ 500 строк кода на Lua, хватило.
В целом, мой выходной код получился получше чем тот, что на сайте. (хотя далёк от нормального)
Запускаю проект, получаю те же лаги. Ну чуть-чуть быстрее работает.
Переписываю один шейдер руками, по всем правилам. Всё работает удивительно быстро.
Основное различие - в сгенерированном коде, каждая операция выполняется отдельно:
s1 = sin(s1 + abs(s2))
Превратиться в что-то такое:
s2 = abs(s2)
s1 = s1 + s2
s1 = sin(s1)
Я знал, что так и будет, я так же знал, что GLSL, по словам разработчиков, генерирует очень оптимизированный код.
Видимо кто-то обманулся.