Авторы доступно излагают основные принципы, требуемые для разработки приложений, использующих OpenGL. Текст написан понятно, четко и без лишних отступлений; материал иллюстрируется с помощью прекрасных примеров. Книга удачно структурирована, ее удобно использовать и как учебник, и как справочник; каждая глава завершается справочным разделом, в котором конспективно представлены все функции OpenGL, имеющие отношение к рассмотренной теме. Много внимания уделено тому, чтобы рекомендуемый код не просто работал, но работал эффективно, быстро надежно и на всех основных платформах.
Управление высокоуровневыми шейдерами Утвержденные . Здесь больше нет обязательной цепочки . Объекты шейдера В . Наше рассмотрение начнется с объектов шейдера, которые загружаются с текстом шейдера, а затем компилируются. Создание и удаление Объекты шейдера создаются посредством вызова функции . Эта функция возвращает обработчик объекта шейдера, используемый для последующего обраще. Это бывает при перерасходе . Завершив работу с объектами шейдеров, следует убрать ненужное. Глава . Текст шейдера может быть жестко закодирован в виде строкового литерала, считывать. В любом случае он дол. Ее второй аргумент представляет собой счетчик, указывающий количество указателей на стро. Перед компиляцией эти строки последовательно выстраиваются в одну большую строку. Описанная возможность полезна, например, когда из библиотеки функций загружаются подпрограммы с возможностью повторного использования. Однако если текст шейдера не заканчивается символом конца строки, длину нужно указывать, причем длина считается без символа конца строки . В приведенном ниже коде вместе с массивом указателей строк передается указатель на массив длины. Кроме того, каждый объект имеет информационную запись, которая в случае сбоя компиляции содержит сообщения об ошибках. Кроме того, она может содержать предупреждения или другую полезную информацию, даже если компиляция прошла успешно. Если вы не собираетесь выделять большой статический массив для хране. Этот объект выступает как контейнер для объектов шейдеров, связывая их в единый ис. В настоящее время замещать можно только каскады обработки вершин и фрагментов, но данный список можно расширить, включив в него дополнительные этапы Создание и удаление Объекты программы создаются и удаляются точно так же, как объекты шейдеров. Можете заменить схемой . При этом все ранее скомпилированные объекты шейдеров связываются в один исполняемый файл. Используя верификацию, вы исследуете теку. Обратите внимание на то, что верификация объекта программы перед визуализацией необязательна, однако, если вы попытаетесь использовать объект программы, . Использование программ Наконец, вы готовы запустить программу. В отличие от других возможностей . Настройка расширений Подобно расширениям низкоуровневых шейдеров . Следовательно, наличие нужных расширений следует проверить с помощью запроса, кроме того . Необходимо проверить наличие четырех расширений . Первое содержит функциональные возможности, совместно исполь. Последнее отражает доступную версию языка затенения . Скорее всего со временем будут доступны обновленные версии. Листинг . В имени переменной разреша. Кроме того, переменная не может начинаться с префикса д. Существует список зарезервированных ключевых слов, доступных в спецификации языка шейдеров ОрепСЬ. . Стандартные типы данных Тип Описание . Используется преимущественно как счетчик циклов или индекс массивов Переменная в формате с плавающей запятой, аппроксимирующая формат обычной точности. Может выражаться в научной форме записи . Структуры Структуры можно использовать для группирования стандартных типов данных в ти. Определяя структуру, можно объявить эк. Чтобы обратиться к отдельному полю структуры, используется селектор . В отличие от структур языка С, . Вложение одной структуры в дру. При этом размер массива объявлять не нужно, если он индексируется до ю. В противном случае размер массива необходимо объявить . . Спецификаторы типа . Во время выпопнения шейдера оно имеет статус . Их следует объявлять глобально . Должны объявляться глобально . Если спецификатор отсутствует, подобное поведение аргументов функции принимается по умолчанию . Допустимые спецификаторы перечислены в табл . Встроенные переменные Встроенные переменные позволяют взаимодействовать с конвейером с фиксирован. Отметим, что их не нужно объявлять перед использованием. Большая часть встроенных переменных перечислена в табл. Выражения В последующих разделах описываются различные операторы и выражения . Глава . Встроенные переменные шейдеров вершин Имя Тип Описание . Полный их список приводится в табл. В языке . . Встроенные переменные шейдеров фрагментов Имя Тип Описание . Операторы в порядке старшинства . Если вы указываете единственное скалярное зна. Преобразование типа . При обратном преобразовании отбрасывается дробная часть числа. При преобразовании величин типа . Обратите внимание на использование в текстурных координатах буквы р вместо привычной г. Данный компонент был переименован, чтобы избежать путани. Селекторы, характеризующие различные форматы записи, смешивать не разрешается. В таком случае нельзя использовать селекторы компонентов более одного раза. Если обратиться к компоненту, отсутствующему в векторе или матрице, результат выполнения шейдера будет неопределенным, . Указывая второй индекс массива, вы обращаетесь к соответствующему компоненту этого вектора. Циклы Вы можете использовать циклы . Для преждевременного перехода к следующей итерации или выхода из цикла можно использовать команды . Данные условные операторы также могут быть вложенными, . Все последующие каскады конвейе. Подобные определения или объявления должны быть глобальными, те располагаться вне всех функций. Возвращаемые типы и типы всех аргументов функ. Кроме того, аргументы могут иметь необязательный спецификатор .