Интерфейс между шейдерами всегда статически определен. У шейдера всегда есть входы X.
Если вы хотите, чтобы некоторая информация определялась динамически, вам придется использовать существующие инструменты (загрузка / сохранение изображений, SSBO, UBO и т. Д.), Чтобы прочитать этоинформация сама. Это вполне возможно для вершинных шейдеров, так как индекс gl_VertexID
может использоваться как индекс в массиве.
В общем, однако, людям это не нужно. Они просто определяют определенный формат вершины и придерживаются этого. Действительно, ваш конкретный вариант использования, похоже, не нуждается в этом, поскольку вы изменяете только значения координат текстуры, а не то, используются они или нет.
Мне нужно перенастроить размер набора texcoord динамически для редактирования в реальном времени.
Это не совсем возможно, особенно для описанного вами варианта использования.
Рассмотрим карту нормалей. Разница между использованием карты нормалей и не использованием карты нормалей существенна. Не только в том, какие параметры вы передаете в VS, но и в фундаментальной природе вашего шейдера.
Нормальные карты обычно представляют собой касательное пространство. Так что вашему шейдеру теперь нужна полная матрица NBT. И вам, вероятно, придется передать эту матрицу в ваш фрагментный шейдер, который будет использовать ее для построения нормали из карты нормалей. Конечно, если вы не используете карту нормалей, вы просто получите нормаль для каждой вершины. Итак, вы говорите о существенных изменениях в структуре вашего кода, а не только о входных данных.
Шейдеры - это просто строки, поэтому вы можете динамически создавать их по своему усмотрению. Но это будет на много сложнее, чем то, что получает ваш VS.