Использование фиксированной функции OpenGL грубо выполняет следующие шаги:
- Настройка матрицы проекции
- Настройка матрицы вида модели
- Установка параметров освещения
- Привязка текстур к текстурным блокам
- Определение операций текстурной среды
- Настройкаup geometry (Vertex Arrays / Vertex Buffer Objects)
- Выполнить команды рисования
Это первые 5 шагов, которые отличаются при использовании шейдеров.Шейдеры заменяют конвейер с фиксированной функцией, который управляется настройками, выполненными там.Прежде всего, вы должны предоставить шейдеры, которые реализуют преобразование вершин и генерацию фрагментов.Эти шейдеры принимают свои параметры в виде так называемых Uniforms .
Вы по-прежнему работаете с матрицами, только на этот раз вы доставляете их в OpenGL через униформу вместо стека матриц (в OpengGL-2 и OpenGL-3 профиля совместимости, матричный стек все еще там, а матрицы помещены во встроенную форму).
Текстуры по-прежнему связаны с текстурными единицами.С помощью сэмплерной формы текстурные единицы передаются в генерацию фрагмента.Вся текстурная среда была заменена фрагментными шейдерами.И, честно говоря: настроить фрагментный шейдер гораздо проще, чем возиться с дюжиной вызовов glTexEnvi.
Освещение происходит через шейдеры, поэтому вы передаете параметры освещения в форме и выполняете вычисления в шейдерах.
Команды рисования остаются неизменными.
Будет ли моя основная функция рендеринга выполняться с помощью шейдеров
Если под этим вы подразумеваете, будет ли шейдер делатьРисунок призывает: Нет!На самом деле не так сложно поднять старый рендерер OpenGL-1.1, который не использует списки отображения, режим выбора и немедленный режим, в ядро OpenGL-3.(Если включены списки отображения, режим выбора и немедленный режим ...)