Более поздние спецификации OpenGL - больше, чем шейдеры? - PullRequest
3 голосов
/ 30 марта 2011

Я почти полностью программировал OpenGL в спецификации 2, и мало что знаю о спецификациях 3 и 4.Я читал на каком-то форуме, что более поздние спецификации OpenGL в основном просто передают данные в шейдеры, которые выполняют всю настоящую работу.Это будет резко контрастировать с тем, что я понимаю как OpenGL, и шейдеры как вспомогательный инструмент для таких вещей, как освещение, вода и другие эффекты. У меня в лучшем случае есть базовое понимание шейдеров, и я не удивлюсь, если окажется, что это неправильно.в любой из ранее упомянутых тем.Мне просто интересно для лучшего понимания

Спасибо

Ответы [ 4 ]

6 голосов
/ 30 марта 2011

Ваше понимание верно.В OpenGL 3.0 почти вся фиксированная функциональность устарела в пользу шейдеров.Даже встроенные элементы, доступные из шейдеров, устарели, такие как матрицы моделей / проекций, координаты вершин, нормали, источники света и т. Д.

Основной рабочий процесс должен выглядеть следующим образом:

  • Загрузка геометрии и атрибутов для каждой вершины через VBO
  • Загрузка текстур, шейдеров
  • Передача таких вещей, как матрицы, источники света в шейдеры через униформу
  • Передача значений на каждую вершину, например, координат вершинтекстурные координаты, нормали, через массивы общих атрибутов (в VBO)
  • Call glDrawElements или glDrawArrays

Так что большинство вызовов OpenGL, которые вы будете делать, простотолкая общие данные вокруг.Вместо функций состояния, таких как glLightfv, вы будете вызывать универсальные функции, такие как glUniform4f.

2 голосов
/ 30 марта 2011

Если вы уже использовали шейдеры, изменений не много. Вы сталкиваетесь с чем-то, чего не хватает, добавляете умножение матриц в коде рендеринга и две строки в свой шейдер (или, скорее, на половину строки), и жизнь продолжается.

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

В любом случае все равно ничего не будет работать. Тогда вы узнаете, что вам нужно связать VAO. На самом деле вам ничего не нужно делать с этим (если вы не хотите использовать несколько VAO для управления состоянием), вам просто нужен один, потому что ни один из других атрибутов / VBO не работает без него.

Когда вы закончите, вы можете подумать об интеграции вычислений GPGPU с использованием шейдеров или OpenCL и передать данные для рендеринга, все в графической памяти.

1 голос
/ 30 марта 2011

Я думаю, что идея в том, что геометрия проста. Мы победили геометрию до смерти. Существуют двигатели, которые прекрасно справляются с геометрией.

Теперь настоящие проблемы заключаются в том, как нам сделать эту геометрию более реалистичной? Такого рода работа (лучше всего) выполняется с помощью шейдеров, поэтому именно в этом и заключается направленность профессии.

0 голосов
/ 30 марта 2011

Текущие спецификации OpenGL по-прежнему имеют почти ту же геометрию, что и раньше.То, что они больше не делают, это (автоматически) обрабатывают вещи, которые довольно легко сделать в шейдерах.Например, они больше не интерполируют между цветами вершин, чтобы получить цвет для каждого пикселя.Аппаратура интерполяции все еще там, так что шейдер тривиален, но все же необходим.

...