Я сделал парсер glsl -> metal, который работает довольно хорошо, если в коде glsl не используются очень старые функции.
Самая большая проблема, с которой я сталкиваюсь, это когда код glsl не не явно определяют местоположение привязки текстуры, например:
uniform layout(binding = 0) sampler2D myTexture; // this is fine
uniform sampler2D myTexture2; // this is the problem
В металле вы должны определить индекс текстуры во время компиляции. В то время как в glsl вам разрешено указать (и изменить) его во время выполнения.
Я считаю, что это невозможно, особенно потому, что я не могу найти его в spe c, но кто-нибудь знает возможно ли указать (или изменить) индекс текстуры металлического шейдера на лету на стороне процессора?
texture2d < half > myTexture[[ texture(IDX) ]] // where IDX is not constexpr?