Comments 3
Напомнило знаменитый эпизод Доктора Дью, о сушилке электродов.
чтобы написанное на JavaScript выражение, например:
res.rgb = (bias.zyx - min(max(src.rgb, 1), vec3(c.rg, 0.2))) * a[i + offset.x + 1].w;
при выполнении создало строку GLSL-кода:
“res.rgb = (bias.zyx - min(max(src.rgb, 1.0), vec3(c.rg, 0.2))) * a[i + offset.x + 1].w;”
нужны лишь простые советские... кавычки.
Если не планируется из этого генерировать что-то ещё помимо glsl или исполнять эти шейдеры программно прям в js :), то препроцессора самого glsl вроде более чем достаточно (плюс некая рефлексия что можно вытащить из скомпилированного шейдера типа списка uniform) с генерацией только лишь различных #define в рантайме из JS, но при этом будет человеческий GLSL, ну в крайнем случае примитивные "расширения" вроде того же #include и такой же примитивный парсер который по этому "расширенному" glsl пройдётся в качестве препрепроцессора.
Генерить из этого не glsl, а какой-нибудь wgsl, например, подозреваю будет довольно больно.
Для отладки - ну наверное возможно, но JS.
За интересную и необычную концепцию плюс, но вот тема области применения малость не раскрыта.
используя все удобства IDE, такие как рефакторинг, подсветка синтаксиса, автокомплит и проверка на ошибки, а в математических выражениях использовать обычные JS операторы: +, -, , /, =, +=, -=, =, /=, ++, --.
Для этого уже есть плагины для IDE, поддерживающие glsl. Более того, IDE поддерживают интеграцию одного языка в другой, то есть сохраняется и подсветка синтаксиса, и рефакторинг, если вы напишите так:
const vectorShader = `
#version 300 es
void main() {
}
`
JavaScript Shader Language или JSSL