Pull to refresh

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() {
}
`
Sign up to leave a comment.

Articles