Постоянные переменные (Uniform Variables)

Спецификатор uniform используется для объявления глобальных переменных, значения которых на протяжении всех примитивов. Все uniform переменные предназначены только для чтения и инициализируются из внешнего источника во время линковки  или через API. Инициализирующее значение времени линковки имеет либо значение инициализатора, если он имеется, либо 0 если его нет. Непрозрачные типы не могут иметь инициализаторы, иначе будет ошибка времени компиляции.

Пример объявления:

uniform vec4 lightPosition;
uniform vec3 color = vec3(0.7, 0.7, 0.2); // value assigned at link time

Спецификатор uniform может быть использован с любым базовым типов данных, структурой или массивом.

Существуют лимиты, зависящие от реализации, на объем памяти для данных переменных, которые могут быть использованы для каждого типа шейдеров и его превышение приведет к ошибке времени компиляции или времени линковки. Uniform переменные объявленные, но не используемые, не включаются в эти лимиты. Количество определяемых пользователем переменных и количество встроенных, но uniform переменных, используемых внутри шейдера, суммируется для определения превышен ли лимит.

Если несколько шейдеров связанны вместе, тогда они будут делить единое глобальное пространство имен для uniform переменных, включая, для всех используемых языков. Следовательно типы и инициализаторы для всех объявленных uniform переменных с одним именем должны совпадать во всех шейдерах, связанных в единую программу. Параллельно с этим единым пространством имен, имеется поэтапное пространство имен: если имя uniform переменной объявленное в одном этапе (например вершинный шейдер), но не не в другом (например фрагментном шейдере), тогда это имя имя все равно будет доступно на остальных этапах.

Разрешается, что бы некоторые шейдеры обеспечивали инициализацию конкретной uniform переменной, в то время как остальные шейдеры нет, но все подобные инициализации должны совпадать. Аналогично, когда используется формат расположения (ячейки памяти), не требуется, что бы все объявления данного имени включали расположение, но при наличии расположения используют одинаковое расположение.

Main Admin

3 Comments

    • На данный момент да, поднадоело немного, ну и финансовые пробелы нужно в бюджете заполнить, этим и занимаюсь пока. Со временем вернусь, сайт на хостинге будет висеть, за это не волнуйтесь.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *