OpenGL ES 3.0 : руководство разработчика
OpenGL ES 3.0: Руководство для разработчиков мобильной графики
OpenGL ES 3.0 – это ключевой программный интерфейс для рендеринга сложной 3D-графики на мобильных и встроенных устройствах. Эта книга представляет собой подробное руководство для разработчиков, стремящихся максимально использовать графические возможности своих устройств, будь то смартфоны, планшеты или другие встраиваемые системы.
Основы и архитектура OpenGL ES 3.0
Книга начинается с введения в OpenGL ES 3.0, где рассматривается его архитектура и основные компоненты графического конвейера. Авторы объясняют философию разработки API, его ограничения и отличия от более ранних версий OpenGL ES, а также от настольного OpenGL. Рассматриваются основные этапы конвейера: вершинный шейдер, сборка примитивов, растеризация, фрагментный шейдер и пофрагментные операции. Особое внимание уделяется новым возможностям OpenGL ES 3.0, таким как поддержка sRGB-текстур, двухмерных и трехмерных текстурных массивов, сжатых текстур, а также улучшенным возможностям шейдеров и буферных объектов.
EGL: Взаимодействие с оконной системой
Важным аспектом разработки приложений OpenGL ES является взаимодействие с оконной системой. Книга подробно рассматривает EGL (EGL – это слой между API для рендеринга от Khronos, такими как OpenGL ES, и оконной системой), API, который предоставляет средства для создания поверхностей и контекстов для рендеринга. Рассматриваются этапы инициализации EGL, выбор конфигурации, создание окон и контекстов, а также синхронизация рендеринга.
Шейдеры и язык шейдеров OpenGL ES
Основная часть книги посвящена шейдерам и языку шейдеров OpenGL ES. Рассматриваются основы создания, компиляции и сборки шейдеров, а также работа с uniform-переменными и атрибутами. Подробно разбирается синтаксис языка шейдеров OpenGL ES, включая переменные, типы, конструкторы, структуры, массивы, операторы, функции, встроенные функции, управляющие операторы, uniform-переменные, uniform-блоки, входные и выходные значения, описатели точности и инвариантность.
Вершинные атрибуты, вершинные массивы и объекты-буферы
Книга подробно рассматривает, как передавать геометрические данные в графический конвейер. Рассматриваются вершинные атрибуты, вершинные массивы и объекты-буферы. Объясняется, как задавать данные для вершинных атрибутов, объявлять переменные для вершинных атрибутов в вершинном шейдере, привязывать вершинные атрибуты к переменным в шейдере и использовать вершинные объекты-буферы для повышения производительности.
Сборка примитивов и растеризация
После рассмотрения передачи геометрии в конвейер, книга переходит к описанию сборки примитивов и растеризации. Рассматриваются различные типы примитивов, поддерживаемые OpenGL ES 3.0, включая треугольники, отрезки и точечные спрайты. Объясняются процессы преобразования координат, отсечения, перспективного деления и преобразования в область видимости.
Текстурирование и фрагментные шейдеры
Книга подробно рассматривает возможности текстурирования в OpenGL ES 3.0. Рассматриваются основы текстурирования, загрузка текстур, фильтрация, форматы текстур, сжатые текстуры, объекты-сэмплеры и неизменяемые текстуры. Также рассматриваются фрагментные шейдеры, включая реализацию алгоритмов из фиксированного конвейера, мультитекстурирование, туман, альфа-тест и задаваемые пользователем плоскости отсечения.
Операции с фрагментами и объекты-фреймбуферы
Рассматриваются операции, которые могут быть применены к фрагментам после выполнения фрагментного шейдера, включая тест на попадание в заданный прямоугольник, тест трафарета, тест глубины, мультисэмплинг и смешивание цветов. Подробно описывается использование объектов-фреймбуферов для рендеринга во внеэкранные поверхности, включая рендеринг в несколько буферов цвета (MRT).
Продвинутое программирование и оптимизация
В заключительных главах рассматриваются продвинутые методы программирования с OpenGL ES 3.0, включая пофрагментное освещение, имитацию отражения окружающей среды, системы частиц, постобработку изображений, проективное текстурирование, шум с использованием трехмерной текстуры и рендеринг ландшафта. Также обсуждаются методы оптимизации, такие как использование объектов синхронизации и барьеров, а также получение информации о состоянии OpenGL ES.
Платформы OpenGL ES
Книга завершается обзором платформ OpenGL ES, включая Windows, Ubuntu Linux, Android 4.3+ NDK, Android 4.3 SDK и iOS 7, и инструкциями по сборке примеров для каждой из этих платформ.
Текст подготовлен языковой моделью и может содержать неточности.
- Полная коллекция по информатике и вычислительной технике
- ДМК Пресс. Информационные системы и технологии
- ДМК Пресс. ИТ-технологии для профессионалов
- Интермедиатор. Информационные системы и технологии (сводная)
- Интермедиатор. ИТ-технологии для профессионалов (сводная)
- Мобильная разработка
- Проектирование, отладка и тестирование ПО. Вспомогательные средства проектирования. CASE-технологии
- ВО - Бакалавриат
- 02.03.02: Фундаментальная информатика и информационные технологии
- 09.03.02: Информационные системы и технологии
- 09.03.04: Программная инженерия
OpenGL ES 3.0 Руководство разработчика
With Earlier Contributions From Dave Shreiner Aaftab Munshi OpenGL ES 3.0 Programming Guide Dan Ginsburg, Budirijanto Purnomo Upper Saddle River, NJ • Boston • Indianapolis • San Francisco New York • Toronto • Montreal • London • Munich • Paris • Madrid Capetown • Sydney • Tokyo • Singapore • Mexico City Addison-Wesley
Совместно с Дейвом Шрейнером и Аафтабом Мунши OpenGL ES 3.0 Руководство разработчика Москва, 2023 Дэн Гинсбург, Будирижанто Пурномо 2-издание, электронное
УДК 004’27OpenGL ES 3 ББК 32.972.121 Г49 Г49 Гинсбург, Дэн. OpenGL ES 3.0 : руководство разработчика / Д. Гинсбург, Б. Пурномо ; пер. с англ. А. Борескова. — 2-е изд., эл. — 1 файл pdf : 449 с. — Москва : ДМК Пресс, 2023. — Систем. требования: Adobe Reader XI либо Adobe Digital Editions 4.5 ; экран 10". — Текст : электронный. ISBN 978-5-89818-312-7 OpenGL ES — это ведущий интерфейс и графическая библиотека для рендеринга сложной трехмерной графики на мобильных устройствах. Последняя версия, OpenGL ES 3.0, делает возможным создания потрясающей графики для новых игр и приложений, не влияя на производительность устройства и время работы аккумулятора. В данной книге авторы рассматривает весь API и язык для написания шейдеров. Они внимательно рассматривают возможности OpenGL ES такие как теневые карты, дублирование геометрии, рендеринг в несколько текстур, uniform-буферы, сжатие текстур, бинарное представление программ и преобразование обратной связи. Шаг за шагом вы перейдете от вводных примеров к продвинутому попиксельному освещению и системам частиц. Также вы найдете содержательные советы по оптимизации быстродействия, максимизации эффективности работы API и GPU и полном использовании OpenGL ES в широком спектре приложений. На сайте издательства выложены примеры к книге на языке С. Издание предназначено программистам мобильных приложений, желающих максимально использовать графические возможности своих устройств. УДК 004’27OpenGL ES 3 ББК 32.972.121 Электронное издание на основе печатного издания: OpenGL ES 3.0 : руководство разработчика / Д. Гинсбург, Б. Пурномо ; пер. с англ. А. Борескова. — Москва : ДМК Пресс, 2015. — 448 с. — ISBN 978-5-97060-256-0. — Текст : непосредственный. Все права защищены. Любая часть этой книги не может быть воспроизведена в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Материал, изложенный в данной книге, многократно проверен. Но поскольку вероятность технических ошибок все равно существует, издательство не может гарантировать абсолютную точность и правильность приводимых сведений. В связи с этим издательство не несет ответственности за возможные ошибки, связанные с использованием книги. В соответствии со ст. 1299 и 1301 ГК РФ при устранении ограничений, установленных техническими средствами защиты авторских прав, правообладатель вправе требовать от нарушителя возмещения убытков или выплаты компенсации. ISBN 978-5-89818-312-7 © 2014 Pearson Education, Inc. © Оформление, перевод, ДМК Пресс, 2015
Содержание Предисловие ......................................................... 14 Введение .............................................................. 15 Благодарности ....................................................... 20 Об авторах ............................................................ 22 Глава 1. Введение в OpenGL ES 3.0 ............................ 23 OpenGL ES 3.0 ...............................................................................................................................25 Вершинный шейдер .............................................................................................................26 Сборка примитивов .............................................................................................................28 Растеризация ..........................................................................................................................28 Фрагментный шейдер .........................................................................................................29 Пофрагментные операции .................................................................................................30 Что нового в OpenGL ES 3.0? ..................................................................................................32 Текстурирование ...................................................................................................................32 Шейдеры ..................................................................................................................................34 Геометрия .................................................................................................................................35 Буферные объекты ...............................................................................................................36 Фреймбуфер ...........................................................................................................................37 OpenGL ES 3.0 и обратная совместимость ..........................................................................37 EGL ...................................................................................................................................................38 Программирование с OpenGL ES 3.0 ............................................................................39 Библиотеки и заголовочные файлы ...............................................................................39 Синтаксис EGL .............................................................................................................................40 Синтаксис команд OpenGL ES ...............................................................................................40 Обработка ошибок .......................................................................................................................42 Основы управления состоянием ............................................................................................43 Дальнейшее чтение ......................................................................................................................44 Глава 2. Hello Triangle: пример использования OpenGL ES 3.0 ........................................................ 45 Используемая библиотека ........................................................................................................45 Где можно скачать примеры .....................................................................................................46 Пример Hello Triangle.................................................................................................................46 Использование библиотеки утилит для OpenGL ES 3.0................................................50
Содержание Создание простого вершинного и фрагментного шейдеров .........................................51 Компиляция и загрузка шейдеров .........................................................................................53 Создание объекта-программы и сборка шейдеров ...........................................................54 Задание области вывода и очистка буфера цвета .............................................................55 Загрузка геометрии и вывод примитива ..............................................................................56 Отображение буфера ..................................................................................................................56 Резюме .............................................................................................................................................57 Глава 3. Введение в EGL ........................................... 58 Взаимодействие с оконной системой ....................................................................................58 Проверка на ошибки ...................................................................................................................59 Инициализация EGL ..................................................................................................................60 Определение допустимых конфигураций поверхностей ...............................................60 Получение атрибутов EGLConfig ...........................................................................................61 Позволяем EGL выбрать конфигурацию ............................................................................64 Создание видимой области для рендеринга: окна EGL .................................................66 Создание внеэкранных областей для рендеринга: п-буферы EGL .............................68 Создание контекста для рендеринга .....................................................................................71 Делаем EGLContext текущим ..................................................................................................73 Собираем все вместе ...................................................................................................................73 Синхронизация рендеринга .....................................................................................................75 Резюме .............................................................................................................................................76 Глава 4. Шейдеры и программы ................................ 77 Шейдеры и программы ..............................................................................................................77 Создание и компилирование шейдера ..........................................................................78 Создание и сборка программы .........................................................................................81 Uniform-переменные и атрибуты ...........................................................................................85 Получение информации и задание значений для uniform-переменных ...........86 Uniform-буферы ....................................................................................................................92 Получение и задание атрибутов .....................................................................................96 Компилятор шейдеров ...............................................................................................................97 Бинарные программы .................................................................................................................97 Резюме .............................................................................................................................................98 Глава 5. Шейдерный язык OpenGL ES ......................... 99 Основы шейдерного языка OpenGL ES ...............................................................................99 Задание версии шейдера ......................................................................................................... 100 Переменные и типы переменных ........................................................................................ 100
Содержание 7 Конструкторы переменных ................................................................................................... 101 Векторные и матричные компоненты ................................................................................ 102 Константы .................................................................................................................................... 103 Структуры ................................................................................................................................... 104 Массивы ....................................................................................................................................... 104 Операторы ................................................................................................................................... 105 Функции....................................................................................................................................... 106 Встроенные функции............................................................................................................... 107 Управляющие операторы ....................................................................................................... 107 Uniform-переменные ................................................................................................................ 108 Uniform-блоки ............................................................................................................................ 109 Входные и выходные значения вершинного/фрагментного шейдера ................... 111 Описатели интерполяции ...................................................................................................... 113 Препроцессор и его команды ................................................................................................ 114 Упаковка uniform-переменных и интерполяторов ........................................................ 116 Описатели точности ................................................................................................................. 117 Инвариантность......................................................................................................................... 118 Резюме .......................................................................................................................................... 121 Глава 6. Атрибуты вершины, вершинные массивы и объекты-буферы .................................................122 Задание данных для вершинных атрибутов .................................................................... 123 Постоянный вершинный атрибут ................................................................................ 123 Вершинные массивы ........................................................................................................ 123 Советы по оптимизации .................................................................................................. 127 Объявление переменных для вершинного атрибута в вершинном шейдере ....... 131 Привязка вершинного атрибута к переменной в шейдере .................................. 133 Вершинные объекты-буферы ............................................................................................... 136 Объект состояния вершинных буферов (Vertex Array Object) ................................ 145 Отображение буферов в память приложения ................................................................. 149 Сбрасывание отображенного буфера ......................................................................... 152 Копирование данных между буферами ............................................................................. 152 Резюме .......................................................................................................................................... 153 Глава 7. Сборка примитивов и растеризация ..............155 Примитивы .................................................................................................................................. 155 Треугольники ...................................................................................................................... 155 Отрезки ................................................................................................................................. 156 Точечные спрайты ............................................................................................................. 157
Введение Вывод примитивов ................................................................................................................... 159 Перезапуск примитива .................................................................................................... 161 Провоцирующая вершина (provoking vertex) ......................................................... 162 Дублирование геометрии (geometry instancing) ..................................................... 162 Советы по оптимизации .................................................................................................. 165 Сборка примитивов .................................................................................................................. 167 Системы координат .......................................................................................................... 168 Отсечение ............................................................................................................................. 168 Перспективное деление ................................................................................................... 170 Преобразование в область видимости ........................................................................ 170 Растеризация .............................................................................................................................. 171 Отсечение ............................................................................................................................. 171 Смещение полигона .......................................................................................................... 173 Запросы видимости .................................................................................................................. 175 Резюме .......................................................................................................................................... 177 Глава 8. Вершинные шейдеры .................................178 Обзор вершинного шейдера .................................................................................................. 179 Встроенные переменные вершинного шейдера ...................................................... 180 Встроенные специальные переменные ...................................................................... 180 Встроенные uniform-переменные, хранящие состояние ...................................... 181 Встроенные константы .................................................................................................... 181 Описатели точности ......................................................................................................... 182 Ограничения на использование uniform-переменных в вершинном шейдере ................................................................................................................................. 183 Примеры вершинных шейдеров .......................................................................................... 186 Матричные преобразования .......................................................................................... 186 Модельно-видовая матрица ........................................................................................... 187 Матрица проектирования ............................................................................................... 188 Расчет освещения в вершинном шейдере ................................................................. 188 Генерация текстурных координат ....................................................................................... 194 Вершинный скиннинг ............................................................................................................. 195 Преобразование обратной связи (transform feedback) ................................................. 200 Вершинные текстуры............................................................................................................... 202 Вершинный конвейер OpenGL ES 1.1 как вершинный шейдер OpenGL ES 3.0 ............................................................................................................................ 203 Резюме .......................................................................................................................................... 210 Глава 9. Текстурирование ........................................211 Основы текстурирования ....................................................................................................... 211
Содержание 9 Двухмерные текстуры ...................................................................................................... 211 Кубические текстурные карты ...................................................................................... 213 Трехмерные текстуры ....................................................................................................... 214 Массив двухмерных текстур ......................................................................................... 214 Текстурные объекты и загрузка текстур .................................................................... 215 Фильтрование текстуры и пирамидальное фильтрование ................................. 220 Бесшовная фильтрация кубических текстур ........................................................... 224 Автоматическое построение пирамиды изображений ......................................... 224 Отсечение текстурных координат ............................................................................... 225 Перестановки каналов ..................................................................................................... 227 Текстурный уровень детализации ............................................................................... 227 Сравнение для текстуры глубины (Percentage Closest Filtering, PCF) .......... 228 Форматы текстур ............................................................................................................... 228 Нормализованные текстурные форматы .................................................................. 229 Форматы текстур с плавающей точкой ..................................................................... 230 Целочисленные текстурные форматы ........................................................................ 231 Форматы текстур с общей экспонентой .................................................................... 232 Текстурные форматы sRGB ........................................................................................... 233 Форматы для текстур глубины ..................................................................................... 234 Использование текстур в шейдере .............................................................................. 234 Пример использования кубической текстуры ........................................................ 237 Загрузка трехмерных текстур и массивов двухмерных текстур ....................... 239 Сжатые текстуры....................................................................................................................... 240 Задание части изображения текстуры ............................................................................... 243 Копирование текстурных данных из буфера цвета ...................................................... 246 Объекты-сэмплеры ................................................................................................................... 249 Неизменяемые текстуры ........................................................................................................ 252 Распаковка объектов-буферов.............................................................................................. 253 Резюме .......................................................................................................................................... 254 Глава 10. Фрагментные шейдеры .............................255 Пример реализации фиксированного конвейера .......................................................... 256 Обзор фрагментного шейдера .............................................................................................. 257 Встроенные специальные переменные ...................................................................... 258 Встроенные константы .................................................................................................... 259 Описатели точности ......................................................................................................... 260 Реализация алгоритмов из фиксированного конвейера при помощи шейдеров ...................................................................................................................................... 260 Мультитекстурирование ................................................................................................. 261 Туман ...................................................................................................................................... 262
Содержание Альфа-тест (с использованием discard) ..................................................................... 265 Задаваемые пользователем плоскости отсечения .................................................. 267 Резюме .......................................................................................................................................... 269 Глава 11. Операции с фрагментами ..........................270 Буферы ......................................................................................................................................... 270 Запрос дополнительных буферов ............................................................................... 271 Очистка буферов ............................................................................................................... 272 Использование масок для управления записью во фреймбуферы .................. 273 Тесты фрагментов и операции .............................................................................................. 275 Использование теста попадания в прямоугольник (scissor test) ...................... 275 Тесты трафарета ................................................................................................................. 276 Тесты глубины .................................................................................................................... 281 Смешение цветов (альфа-блендинг) .................................................................................. 282 Растрирование ............................................................................................................................ 284 Антиалиасинг с использованием мультисэмплинга ..................................................... 284 Использование спецификатора centroid ................................................................... 285 Чтение и запись пикселов во фреймбуфер ...................................................................... 286 Объекты-буферы для упаковки пикселов ................................................................ 289 Рендеринг в несколько буферов цвета (MRT) ............................................................... 290 Резюме .......................................................................................................................................... 293 Глава 12. Объекты-фреймбуферы ............................294 Зачем нужны объекты-фреймбуферы? ............................................................................. 294 Объекты-фреймбуферы и рендербуферы ....................................................................... 296 Выбор между рендербуфером и текстурой в качестве подключения к фреймбуферу ................................................................................................................... 296 Сравнение объектов-фреймбуферов с поверхностями EGL .............................. 297 Создание объектов-фреймбуферов и рендербуферов.................................................. 298 Использование рендербуферов ............................................................................................ 298 Рендербуферы с мультисэмплингом........................................................................... 300 Форматы рендербуфера .................................................................................................. 301 Использование объектов-фреймбуферов ......................................................................... 302 Подключение рендербуфера к точке подключения фреймбуфера .................. 303 Подключение двухмерной текстуры к фреймбуферу........................................... 304 Подключение слоя трехмерной текстуры к фреймбуферу ................................. 305 Проверка полноты фреймбуфера ................................................................................ 306 Копирование между фреймбуферами ............................................................................... 307 Сообщение о том, что содержимое фреймбуфера больше не нужно ...................... 309